@oscarpalmer/abydon 0.15.0 → 0.17.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.
- package/dist/abydon.full.mjs +1443 -0
- package/dist/constants.d.mts +20 -0
- package/dist/constants.mjs +27 -0
- package/dist/fragment-9qTBAvtR.d.mts +82 -0
- package/dist/fragment.d.mts +2 -0
- package/dist/{fragment.js → fragment.mjs} +41 -14
- package/dist/fragments.d.mts +16 -0
- package/dist/{fragments.js → fragments.mjs} +10 -4
- package/dist/helpers/dom.d.mts +6 -0
- package/dist/helpers/{dom.js → dom.mjs} +4 -12
- package/dist/helpers/index.d.mts +9 -0
- package/dist/helpers/index.mjs +23 -0
- package/dist/index.d.mts +21 -0
- package/dist/index.mjs +24 -0
- package/dist/models.d.mts +2 -0
- package/dist/models.mjs +1 -0
- package/dist/node/attribute/index.d.mts +6 -0
- package/dist/node/attribute/index.mjs +41 -0
- package/dist/node/attribute/value.d.mts +6 -0
- package/dist/node/attribute/value.mjs +65 -0
- package/dist/node/event.d.mts +4 -0
- package/dist/node/event.mjs +25 -0
- package/dist/node/index.d.mts +6 -0
- package/dist/node/{index.js → index.mjs} +10 -8
- package/dist/node/value.d.mts +7 -0
- package/dist/node/{value.js → value.mjs} +12 -10
- package/dist/parse.d.mts +6 -0
- package/dist/{parse.js → parse.mjs} +11 -1
- package/package.json +42 -42
- package/src/constants.ts +30 -10
- package/src/fragment.ts +12 -24
- package/src/fragments.ts +3 -5
- package/src/helpers/dom.ts +1 -20
- package/src/helpers/index.ts +18 -15
- package/src/index.ts +14 -10
- package/src/models.ts +10 -1
- package/src/node/attribute/index.ts +22 -21
- package/src/node/attribute/value.ts +47 -37
- package/src/node/event.ts +26 -33
- package/src/node/index.ts +6 -18
- package/src/node/value.ts +15 -46
- package/src/parse.ts +15 -17
- package/dist/abydon.full.js +0 -1274
- package/dist/constants.js +0 -10
- package/dist/helpers/index.js +0 -14
- package/dist/index.js +0 -11
- package/dist/models.js +0 -0
- package/dist/node/attribute/index.js +0 -39
- package/dist/node/attribute/value.js +0 -56
- package/dist/node/event.js +0 -30
- package/types/constants.d.ts +0 -9
- package/types/fragment.d.ts +0 -38
- package/types/fragments.d.ts +0 -13
- package/types/helpers/dom.d.ts +0 -3
- package/types/helpers/index.d.ts +0 -5
- package/types/index.d.ts +0 -9
- package/types/models.d.ts +0 -32
- package/types/node/attribute/index.d.ts +0 -3
- package/types/node/attribute/value.d.ts +0 -3
- package/types/node/event.d.ts +0 -3
- package/types/node/index.d.ts +0 -2
- package/types/node/value.d.ts +0 -3
- package/types/parse.d.ts +0 -2
package/dist/constants.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
const ABORT_CONTROLLERS = /* @__PURE__ */ new WeakMap();
|
|
2
|
-
const ATTRIBUTE_CLASS_PREFIX_LENGTH = 6;
|
|
3
|
-
const EXPRESSION_ATTRIBUTE_CLASS = /^class\./;
|
|
4
|
-
const EXPRESSION_ATTRIBUTE_STYLE_FULL = /^style\.([\w-]+)(?:\.([\w-]+))?$/;
|
|
5
|
-
const EXPRESSION_ATTRIBUTE_STYLE_PREFIX = /^style\./;
|
|
6
|
-
const EXPRESSION_COMMENT_FULL = /^<!--abydon\.(\d+)-->$/;
|
|
7
|
-
const EXPRESSION_COMMENT_CONTENT = /^abydon\.(\d+)$/;
|
|
8
|
-
const EXPRESSION_EVENT_NAME = /^@([\w-]+)(?::([a-z:]+))?$/i;
|
|
9
|
-
const REASON_EVENT_REMOVED = "Event removed as element was removed from document by Abydon";
|
|
10
|
-
export { ABORT_CONTROLLERS, ATTRIBUTE_CLASS_PREFIX_LENGTH, EXPRESSION_ATTRIBUTE_CLASS, EXPRESSION_ATTRIBUTE_STYLE_FULL, EXPRESSION_ATTRIBUTE_STYLE_PREFIX, EXPRESSION_COMMENT_CONTENT, EXPRESSION_COMMENT_FULL, EXPRESSION_EVENT_NAME, REASON_EVENT_REMOVED };
|
package/dist/helpers/index.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
function compareArrays(first, second) {
|
|
2
|
-
const firstIsLarger = first.length > second.length;
|
|
3
|
-
const from = firstIsLarger ? first : second;
|
|
4
|
-
const to = firstIsLarger ? second : first;
|
|
5
|
-
if (!from.filter((key) => to.includes(key)).every((key, index) => to[index] === key)) return "dissimilar";
|
|
6
|
-
return firstIsLarger ? "removed" : "added";
|
|
7
|
-
}
|
|
8
|
-
function isFragment(value) {
|
|
9
|
-
return typeof value === "object" && value != null && "$fragment" in value && value.$fragment === true;
|
|
10
|
-
}
|
|
11
|
-
function isFragments(value) {
|
|
12
|
-
return typeof value === "object" && value != null && "$fragments" in value && value.$fragments === true;
|
|
13
|
-
}
|
|
14
|
-
export { compareArrays, isFragment, isFragments };
|
package/dist/index.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Fragments } from "./fragments.js";
|
|
2
|
-
import { Fragment } from "./fragment.js";
|
|
3
|
-
import "@oscarpalmer/mora";
|
|
4
|
-
export * from "@oscarpalmer/mora";
|
|
5
|
-
function fragments(array$1, identify, fragment) {
|
|
6
|
-
return new Fragments(array$1, identify, fragment);
|
|
7
|
-
}
|
|
8
|
-
function html(strings, ...values) {
|
|
9
|
-
return new Fragment(strings, values);
|
|
10
|
-
}
|
|
11
|
-
export { fragments, html };
|
package/dist/models.js
DELETED
|
File without changes
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { EXPRESSION_COMMENT_FULL } from "../../constants.js";
|
|
2
|
-
import { mapEvent } from "../event.js";
|
|
3
|
-
import { setAttribute as setAttribute$1 } from "./value.js";
|
|
4
|
-
import { computed, isReactive } from "@oscarpalmer/mora";
|
|
5
|
-
import { isBooleanAttribute, setProperty } from "@oscarpalmer/toretto/attribute";
|
|
6
|
-
function getValue(data, original) {
|
|
7
|
-
const matches = EXPRESSION_COMMENT_FULL.exec(original ?? "");
|
|
8
|
-
return matches == null ? original : data.values[+matches[1]];
|
|
9
|
-
}
|
|
10
|
-
function mapAttributes(data, element) {
|
|
11
|
-
const attributes = [...element.attributes];
|
|
12
|
-
const { length } = attributes;
|
|
13
|
-
for (let index = 0; index < length; index += 1) {
|
|
14
|
-
const { name, value } = attributes[index];
|
|
15
|
-
const actual = getValue(data, value);
|
|
16
|
-
switch (true) {
|
|
17
|
-
case name.startsWith("@"):
|
|
18
|
-
mapEvent(element, name, actual);
|
|
19
|
-
break;
|
|
20
|
-
case name.includes(".") || typeof actual === "function" || isReactive(actual):
|
|
21
|
-
mapValue(data, element, name, actual);
|
|
22
|
-
break;
|
|
23
|
-
case isBooleanAttribute(name):
|
|
24
|
-
setProperty(element, name, value);
|
|
25
|
-
break;
|
|
26
|
-
default: break;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function mapValue(data, element, name, value) {
|
|
31
|
-
if (typeof value === "function") setComputedAttribute(data, element, name, value);
|
|
32
|
-
else setAttribute$1(data, element, name, value);
|
|
33
|
-
}
|
|
34
|
-
function setComputedAttribute(data, element, name, callback) {
|
|
35
|
-
const value = computed(callback);
|
|
36
|
-
data.mora.values.add(value);
|
|
37
|
-
setAttribute$1(data, element, name, value);
|
|
38
|
-
}
|
|
39
|
-
export { mapAttributes };
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { ATTRIBUTE_CLASS_PREFIX_LENGTH, EXPRESSION_ATTRIBUTE_CLASS, EXPRESSION_ATTRIBUTE_STYLE_FULL, EXPRESSION_ATTRIBUTE_STYLE_PREFIX } from "../../constants.js";
|
|
2
|
-
import { isReactive } from "@oscarpalmer/mora";
|
|
3
|
-
import { getString } from "@oscarpalmer/atoms/string";
|
|
4
|
-
import { isBooleanAttribute, setAttribute as setAttribute$1 } from "@oscarpalmer/toretto/attribute";
|
|
5
|
-
function setAttribute(data, element, name, value) {
|
|
6
|
-
element.removeAttribute(name);
|
|
7
|
-
switch (true) {
|
|
8
|
-
case EXPRESSION_ATTRIBUTE_CLASS.test(name):
|
|
9
|
-
setClasses(data, element, name, value);
|
|
10
|
-
return;
|
|
11
|
-
case EXPRESSION_ATTRIBUTE_STYLE_PREFIX.test(name):
|
|
12
|
-
setStyle(data, element, name, value);
|
|
13
|
-
return;
|
|
14
|
-
default:
|
|
15
|
-
setValue(data, element, name, value);
|
|
16
|
-
break;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
function setClasses(data, element, name, value) {
|
|
20
|
-
function update(value$1) {
|
|
21
|
-
if (value$1 === true) element.classList.add(...classes);
|
|
22
|
-
else element.classList.remove(...classes);
|
|
23
|
-
}
|
|
24
|
-
const classes = name.slice(6).split(".");
|
|
25
|
-
if (isReactive(value)) data.mora.subscribers.add(value.subscribe(update));
|
|
26
|
-
else update(value);
|
|
27
|
-
}
|
|
28
|
-
function setStyle(data, element, name, value) {
|
|
29
|
-
const [, property, unit] = EXPRESSION_ATTRIBUTE_STYLE_FULL.exec(name) ?? [];
|
|
30
|
-
if (property == null) return;
|
|
31
|
-
function update(value$1) {
|
|
32
|
-
if (value$1 == null || value$1 === false || value$1 === true && unit == null) element.style.removeProperty(property);
|
|
33
|
-
else element.style.setProperty(property, value$1 === true ? unit : getString(value$1));
|
|
34
|
-
}
|
|
35
|
-
if (isReactive(value)) data.mora.subscribers.add(value.subscribe(update));
|
|
36
|
-
else update(value);
|
|
37
|
-
}
|
|
38
|
-
function setValue(data, element, name, value) {
|
|
39
|
-
let callback;
|
|
40
|
-
if (isBooleanAttribute(name) && name in element) callback = name === "selected" ? updateSelected : updateProperty;
|
|
41
|
-
else callback = setAttribute$1;
|
|
42
|
-
if (isReactive(value)) data.mora.subscribers.add(value.subscribe((next) => {
|
|
43
|
-
callback(element, name, next);
|
|
44
|
-
}));
|
|
45
|
-
else callback(element, name, value);
|
|
46
|
-
}
|
|
47
|
-
function updateProperty(element, name, value) {
|
|
48
|
-
element[name] = value === true;
|
|
49
|
-
}
|
|
50
|
-
function updateSelected(element, name, value) {
|
|
51
|
-
const select = element.closest("select");
|
|
52
|
-
const options = [...select?.options ?? []];
|
|
53
|
-
if (select != null && options.includes(element)) select.dispatchEvent(new Event("change", { bubbles: true }));
|
|
54
|
-
updateProperty(element, name, value);
|
|
55
|
-
}
|
|
56
|
-
export { setAttribute };
|
package/dist/node/event.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { ABORT_CONTROLLERS, EXPRESSION_EVENT_NAME, REASON_EVENT_REMOVED } from "../constants.js";
|
|
2
|
-
function getController(element) {
|
|
3
|
-
let controller = ABORT_CONTROLLERS.get(element);
|
|
4
|
-
if (controller == null) {
|
|
5
|
-
controller = new AbortController();
|
|
6
|
-
ABORT_CONTROLLERS.set(element, controller);
|
|
7
|
-
}
|
|
8
|
-
return controller;
|
|
9
|
-
}
|
|
10
|
-
function getOptions(options) {
|
|
11
|
-
const parts = options.split(":");
|
|
12
|
-
return {
|
|
13
|
-
capture: parts.includes("c") || parts.includes("capture"),
|
|
14
|
-
once: parts.includes("o") || parts.includes("once"),
|
|
15
|
-
passive: !(parts.includes("a") || parts.includes("active"))
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
function mapEvent(element, name, value) {
|
|
19
|
-
element.removeAttribute(name);
|
|
20
|
-
const [, type, options] = EXPRESSION_EVENT_NAME.exec(name) ?? [];
|
|
21
|
-
if (typeof value === "function" && type != null) element.addEventListener(type, value, {
|
|
22
|
-
...getOptions(options ?? ""),
|
|
23
|
-
signal: getController(element).signal
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
function removeEvents(element) {
|
|
27
|
-
ABORT_CONTROLLERS.get(element)?.abort(REASON_EVENT_REMOVED);
|
|
28
|
-
ABORT_CONTROLLERS.delete(element);
|
|
29
|
-
}
|
|
30
|
-
export { mapEvent, removeEvents };
|
package/types/constants.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare const ABORT_CONTROLLERS: WeakMap<HTMLOrSVGElement, AbortController>;
|
|
2
|
-
export declare const ATTRIBUTE_CLASS_PREFIX_LENGTH = 6;
|
|
3
|
-
export declare const EXPRESSION_ATTRIBUTE_CLASS: RegExp;
|
|
4
|
-
export declare const EXPRESSION_ATTRIBUTE_STYLE_FULL: RegExp;
|
|
5
|
-
export declare const EXPRESSION_ATTRIBUTE_STYLE_PREFIX: RegExp;
|
|
6
|
-
export declare const EXPRESSION_COMMENT_FULL: RegExp;
|
|
7
|
-
export declare const EXPRESSION_COMMENT_CONTENT: RegExp;
|
|
8
|
-
export declare const EXPRESSION_EVENT_NAME: RegExp;
|
|
9
|
-
export declare const REASON_EVENT_REMOVED = "Event removed as element was removed from document by Abydon";
|
package/types/fragment.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { FragmentConfiguration } from './models';
|
|
2
|
-
export declare class Fragment {
|
|
3
|
-
#private;
|
|
4
|
-
/**
|
|
5
|
-
* Fragment identifier
|
|
6
|
-
*/
|
|
7
|
-
get identifier(): unknown;
|
|
8
|
-
constructor(strings: TemplateStringsArray, expressions: unknown[]);
|
|
9
|
-
/**
|
|
10
|
-
* Append the fragment to the given element
|
|
11
|
-
* @param element Element to append to
|
|
12
|
-
*/
|
|
13
|
-
appendTo(element: Element): void;
|
|
14
|
-
/**
|
|
15
|
-
* Configure the fragment
|
|
16
|
-
* @param configuration Configuration options
|
|
17
|
-
* @returns Fragment
|
|
18
|
-
*/
|
|
19
|
-
configure(configuration: FragmentConfiguration): Fragment;
|
|
20
|
-
/**
|
|
21
|
-
* Get a list of the fragment's nodes
|
|
22
|
-
* @returns List of nodes
|
|
23
|
-
*/
|
|
24
|
-
get(): ChildNode[];
|
|
25
|
-
/**
|
|
26
|
-
* Set an identifier for the fragment
|
|
27
|
-
*
|
|
28
|
-
* _An identifier can be used to uniquely identify a fragment,
|
|
29
|
-
* which helps prevent re-rendering in certain scenarios._
|
|
30
|
-
* @param identifier Identifier
|
|
31
|
-
* @returns Fragment
|
|
32
|
-
*/
|
|
33
|
-
identify(identifier: unknown): Fragment;
|
|
34
|
-
/**
|
|
35
|
-
* Remove the fragment from the DOM
|
|
36
|
-
*/
|
|
37
|
-
remove(): void;
|
|
38
|
-
}
|
package/types/fragments.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { type ReactiveArray } from '@oscarpalmer/mora';
|
|
2
|
-
import type { Fragment } from './fragment';
|
|
3
|
-
import type { FragmentsState } from './models';
|
|
4
|
-
export declare class Fragments {
|
|
5
|
-
#private;
|
|
6
|
-
/**
|
|
7
|
-
* Fragment items
|
|
8
|
-
*/
|
|
9
|
-
get items(): ReactiveArray<Fragment>;
|
|
10
|
-
constructor(items: ReactiveArray<unknown>, identify: (item: unknown) => unknown, fragment: (item: unknown) => Fragment);
|
|
11
|
-
}
|
|
12
|
-
export declare function handleFragments(item: Fragments | FragmentsState, remove: boolean): void;
|
|
13
|
-
export declare function initializeFragments(state: FragmentsState): void;
|
package/types/helpers/dom.d.ts
DELETED
package/types/helpers/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { Fragment } from '../fragment';
|
|
2
|
-
import type { Fragments } from '../fragments';
|
|
3
|
-
export declare function compareArrays(first: unknown[], second: unknown[]): 'added' | 'dissimilar' | 'removed';
|
|
4
|
-
export declare function isFragment(value: unknown): value is Fragment;
|
|
5
|
-
export declare function isFragments(value: unknown): value is Fragments;
|
package/types/index.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import '@oscarpalmer/mora';
|
|
2
|
-
import type { ReactiveArray } from '@oscarpalmer/mora';
|
|
3
|
-
import { Fragment } from './fragment';
|
|
4
|
-
import { Fragments } from './fragments';
|
|
5
|
-
export declare function fragments<Item>(array: ReactiveArray<Item>, identify: (item: Item) => unknown, fragment: (item: Item) => Fragment): Fragments;
|
|
6
|
-
export declare function html(strings: TemplateStringsArray, ...values: unknown[]): unknown;
|
|
7
|
-
export * from '@oscarpalmer/mora';
|
|
8
|
-
export type { Fragment } from './fragment';
|
|
9
|
-
export type { Fragments } from './fragments';
|
package/types/models.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { Reactive, ReactiveArray, Unsubscribe } from '@oscarpalmer/mora';
|
|
2
|
-
import type { Fragment } from './fragment';
|
|
3
|
-
export type FragmentConfiguration = {
|
|
4
|
-
identifier?: unknown;
|
|
5
|
-
ignoreCache?: boolean;
|
|
6
|
-
};
|
|
7
|
-
export type FragmentData = {
|
|
8
|
-
expressions: unknown[];
|
|
9
|
-
items: FragmentItem[];
|
|
10
|
-
mora: MoraData;
|
|
11
|
-
strings: TemplateStringsArray;
|
|
12
|
-
template?: string;
|
|
13
|
-
values: unknown[];
|
|
14
|
-
};
|
|
15
|
-
export type FragmentItem = {
|
|
16
|
-
fragments?: Fragment[];
|
|
17
|
-
nodes?: ChildNode[];
|
|
18
|
-
text?: Text;
|
|
19
|
-
};
|
|
20
|
-
export type FragmentsState = {
|
|
21
|
-
array: ReactiveArray<unknown>;
|
|
22
|
-
fragment: (item: unknown) => Fragment;
|
|
23
|
-
identify: (item: unknown) => unknown;
|
|
24
|
-
instances: Record<string, Fragment>;
|
|
25
|
-
mapped: ReactiveArray<Fragment>;
|
|
26
|
-
subscriber: Unsubscribe | undefined;
|
|
27
|
-
};
|
|
28
|
-
type MoraData = {
|
|
29
|
-
subscribers: Set<() => void>;
|
|
30
|
-
values: Set<Reactive<unknown>>;
|
|
31
|
-
};
|
|
32
|
-
export {};
|
package/types/node/event.d.ts
DELETED
package/types/node/index.d.ts
DELETED
package/types/node/value.d.ts
DELETED
package/types/parse.d.ts
DELETED