element-vir 5.4.2 → 5.6.0

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 (121) hide show
  1. package/README.md +85 -4
  2. package/dist/{cjs/augments → augments}/array.d.ts +0 -0
  3. package/dist/{esm/augments → augments}/array.js +0 -0
  4. package/dist/{cjs/augments → augments}/type.d.ts +0 -0
  5. package/dist/{esm/augments → augments}/type.js +0 -0
  6. package/dist/functional-element/css-vars.d.ts +6 -0
  7. package/dist/functional-element/css-vars.js +22 -0
  8. package/dist/functional-element/define-functional-element.d.ts +4 -0
  9. package/dist/{esm/functional-element → functional-element}/define-functional-element.js +30 -3
  10. package/dist/{cjs/functional-element → functional-element}/directives/assign-with-clean-up.directive.d.ts +0 -0
  11. package/dist/{esm/functional-element → functional-element}/directives/assign-with-clean-up.directive.js +0 -0
  12. package/dist/{types/functional-element → functional-element}/directives/assign.directive.d.ts +2 -2
  13. package/dist/{esm/functional-element → functional-element}/directives/assign.directive.js +0 -0
  14. package/dist/{esm/functional-element → functional-element}/directives/directive-util.d.ts +2 -2
  15. package/dist/{esm/functional-element → functional-element}/directives/directive-util.js +0 -0
  16. package/dist/{cjs/functional-element → functional-element}/directives/listen.directive.d.ts +0 -0
  17. package/dist/{esm/functional-element → functional-element}/directives/listen.directive.js +0 -0
  18. package/dist/{cjs/functional-element → functional-element}/directives/on-dom-created.directive.d.ts +0 -0
  19. package/dist/{esm/functional-element → functional-element}/directives/on-dom-created.directive.js +0 -0
  20. package/dist/{cjs/functional-element → functional-element}/directives/on-resize.directive.d.ts +0 -0
  21. package/dist/{esm/functional-element → functional-element}/directives/on-resize.directive.js +0 -0
  22. package/dist/{cjs/functional-element → functional-element}/element-events.d.ts +0 -0
  23. package/dist/{esm/functional-element → functional-element}/element-events.js +0 -0
  24. package/dist/{esm/functional-element → functional-element}/element-properties.d.ts +2 -2
  25. package/dist/{esm/functional-element → functional-element}/element-properties.js +0 -0
  26. package/dist/{esm/functional-element → functional-element}/functional-element.d.ts +25 -10
  27. package/dist/{esm/functional-element → functional-element}/functional-element.js +0 -0
  28. package/dist/functional-element/host-classes.d.ts +19 -0
  29. package/dist/functional-element/host-classes.js +12 -0
  30. package/dist/{types/functional-element → functional-element}/render-callback.d.ts +3 -3
  31. package/dist/{esm/functional-element → functional-element}/render-callback.js +0 -0
  32. package/dist/functional-element/styles.d.ts +16 -0
  33. package/dist/functional-element/styles.js +29 -0
  34. package/dist/functional-element/tag-name.d.ts +2 -0
  35. package/dist/functional-element/tag-name.js +4 -0
  36. package/dist/{cjs/index.d.ts → index.d.ts} +0 -0
  37. package/dist/{esm/index.js → index.js} +0 -0
  38. package/dist/{cjs/require-functional-element.d.ts → require-functional-element.d.ts} +0 -0
  39. package/dist/{esm/require-functional-element.js → require-functional-element.js} +0 -0
  40. package/dist/{cjs/template-transforms → template-transforms}/has-static-tag-name.d.ts +0 -0
  41. package/dist/{esm/template-transforms → template-transforms}/has-static-tag-name.js +0 -0
  42. package/dist/{cjs/template-transforms → template-transforms}/transform-template.d.ts +0 -0
  43. package/dist/{esm/template-transforms → template-transforms}/transform-template.js +0 -0
  44. package/dist/{cjs/template-transforms → template-transforms}/vir-css/css-transform.d.ts +0 -0
  45. package/dist/{esm/template-transforms → template-transforms}/vir-css/css-transform.js +0 -0
  46. package/dist/{cjs/template-transforms → template-transforms}/vir-css/vir-css.d.ts +0 -0
  47. package/dist/{esm/template-transforms → template-transforms}/vir-css/vir-css.js +0 -0
  48. package/dist/{cjs/template-transforms → template-transforms}/vir-html/html-transform.d.ts +0 -0
  49. package/dist/{esm/template-transforms → template-transforms}/vir-html/html-transform.js +0 -0
  50. package/dist/{cjs/template-transforms → template-transforms}/vir-html/vir-html.d.ts +0 -0
  51. package/dist/{esm/template-transforms → template-transforms}/vir-html/vir-html.js +0 -0
  52. package/dist/{cjs/typed-event → typed-event}/typed-event.d.ts +0 -0
  53. package/dist/{esm/typed-event → typed-event}/typed-event.js +0 -0
  54. package/package.json +8 -9
  55. package/dist/cjs/augments/array.js +0 -7
  56. package/dist/cjs/augments/type.js +0 -2
  57. package/dist/cjs/functional-element/define-functional-element.d.ts +0 -4
  58. package/dist/cjs/functional-element/define-functional-element.js +0 -47
  59. package/dist/cjs/functional-element/directives/assign-with-clean-up.directive.js +0 -40
  60. package/dist/cjs/functional-element/directives/assign.directive.d.ts +0 -15
  61. package/dist/cjs/functional-element/directives/assign.directive.js +0 -27
  62. package/dist/cjs/functional-element/directives/directive-util.d.ts +0 -15
  63. package/dist/cjs/functional-element/directives/directive-util.js +0 -27
  64. package/dist/cjs/functional-element/directives/listen.directive.js +0 -51
  65. package/dist/cjs/functional-element/directives/on-dom-created.directive.js +0 -26
  66. package/dist/cjs/functional-element/directives/on-resize.directive.js +0 -39
  67. package/dist/cjs/functional-element/element-events.js +0 -29
  68. package/dist/cjs/functional-element/element-properties.d.ts +0 -16
  69. package/dist/cjs/functional-element/element-properties.js +0 -55
  70. package/dist/cjs/functional-element/functional-element.d.ts +0 -42
  71. package/dist/cjs/functional-element/functional-element.js +0 -7
  72. package/dist/cjs/functional-element/render-callback.d.ts +0 -21
  73. package/dist/cjs/functional-element/render-callback.js +0 -24
  74. package/dist/cjs/index.js +0 -33
  75. package/dist/cjs/require-functional-element.js +0 -8
  76. package/dist/cjs/template-transforms/has-static-tag-name.js +0 -10
  77. package/dist/cjs/template-transforms/transform-template.js +0 -74
  78. package/dist/cjs/template-transforms/vir-css/css-transform.js +0 -16
  79. package/dist/cjs/template-transforms/vir-css/vir-css.js +0 -16
  80. package/dist/cjs/template-transforms/vir-html/html-transform.js +0 -48
  81. package/dist/cjs/template-transforms/vir-html/vir-html.js +0 -20
  82. package/dist/cjs/typed-event/typed-event.js +0 -37
  83. package/dist/esm/augments/array.d.ts +0 -1
  84. package/dist/esm/augments/type.d.ts +0 -1
  85. package/dist/esm/functional-element/define-functional-element.d.ts +0 -4
  86. package/dist/esm/functional-element/directives/assign-with-clean-up.directive.d.ts +0 -19
  87. package/dist/esm/functional-element/directives/assign.directive.d.ts +0 -15
  88. package/dist/esm/functional-element/directives/listen.directive.d.ts +0 -13
  89. package/dist/esm/functional-element/directives/on-dom-created.directive.d.ts +0 -11
  90. package/dist/esm/functional-element/directives/on-resize.directive.d.ts +0 -15
  91. package/dist/esm/functional-element/element-events.d.ts +0 -10
  92. package/dist/esm/functional-element/render-callback.d.ts +0 -21
  93. package/dist/esm/index.d.ts +0 -15
  94. package/dist/esm/require-functional-element.d.ts +0 -2
  95. package/dist/esm/template-transforms/has-static-tag-name.d.ts +0 -4
  96. package/dist/esm/template-transforms/transform-template.d.ts +0 -16
  97. package/dist/esm/template-transforms/vir-css/css-transform.d.ts +0 -7
  98. package/dist/esm/template-transforms/vir-css/vir-css.d.ts +0 -3
  99. package/dist/esm/template-transforms/vir-html/html-transform.d.ts +0 -3
  100. package/dist/esm/template-transforms/vir-html/vir-html.d.ts +0 -3
  101. package/dist/esm/typed-event/typed-event.d.ts +0 -19
  102. package/dist/types/augments/array.d.ts +0 -1
  103. package/dist/types/augments/type.d.ts +0 -1
  104. package/dist/types/functional-element/define-functional-element.d.ts +0 -4
  105. package/dist/types/functional-element/directives/assign-with-clean-up.directive.d.ts +0 -19
  106. package/dist/types/functional-element/directives/directive-util.d.ts +0 -15
  107. package/dist/types/functional-element/directives/listen.directive.d.ts +0 -13
  108. package/dist/types/functional-element/directives/on-dom-created.directive.d.ts +0 -11
  109. package/dist/types/functional-element/directives/on-resize.directive.d.ts +0 -15
  110. package/dist/types/functional-element/element-events.d.ts +0 -10
  111. package/dist/types/functional-element/element-properties.d.ts +0 -16
  112. package/dist/types/functional-element/functional-element.d.ts +0 -42
  113. package/dist/types/index.d.ts +0 -15
  114. package/dist/types/require-functional-element.d.ts +0 -2
  115. package/dist/types/template-transforms/has-static-tag-name.d.ts +0 -4
  116. package/dist/types/template-transforms/transform-template.d.ts +0 -16
  117. package/dist/types/template-transforms/vir-css/css-transform.d.ts +0 -7
  118. package/dist/types/template-transforms/vir-css/vir-css.d.ts +0 -3
  119. package/dist/types/template-transforms/vir-html/html-transform.d.ts +0 -3
  120. package/dist/types/template-transforms/vir-html/vir-html.d.ts +0 -3
  121. package/dist/types/typed-event/typed-event.d.ts +0 -19
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defineFunctionalElement = void 0;
4
- const lit_1 = require("lit");
5
- const decorators_js_1 = require("lit/decorators.js");
6
- const element_events_1 = require("./element-events");
7
- const element_properties_1 = require("./element-properties");
8
- const functional_element_1 = require("./functional-element");
9
- const render_callback_1 = require("./render-callback");
10
- function defineFunctionalElement(functionalElementInit) {
11
- var _a;
12
- const eventsMap = (0, element_events_1.createEventDescriptorMap)(functionalElementInit.events);
13
- const anonymousClass = (_a = class extends functional_element_1.FunctionalElementBaseClass {
14
- constructor() {
15
- super();
16
- this.initCalled = false;
17
- this.instanceProps = (0, element_properties_1.createPropertyProxy)(functionalElementInit.props, this);
18
- const initProps = functionalElementInit.props || {};
19
- Object.keys(initProps).forEach((propName) => {
20
- const functionalElementInstance = this;
21
- (0, decorators_js_1.property)()(functionalElementInstance, propName);
22
- functionalElementInstance[propName] = initProps[propName];
23
- });
24
- }
25
- createRenderParams() {
26
- return (0, render_callback_1.createRenderParams)(this, eventsMap);
27
- }
28
- render() {
29
- const renderParams = this.createRenderParams();
30
- if (!this.initCalled && functionalElementInit.initCallback) {
31
- this.initCalled = true;
32
- functionalElementInit.initCallback(renderParams);
33
- }
34
- return functionalElementInit.renderCallback(renderParams);
35
- }
36
- },
37
- _a.tagName = functionalElementInit.tagName,
38
- _a.styles = functionalElementInit.styles || (0, lit_1.css) ``,
39
- _a.initInput = functionalElementInit,
40
- _a.events = eventsMap,
41
- _a.renderCallback = functionalElementInit.renderCallback,
42
- _a.props = (0, element_properties_1.createPropertyDescriptorMap)(functionalElementInit.props),
43
- _a);
44
- window.customElements.define(functionalElementInit.tagName, anonymousClass);
45
- return anonymousClass;
46
- }
47
- exports.defineFunctionalElement = defineFunctionalElement;
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assignWithCleanup = void 0;
4
- const lit_1 = require("lit");
5
- const async_directive_js_1 = require("lit/async-directive.js");
6
- const directive_js_1 = require("lit/directive.js");
7
- const directive_util_1 = require("./directive-util");
8
- /**
9
- * The directive generics (in listenDirective) are not strong enough to maintain their values. Thus,
10
- * the directive call is wrapped in this function.
11
- */
12
- function assignWithCleanup(propertyDescriptor, value, cleanupCallback) {
13
- return assignWithCleanupDirective(propertyDescriptor.propName, value, cleanupCallback);
14
- }
15
- exports.assignWithCleanup = assignWithCleanup;
16
- class AssignWithCleanupDirectiveClass extends async_directive_js_1.AsyncDirective {
17
- constructor(partInfo) {
18
- super(partInfo);
19
- this.element = (0, directive_util_1.extractFunctionalElement)(partInfo, 'assign');
20
- }
21
- disconnected() {
22
- if (this.lastValue != undefined && this.lastCallback != undefined) {
23
- this.lastCallback(this.lastValue);
24
- }
25
- }
26
- render(propName, value, cleanupCallback, equalityCheck = (a, b) => a === b) {
27
- if (!(propName in this.element.instanceProps)) {
28
- throw new Error(`${this.element.tagName} element has no property of name "${propName}"`);
29
- }
30
- // reference equality check!
31
- if (!equalityCheck(this.lastValue, value)) {
32
- cleanupCallback(this.lastValue);
33
- }
34
- this.element.instanceProps[propName] = value;
35
- this.lastValue = value;
36
- this.lastCallback = cleanupCallback;
37
- return lit_1.noChange;
38
- }
39
- }
40
- const assignWithCleanupDirective = (0, directive_js_1.directive)(AssignWithCleanupDirectiveClass);
@@ -1,15 +0,0 @@
1
- import { PartInfo } from 'lit/directive.js';
2
- import { PropertyInitMapBase, StaticElementPropertyDescriptor } from '../element-properties';
3
- import { FunctionalElementInstance } from '../functional-element';
4
- /**
5
- * The directive generics (in listenDirective) are not strong enough to maintain their values. Thus,
6
- * the directive call is wrapped in this function.
7
- */
8
- export declare function assign<PropName extends string, PropValue>(propertyDescriptor: StaticElementPropertyDescriptor<PropName, PropValue>, value: typeof propertyDescriptor['initValue']): import("lit-html/directive").DirectiveResult<{
9
- new (partInfo: PartInfo): {
10
- readonly element: FunctionalElementInstance<PropertyInitMapBase>;
11
- render(propName: string, value: unknown): symbol;
12
- readonly _$isConnected: boolean;
13
- update(_part: import("lit-html").Part, props: unknown[]): unknown;
14
- };
15
- }>;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assign = void 0;
4
- const lit_1 = require("lit");
5
- const directive_js_1 = require("lit/directive.js");
6
- const directive_util_1 = require("./directive-util");
7
- /**
8
- * The directive generics (in listenDirective) are not strong enough to maintain their values. Thus,
9
- * the directive call is wrapped in this function.
10
- */
11
- function assign(propertyDescriptor, value) {
12
- return assignDirective(propertyDescriptor.propName, value);
13
- }
14
- exports.assign = assign;
15
- const assignDirective = (0, directive_js_1.directive)(class extends directive_js_1.Directive {
16
- constructor(partInfo) {
17
- super(partInfo);
18
- this.element = (0, directive_util_1.extractFunctionalElement)(partInfo, 'assign');
19
- }
20
- render(propName, value) {
21
- if (!(propName in this.element.instanceProps)) {
22
- throw new Error(`${this.element.tagName} element has no property of name "${propName}"`);
23
- }
24
- this.element.instanceProps[propName] = value;
25
- return lit_1.noChange;
26
- }
27
- });
@@ -1,15 +0,0 @@
1
- import { ElementPartInfo, PartInfo } from 'lit/directive.js';
2
- import { PropertyInitMapBase } from '../element-properties';
3
- import { FunctionalElementInstance } from '../functional-element';
4
- /** For some reason these aren't defined in lit's types already. */
5
- export declare type ExtraPartInfoProperties = {
6
- element: Element;
7
- options: {
8
- host: Element;
9
- renderBefore: Element;
10
- isConnected: boolean;
11
- };
12
- };
13
- export declare function extractFunctionalElement<PropertyInitGeneric extends PropertyInitMapBase>(partInfo: PartInfo, directiveName: string): FunctionalElementInstance<PropertyInitGeneric>;
14
- export declare function extractElement<ElementType = HTMLElement>(partInfo: PartInfo, directiveName: string, constructorClass: (new () => ElementType) | (abstract new () => ElementType)): ElementType;
15
- export declare function assertsIsElementPartInfo(partInfo: PartInfo, directiveName: string): asserts partInfo is ElementPartInfo & ExtraPartInfoProperties;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assertsIsElementPartInfo = exports.extractElement = exports.extractFunctionalElement = void 0;
4
- const directive_js_1 = require("lit/directive.js");
5
- const functional_element_1 = require("../functional-element");
6
- function extractFunctionalElement(partInfo, directiveName) {
7
- return extractElement(partInfo, directiveName, functional_element_1.FunctionalElementBaseClass);
8
- }
9
- exports.extractFunctionalElement = extractFunctionalElement;
10
- function extractElement(partInfo, directiveName, constructorClass) {
11
- assertsIsElementPartInfo(partInfo, directiveName);
12
- const element = partInfo.element;
13
- if (!(element instanceof constructorClass)) {
14
- throw new Error(`${directiveName} attached to non ${constructorClass.name} element.`);
15
- }
16
- return element;
17
- }
18
- exports.extractElement = extractElement;
19
- function assertsIsElementPartInfo(partInfo, directiveName) {
20
- if (partInfo.type !== directive_js_1.PartType.ELEMENT) {
21
- throw new Error(`${directiveName} directive can only be attached directly to an element.`);
22
- }
23
- if (!partInfo.element) {
24
- throw new Error(`${directiveName} directive found no element`);
25
- }
26
- }
27
- exports.assertsIsElementPartInfo = assertsIsElementPartInfo;
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.listen = void 0;
4
- const lit_1 = require("lit");
5
- const directive_js_1 = require("lit/directive.js");
6
- const directive_util_1 = require("./directive-util");
7
- function listen(eventType, listener) {
8
- return listenDirective(eventType, listener);
9
- }
10
- exports.listen = listen;
11
- /**
12
- * The directive generics here are not strong enough to maintain their values. Thus, the directive
13
- * call is wrapped in the function above.
14
- */
15
- const listenDirective = (0, directive_js_1.directive)(class extends directive_js_1.Directive {
16
- constructor(partInfo) {
17
- super(partInfo);
18
- this.element = (0, directive_util_1.extractElement)(partInfo, 'listen', HTMLElement);
19
- }
20
- resetListener(listenerMetaData) {
21
- if (this.lastListenerMetaData) {
22
- this.element.removeEventListener(this.lastListenerMetaData.eventType, this.lastListenerMetaData.listener);
23
- }
24
- this.element.addEventListener(listenerMetaData.eventType, listenerMetaData.listener);
25
- this.lastListenerMetaData = listenerMetaData;
26
- }
27
- createListenerMetaData(eventType, callback) {
28
- return {
29
- eventType,
30
- callback,
31
- listener: (event) => { var _a; return (_a = this.lastListenerMetaData) === null || _a === void 0 ? void 0 : _a.callback(event); },
32
- };
33
- }
34
- render(eventTypeInput, callback) {
35
- const eventType = typeof eventTypeInput === 'string' ? eventTypeInput : eventTypeInput.type;
36
- if (typeof eventType !== 'string') {
37
- throw new Error(`Cannot listen to an event with a name that is not a string. Given event name: "${eventType}"`);
38
- }
39
- if (this.lastListenerMetaData && this.lastListenerMetaData.eventType === eventType) {
40
- /**
41
- * Store the callback here so we don't have to update the attached listener every
42
- * time the callback is updated.
43
- */
44
- this.lastListenerMetaData.callback = callback;
45
- }
46
- else {
47
- this.resetListener(this.createListenerMetaData(eventType, callback));
48
- }
49
- return lit_1.noChange;
50
- }
51
- });
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.onDomCreated = void 0;
4
- const directive_js_1 = require("lit/directive.js");
5
- const directive_util_1 = require("./directive-util");
6
- const directiveName = 'onDomCreated';
7
- /** Only fires once, when the element has been created. */
8
- exports.onDomCreated = (0, directive_js_1.directive)(class extends directive_js_1.Directive {
9
- constructor(partInfo) {
10
- super(partInfo);
11
- (0, directive_util_1.assertsIsElementPartInfo)(partInfo, directiveName);
12
- }
13
- update(partInfo, [callback]) {
14
- (0, directive_util_1.assertsIsElementPartInfo)(partInfo, directiveName);
15
- const newElement = partInfo.element;
16
- if (newElement !== this.element) {
17
- // use requestAnimationFrame here so it can fire property changes outside of a render loop
18
- requestAnimationFrame(() => callback(newElement));
19
- this.element = newElement;
20
- }
21
- return this.render(callback);
22
- }
23
- render(callback) {
24
- return undefined;
25
- }
26
- });
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.onResize = void 0;
4
- const directive_js_1 = require("lit/directive.js");
5
- const directive_util_1 = require("./directive-util");
6
- const directiveName = 'onResize';
7
- exports.onResize = (0, directive_js_1.directive)(class extends directive_js_1.Directive {
8
- constructor(partInfo) {
9
- super(partInfo);
10
- this.resizeObserver = new ResizeObserver((entries) => this.fireCallback(entries));
11
- (0, directive_util_1.assertsIsElementPartInfo)(partInfo, directiveName);
12
- }
13
- fireCallback(entries) {
14
- var _a;
15
- const resizeEntry = entries[0];
16
- if (!resizeEntry) {
17
- console.error(entries);
18
- throw new Error(`${directiveName} observation triggered but the first entry was empty.`);
19
- }
20
- (_a = this.callback) === null || _a === void 0 ? void 0 : _a.call(this, { target: resizeEntry.target, contentRect: resizeEntry.contentRect });
21
- }
22
- update(partInfo, [callback]) {
23
- (0, directive_util_1.assertsIsElementPartInfo)(partInfo, directiveName);
24
- this.callback = callback;
25
- const newElement = partInfo.element;
26
- // if the element changes we need to observe the new one
27
- if (newElement !== this.element) {
28
- if (this.element) {
29
- this.resizeObserver.unobserve(this.element);
30
- }
31
- this.resizeObserver.observe(newElement);
32
- this.element = newElement;
33
- }
34
- return this.render(callback);
35
- }
36
- render(callback) {
37
- return undefined;
38
- }
39
- });
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createEventDescriptorMap = exports.defineElementEvent = void 0;
4
- const typed_event_1 = require("../typed-event/typed-event");
5
- function defineElementEvent() {
6
- return (0, typed_event_1.defineTypedEvent)();
7
- }
8
- exports.defineElementEvent = defineElementEvent;
9
- function createEventDescriptorMap(eventsInit) {
10
- if (!eventsInit) {
11
- return {};
12
- }
13
- return Object.keys(eventsInit)
14
- .filter((currentElementEventKey) => {
15
- if (typeof currentElementEventKey !== 'string') {
16
- throw new Error(`Expected event key of type string but got type "${typeof currentElementEventKey}" for key ${currentElementEventKey}`);
17
- }
18
- if (currentElementEventKey === '') {
19
- throw new Error(`Got empty string for events key.`);
20
- }
21
- return true;
22
- })
23
- .reduce((accum, currentElementEventKey) => {
24
- const eventObject = (0, typed_event_1.defineTypedEvent)()(currentElementEventKey);
25
- accum[currentElementEventKey] = eventObject;
26
- return accum;
27
- }, {});
28
- }
29
- exports.createEventDescriptorMap = createEventDescriptorMap;
@@ -1,16 +0,0 @@
1
- import { FunctionalElementInstance } from './functional-element';
2
- export declare type PropertyInitMapBase = Record<string, unknown>;
3
- export declare type ElementProperty<KeyGeneric extends string | number | symbol, ValueGeneric> = {
4
- name: KeyGeneric;
5
- setProp(value: ValueGeneric): void;
6
- getProp(): ValueGeneric;
7
- };
8
- export declare type StaticElementPropertyDescriptor<PropName extends string, PropValue> = {
9
- propName: PropName;
10
- initValue: PropValue;
11
- };
12
- export declare type ElementPropertyDescriptorMap<PropertyInitGeneric extends PropertyInitMapBase> = {
13
- [Property in keyof PropertyInitGeneric]: StaticElementPropertyDescriptor<string, PropertyInitGeneric[Property]>;
14
- };
15
- export declare function createPropertyProxy<PropertyInitGeneric extends PropertyInitMapBase>(propsInitMap: PropertyInitGeneric | undefined, element: FunctionalElementInstance<PropertyInitGeneric>): PropertyInitGeneric;
16
- export declare function createPropertyDescriptorMap<PropertyInitGeneric extends PropertyInitMapBase>(propertyInit: PropertyInitGeneric | undefined): ElementPropertyDescriptorMap<PropertyInitGeneric>;
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createPropertyDescriptorMap = exports.createPropertyProxy = void 0;
4
- function assertValidPropertyName(propertyName, propsInitMap, elementTagName) {
5
- if (typeof propertyName !== 'string') {
6
- throw new Error(`Property name must be a string, got type "${typeof propertyName}" from: "${String(propertyName)}" for ${elementTagName}`);
7
- }
8
- if (!(propertyName in propsInitMap)) {
9
- throw new Error(`Property name "${propertyName}" does not exist on ${elementTagName}.`);
10
- }
11
- }
12
- function createPropertyProxy(propsInitMap, element) {
13
- if (!propsInitMap) {
14
- return {};
15
- }
16
- const props = Object.keys(propsInitMap).reduce((accum, propertyName) => {
17
- accum[propertyName] = element[propertyName];
18
- return accum;
19
- }, {});
20
- const propsProxy = new Proxy(props, {
21
- get: (_target, propertyName) => {
22
- assertValidPropertyName(propertyName, propsInitMap, element.tagName);
23
- return element[propertyName];
24
- },
25
- set: (_target, propertyName, value) => {
26
- assertValidPropertyName(propertyName, propsInitMap, element.tagName);
27
- element[propertyName] = value;
28
- return true;
29
- },
30
- });
31
- return propsProxy;
32
- }
33
- exports.createPropertyProxy = createPropertyProxy;
34
- function createPropertyDescriptorMap(propertyInit) {
35
- if (!propertyInit) {
36
- return {};
37
- }
38
- return Object.keys(propertyInit)
39
- .filter((key) => {
40
- if (typeof key === 'string') {
41
- return true;
42
- }
43
- else {
44
- throw new Error(`Property init cannot have non string keys: "${key}"`);
45
- }
46
- })
47
- .reduce((accum, currentKey) => {
48
- accum[currentKey] = {
49
- propName: currentKey,
50
- initValue: propertyInit[currentKey],
51
- };
52
- return accum;
53
- }, {});
54
- }
55
- exports.createPropertyDescriptorMap = createPropertyDescriptorMap;
@@ -1,42 +0,0 @@
1
- import { CSSResult, LitElement, TemplateResult } from 'lit';
2
- import { EventDescriptorMap, EventsInitMap } from './element-events';
3
- import { ElementPropertyDescriptorMap, PropertyInitMapBase } from './element-properties';
4
- import { InitCallback, RenderCallback } from './render-callback';
5
- export declare type CustomElementTagName = `${string}-${string}`;
6
- export declare type FunctionalElementInit<PropertyInitGeneric extends PropertyInitMapBase, EventsInitGeneric extends EventsInitMap> = {
7
- /**
8
- * HTML tag name. This should not be used directly, as interpolating it with the html tagged
9
- * template from this package is preferred.
10
- */
11
- tagName: CustomElementTagName;
12
- /** Static styles. These should not and cannot change. */
13
- styles?: CSSResult | undefined;
14
- /** Initializer for element properties. (These can be thought of as "inputs".) */
15
- props?: PropertyInitGeneric | undefined;
16
- /** Initializer for events that the element can dispatch. (These can be thought of as "outputs".) */
17
- events?: EventsInitGeneric | undefined;
18
- /** Called as part of the first renderCallback call, before the first renderCallback call. */
19
- initCallback?: InitCallback<PropertyInitGeneric, EventsInitGeneric>;
20
- renderCallback: RenderCallback<PropertyInitGeneric, EventsInitGeneric>;
21
- };
22
- export declare abstract class FunctionalElementBaseClass<PropertyInitGeneric extends PropertyInitMapBase> extends LitElement {
23
- static readonly tagName: string;
24
- static readonly styles: CSSResult;
25
- abstract render(): TemplateResult | Promise<TemplateResult>;
26
- abstract readonly instanceProps: PropertyInitGeneric;
27
- }
28
- export declare type FunctionalElementInstance<PropertyInitGeneric extends PropertyInitMapBase = {}> = FunctionalElementBaseClass<PropertyInitGeneric> & PropertyInitGeneric;
29
- export declare type FunctionalElement<PropertyInitGeneric extends PropertyInitMapBase = any, EventsInitGeneric extends EventsInitMap = any> = (new () => FunctionalElementInstance<PropertyInitGeneric>) & ExtraStaticFunctionalElementProperties<PropertyInitGeneric, EventsInitGeneric>;
30
- export declare type ExtraStaticFunctionalElementProperties<PropertyInitGeneric extends PropertyInitMapBase, EventsInitGeneric extends EventsInitMap> = Readonly<{
31
- /** Pass through the render callback for direct unit testability */
32
- renderCallback: RenderCallback<PropertyInitGeneric, EventsInitGeneric>;
33
- events: EventDescriptorMap<EventsInitGeneric>;
34
- props: ElementPropertyDescriptorMap<PropertyInitGeneric>;
35
- initInput: FunctionalElementInit<PropertyInitGeneric, EventsInitGeneric>;
36
- /**
37
- * Static properties have to be copied here cause they get nuked in the "new () =>
38
- * FunctionalElementInstance<PropertyInitGeneric>" type.
39
- */
40
- tagName: string;
41
- styles: CSSResult;
42
- }>;
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FunctionalElementBaseClass = void 0;
4
- const lit_1 = require("lit");
5
- class FunctionalElementBaseClass extends lit_1.LitElement {
6
- }
7
- exports.FunctionalElementBaseClass = FunctionalElementBaseClass;
@@ -1,21 +0,0 @@
1
- import { TemplateResult } from 'lit';
2
- import { TypedEvent } from '../typed-event/typed-event';
3
- import { EventDescriptorMap, EventInitMapEventDetailExtractor, EventsInitMap } from './element-events';
4
- import { PropertyInitMapBase } from './element-properties';
5
- import { FunctionalElementInstance } from './functional-element';
6
- export declare type RenderCallback<PropertyInitGeneric extends PropertyInitMapBase, EventsInitGeneric extends EventsInitMap> = (params: RenderParams<PropertyInitGeneric, EventsInitGeneric>) => TemplateResult;
7
- export declare type InitCallback<PropertyInitGeneric extends PropertyInitMapBase, EventsInitGeneric extends EventsInitMap> = (params: RenderParams<PropertyInitGeneric, EventsInitGeneric>) => void;
8
- export declare type SetPropCallback<PropertyInitGeneric extends PropertyInitMapBase> = (props: Partial<PropertyInitGeneric>) => void;
9
- export declare type RenderParams<PropertyInitGeneric extends PropertyInitMapBase, EventsInitGeneric extends EventsInitMap> = {
10
- props: Readonly<PropertyInitGeneric>;
11
- setProps: SetPropCallback<PropertyInitGeneric>;
12
- events: EventDescriptorMap<EventsInitGeneric>;
13
- host: FunctionalElementInstance<PropertyInitGeneric>;
14
- dispatch: <EventTypeNameGeneric extends keyof EventsInitGeneric>(event: TypedEvent<EventTypeNameGeneric extends string ? EventTypeNameGeneric : never, EventInitMapEventDetailExtractor<EventTypeNameGeneric, EventsInitGeneric>>) => boolean;
15
- /**
16
- * Same as dispatchElementEvent but without the extra types. This allows you to emit any events,
17
- * even events from other custom elements.
18
- */
19
- genericDispatch: (event: Event) => boolean;
20
- };
21
- export declare function createRenderParams<PropertyInitGeneric extends PropertyInitMapBase, EventsInitGeneric extends EventsInitMap>(element: FunctionalElementInstance<PropertyInitGeneric>, eventsMap: EventDescriptorMap<EventsInitGeneric>): RenderParams<PropertyInitGeneric, EventsInitGeneric>;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRenderParams = void 0;
4
- const augment_vir_1 = require("augment-vir");
5
- function createRenderParams(element, eventsMap) {
6
- const renderParams = {
7
- /**
8
- * These two dispatch properties do the same thing but their interfaces are different.
9
- * DispatchEvent's type interface is much stricter.
10
- */
11
- dispatch: (event) => element.dispatchEvent(event),
12
- genericDispatch: (event) => element.dispatchEvent(event),
13
- setProps: (partialProps) => {
14
- (0, augment_vir_1.getObjectTypedKeys)(partialProps).forEach((propKey) => {
15
- element.instanceProps[propKey] = partialProps[propKey];
16
- });
17
- },
18
- host: element,
19
- props: element.instanceProps,
20
- events: eventsMap,
21
- };
22
- return renderParams;
23
- }
24
- exports.createRenderParams = createRenderParams;
package/dist/cjs/index.js DELETED
@@ -1,33 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.requireAllCustomElementsToBeFunctionalElement = void 0;
18
- __exportStar(require("./functional-element/define-functional-element"), exports);
19
- __exportStar(require("./functional-element/directives/assign-with-clean-up.directive"), exports);
20
- __exportStar(require("./functional-element/directives/assign.directive"), exports);
21
- __exportStar(require("./functional-element/directives/directive-util"), exports);
22
- __exportStar(require("./functional-element/directives/listen.directive"), exports);
23
- __exportStar(require("./functional-element/directives/on-dom-created.directive"), exports);
24
- __exportStar(require("./functional-element/directives/on-resize.directive"), exports);
25
- __exportStar(require("./functional-element/element-events"), exports);
26
- __exportStar(require("./functional-element/element-properties"), exports);
27
- __exportStar(require("./functional-element/functional-element"), exports);
28
- __exportStar(require("./functional-element/render-callback"), exports);
29
- var require_functional_element_1 = require("./require-functional-element");
30
- Object.defineProperty(exports, "requireAllCustomElementsToBeFunctionalElement", { enumerable: true, get: function () { return require_functional_element_1.requireAllCustomElementsToBeFunctionalElement; } });
31
- __exportStar(require("./template-transforms/vir-css/vir-css"), exports);
32
- __exportStar(require("./template-transforms/vir-html/vir-html"), exports);
33
- __exportStar(require("./typed-event/typed-event"), exports);
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.requireAllCustomElementsToBeFunctionalElement = exports.functionalElementRequired = void 0;
4
- exports.functionalElementRequired = false;
5
- function requireAllCustomElementsToBeFunctionalElement() {
6
- exports.functionalElementRequired = true;
7
- }
8
- exports.requireAllCustomElementsToBeFunctionalElement = requireAllCustomElementsToBeFunctionalElement;
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasStaticTagName = void 0;
4
- function hasStaticTagName(value) {
5
- return (typeof value === 'function' &&
6
- value.hasOwnProperty('tagName') &&
7
- typeof value.tagName === 'string' &&
8
- value.tagName.includes('-'));
9
- }
10
- exports.hasStaticTagName = hasStaticTagName;
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformTemplate = exports.getTransformedTemplate = exports.makeCheckTransform = void 0;
4
- const array_1 = require("../augments/array");
5
- function makeCheckTransform(name, check, transform) {
6
- return {
7
- name,
8
- check,
9
- transform,
10
- };
11
- }
12
- exports.makeCheckTransform = makeCheckTransform;
13
- /**
14
- * The transformed templates are written to a map so that we can preserve reference equality between
15
- * calls. Without maintaining reference equality between html`` calls, lit-element reconstructs all
16
- * of its children on every render.
17
- *
18
- * This is a WeakMap because we only care about the transformed array value as long as the original
19
- * template array key exists.
20
- */
21
- const transformedTemplateStrings = new WeakMap();
22
- function getTransformedTemplate(templateStringsKey, values, fallbackTransform) {
23
- const alreadyTransformedTemplateStrings = transformedTemplateStrings.get(templateStringsKey);
24
- const templateTransform = alreadyTransformedTemplateStrings !== null && alreadyTransformedTemplateStrings !== void 0 ? alreadyTransformedTemplateStrings : fallbackTransform();
25
- if (!alreadyTransformedTemplateStrings) {
26
- transformedTemplateStrings.set(templateStringsKey, templateTransform);
27
- }
28
- const transformedValuesArray = (0, array_1.filterOutArrayIndexes)(values, templateTransform.valueIndexDeletions);
29
- return { strings: templateTransform.templateStrings, values: transformedValuesArray };
30
- }
31
- exports.getTransformedTemplate = getTransformedTemplate;
32
- function transformTemplate(inputTemplateStrings, inputValues, checksAndTransforms, assertValidString) {
33
- const newStrings = [];
34
- const newRaws = [];
35
- const valueDeletions = [];
36
- inputTemplateStrings.forEach((currentTemplateString, index) => {
37
- var _a;
38
- const lastNewStringsIndex = newStrings.length - 1;
39
- const lastNewString = newStrings[lastNewStringsIndex];
40
- const currentValueIndex = index - 1;
41
- const currentValue = inputValues[currentValueIndex];
42
- let validTransform;
43
- assertValidString && assertValidString(currentTemplateString);
44
- if (typeof lastNewString === 'string') {
45
- validTransform = (_a = checksAndTransforms.find((checkAndTransform) => {
46
- return checkAndTransform.check(lastNewString, currentTemplateString, currentValue);
47
- })) === null || _a === void 0 ? void 0 : _a.transform;
48
- if (validTransform) {
49
- newStrings[lastNewStringsIndex] =
50
- lastNewString + validTransform(currentValue) + currentTemplateString;
51
- valueDeletions.push(currentValueIndex);
52
- }
53
- }
54
- if (!validTransform) {
55
- newStrings.push(currentTemplateString);
56
- }
57
- const currentRawLitString = inputTemplateStrings.raw[index];
58
- if (validTransform) {
59
- newRaws[lastNewStringsIndex] =
60
- newRaws[lastNewStringsIndex] + validTransform(currentValue) + currentRawLitString;
61
- }
62
- else {
63
- newRaws.push(currentRawLitString);
64
- }
65
- });
66
- const newTemplateStrings = Object.assign([], newStrings, {
67
- raw: newRaws,
68
- });
69
- return {
70
- templateStrings: newTemplateStrings,
71
- valueIndexDeletions: valueDeletions,
72
- };
73
- }
74
- exports.transformTemplate = transformTemplate;
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformCssTemplate = void 0;
4
- const has_static_tag_name_1 = require("../has-static-tag-name");
5
- const transform_template_1 = require("../transform-template");
6
- const cssChecksAndTransforms = [
7
- (0, transform_template_1.makeCheckTransform)('tag name css selector interpolation', (lastNewString, currentLitString, currentValue) => {
8
- return (0, has_static_tag_name_1.hasStaticTagName)(currentValue);
9
- }, (input) =>
10
- // cast is safe because the check method above verifies that this value is a VirElement
11
- input.tagName),
12
- ];
13
- function transformCssTemplate(inputTemplateStrings, inputValues) {
14
- return (0, transform_template_1.transformTemplate)(inputTemplateStrings, inputValues, cssChecksAndTransforms);
15
- }
16
- exports.transformCssTemplate = transformCssTemplate;