@oscarpalmer/abydon 0.21.0 → 0.23.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 (42) hide show
  1. package/README.md +2 -0
  2. package/dist/abydon.full.mjs +422 -359
  3. package/dist/attribute/index.d.mts +7 -0
  4. package/dist/attribute/index.mjs +47 -0
  5. package/dist/{node/attribute → attribute}/value.d.mts +2 -2
  6. package/dist/attribute/value.mjs +53 -0
  7. package/dist/constants.d.mts +8 -8
  8. package/dist/constants.mjs +15 -15
  9. package/dist/fragment.d.mts +30 -13
  10. package/dist/fragment.mjs +40 -18
  11. package/dist/fragments.d.mts +3 -7
  12. package/dist/fragments.mjs +6 -12
  13. package/dist/helpers/dom.d.mts +2 -3
  14. package/dist/helpers/dom.mjs +2 -4
  15. package/dist/helpers/index.d.mts +16 -2
  16. package/dist/helpers/index.mjs +17 -1
  17. package/dist/index.d.mts +35 -7
  18. package/dist/index.mjs +39 -8
  19. package/dist/models.d.mts +6 -4
  20. package/dist/node/event.mjs +9 -4
  21. package/dist/node/index.mjs +26 -32
  22. package/dist/node/value.mjs +70 -56
  23. package/dist/parse.mjs +6 -4
  24. package/package.json +6 -5
  25. package/src/attribute/index.ts +89 -0
  26. package/src/attribute/value.ts +107 -0
  27. package/src/constants.ts +19 -19
  28. package/src/fragment.ts +43 -21
  29. package/src/fragments.ts +8 -15
  30. package/src/helpers/dom.ts +3 -5
  31. package/src/helpers/index.ts +25 -1
  32. package/src/index.ts +47 -7
  33. package/src/models.ts +6 -4
  34. package/src/node/event.ts +12 -5
  35. package/src/node/index.ts +36 -56
  36. package/src/node/value.ts +121 -104
  37. package/src/parse.ts +15 -5
  38. package/dist/node/attribute/index.d.mts +0 -6
  39. package/dist/node/attribute/index.mjs +0 -51
  40. package/dist/node/attribute/value.mjs +0 -65
  41. package/src/node/attribute/index.ts +0 -100
  42. package/src/node/attribute/value.ts +0 -158
@@ -1,158 +0,0 @@
1
- import type {PlainObject} from '@oscarpalmer/atoms/models';
2
- import {isReactive} from '@oscarpalmer/mora';
3
- import {
4
- isBooleanAttribute,
5
- setAttribute as setTorettoAttribute,
6
- } from '@oscarpalmer/toretto/attribute';
7
- import {
8
- ATTRIBUTE_CLASS_PREFIX_LENGTH,
9
- ATTRIBUTE_NAME_DELIMITER,
10
- EVENT_CHANGE,
11
- EVENT_INPUT,
12
- EXPRESSION_ATTRIBUTE_CLASS,
13
- EXPRESSION_ATTRIBUTE_STYLE_FULL,
14
- EXPRESSION_ATTRIBUTE_STYLE_PREFIX,
15
- PROPERTY_CHECKED,
16
- PROPERTY_VALUE,
17
- } from '../../constants';
18
- import type {FragmentData} from '../../models';
19
-
20
- function getCallback(element: HTMLElement | SVGElement, name: string) {
21
- if (isBooleanAttribute(name) && name in element) {
22
- return name === PROPERTY_CHECKED ? updateChecked : updateProperty;
23
- }
24
-
25
- return name === PROPERTY_VALUE ? updateValue : setTorettoAttribute;
26
- }
27
-
28
- export function setAttribute(
29
- data: FragmentData,
30
- element: HTMLElement | SVGElement,
31
- name: string,
32
- value: unknown,
33
- ): void {
34
- switch (true) {
35
- case EXPRESSION_ATTRIBUTE_CLASS.test(name):
36
- setClasses(data, element, name, value);
37
- return;
38
-
39
- case EXPRESSION_ATTRIBUTE_STYLE_PREFIX.test(name):
40
- setStyle(data, element, name, value);
41
- return;
42
-
43
- default:
44
- setValue(data, element, name, value);
45
- break;
46
- }
47
- }
48
-
49
- function setClasses(
50
- data: FragmentData,
51
- element: HTMLElement | SVGElement,
52
- name: string,
53
- value: unknown,
54
- ): void {
55
- function update(value: unknown): void {
56
- if (value === true) {
57
- element.classList.add(...classes);
58
- } else {
59
- element.classList.remove(...classes);
60
- }
61
- }
62
-
63
- const classes = name.slice(ATTRIBUTE_CLASS_PREFIX_LENGTH).split(ATTRIBUTE_NAME_DELIMITER);
64
-
65
- if (isReactive(value)) {
66
- data.mora.subscribers.add(value.subscribe(update));
67
- } else {
68
- update(value);
69
- }
70
- }
71
-
72
- function setStyle(
73
- data: FragmentData,
74
- element: HTMLElement | SVGElement,
75
- name: string,
76
- value: unknown,
77
- ): void {
78
- const [, property, unit] = EXPRESSION_ATTRIBUTE_STYLE_FULL.exec(name) ?? [];
79
-
80
- if (property == null) {
81
- return;
82
- }
83
-
84
- function update(value: unknown): void {
85
- if (value == null || value === false || (value === true && unit == null)) {
86
- element.style.removeProperty(property);
87
- } else {
88
- element.style.setProperty(property, value === true ? unit : String(value));
89
- }
90
- }
91
-
92
- if (isReactive(value)) {
93
- data.mora.subscribers.add(value.subscribe(update));
94
- } else {
95
- update(value);
96
- }
97
- }
98
-
99
- function setValue(
100
- data: FragmentData,
101
- element: HTMLElement | SVGElement,
102
- name: string,
103
- value: unknown,
104
- ): void {
105
- const callback = getCallback(element, name);
106
-
107
- if (isReactive(value)) {
108
- data.mora.subscribers.add(
109
- value.subscribe(next => {
110
- callback(element, name, next);
111
- }),
112
- );
113
- } else {
114
- callback(element, name, value);
115
- }
116
- }
117
-
118
- function updateChecked(element: HTMLElement | SVGElement, name: string, value: unknown): void {
119
- updateElement(EVENT_CHANGE, PROPERTY_CHECKED, element, name, value, value === true);
120
- }
121
-
122
- function updateElement(
123
- event: string,
124
- property: string,
125
- element: HTMLElement | SVGElement,
126
- name: string,
127
- value: unknown,
128
- next: unknown,
129
- ): void {
130
- if (!(property in element) || (element as unknown as PlainObject)[property] === next) {
131
- return;
132
- }
133
-
134
- setTorettoAttribute(element, name, value);
135
-
136
- if ((element as unknown as PlainObject)[property] === next) {
137
- return;
138
- }
139
-
140
- (element as unknown as PlainObject)[property] = next;
141
-
142
- element.dispatchEvent(new Event(event, {bubbles: true}));
143
- }
144
-
145
- function updateProperty(element: HTMLElement | SVGElement, name: string, value: unknown): void {
146
- setTorettoAttribute(element, name, value === true);
147
- }
148
-
149
- function updateValue(element: HTMLElement | SVGElement, name: string, value: unknown): void {
150
- updateElement(
151
- element instanceof HTMLSelectElement ? EVENT_CHANGE : EVENT_INPUT,
152
- PROPERTY_VALUE,
153
- element,
154
- name,
155
- value,
156
- String(value),
157
- );
158
- }