taggedjs 2.1.1 → 2.1.2
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/js/Subject.d.ts +12 -0
- package/js/Subject.js +38 -0
- package/js/Subject.js.map +1 -0
- package/js/Tag.class.d.ts +45 -0
- package/js/Tag.class.js +213 -0
- package/js/Tag.class.js.map +1 -0
- package/js/Tag.utils.d.ts +24 -0
- package/js/Tag.utils.js +102 -0
- package/js/Tag.utils.js.map +1 -0
- package/js/ValueSubject.d.ts +6 -0
- package/js/ValueSubject.js +15 -0
- package/js/ValueSubject.js.map +1 -0
- package/js/deepFunctions.d.ts +2 -0
- package/js/deepFunctions.js +76 -0
- package/js/deepFunctions.js.map +1 -0
- package/js/elementInitCheck.d.ts +2 -0
- package/js/elementInitCheck.js +18 -0
- package/js/elementInitCheck.js.map +1 -0
- package/js/getCallback.d.ts +3 -0
- package/js/getCallback.js +53 -0
- package/js/getCallback.js.map +1 -0
- package/js/getTagSupport.d.ts +20 -0
- package/js/getTagSupport.js +20 -0
- package/js/getTagSupport.js.map +1 -0
- package/js/html.d.ts +2 -0
- package/js/html.js +5 -0
- package/js/html.js.map +1 -0
- package/js/index.d.ts +10 -0
- package/js/index.js +12 -0
- package/js/index.js.map +1 -0
- package/js/inputAttribute.d.ts +1 -0
- package/js/inputAttribute.js +19 -0
- package/js/inputAttribute.js.map +1 -0
- package/js/interpolateAttributes.d.ts +3 -0
- package/js/interpolateAttributes.js +69 -0
- package/js/interpolateAttributes.js.map +1 -0
- package/js/interpolateContentTemplates.d.ts +3 -0
- package/js/interpolateContentTemplates.js +47 -0
- package/js/interpolateContentTemplates.js.map +1 -0
- package/js/interpolateElement.d.ts +14 -0
- package/js/interpolateElement.js +35 -0
- package/js/interpolateElement.js.map +1 -0
- package/js/interpolateTemplate.d.ts +21 -0
- package/js/interpolateTemplate.js +262 -0
- package/js/interpolateTemplate.js.map +1 -0
- package/js/interpolations.d.ts +6 -0
- package/js/interpolations.js +17 -0
- package/js/interpolations.js.map +1 -0
- package/js/js/Subject.d.ts +12 -0
- package/js/js/Subject.js +38 -0
- package/js/js/Subject.js.map +1 -0
- package/js/js/Tag.class.d.ts +45 -0
- package/js/js/Tag.class.js +213 -0
- package/js/js/Tag.class.js.map +1 -0
- package/js/js/Tag.utils.d.ts +24 -0
- package/js/js/Tag.utils.js +102 -0
- package/js/js/Tag.utils.js.map +1 -0
- package/js/js/ValueSubject.d.ts +6 -0
- package/js/js/ValueSubject.js +15 -0
- package/js/js/ValueSubject.js.map +1 -0
- package/js/js/deepFunctions.d.ts +2 -0
- package/js/js/deepFunctions.js +76 -0
- package/js/js/deepFunctions.js.map +1 -0
- package/js/js/elementInitCheck.d.ts +2 -0
- package/js/js/elementInitCheck.js +18 -0
- package/js/js/elementInitCheck.js.map +1 -0
- package/js/js/getCallback.d.ts +3 -0
- package/js/js/getCallback.js +53 -0
- package/js/js/getCallback.js.map +1 -0
- package/js/js/getTagSupport.d.ts +20 -0
- package/js/js/getTagSupport.js +20 -0
- package/js/js/getTagSupport.js.map +1 -0
- package/js/js/html.d.ts +2 -0
- package/js/js/html.js +5 -0
- package/js/js/html.js.map +1 -0
- package/js/js/index.d.ts +10 -0
- package/js/js/index.js +12 -0
- package/js/js/index.js.map +1 -0
- package/js/js/inputAttribute.d.ts +1 -0
- package/js/js/inputAttribute.js +19 -0
- package/js/js/inputAttribute.js.map +1 -0
- package/js/js/interpolateAttributes.d.ts +3 -0
- package/js/js/interpolateAttributes.js +69 -0
- package/js/js/interpolateAttributes.js.map +1 -0
- package/js/js/interpolateContentTemplates.d.ts +3 -0
- package/js/js/interpolateContentTemplates.js +47 -0
- package/js/js/interpolateContentTemplates.js.map +1 -0
- package/js/js/interpolateElement.d.ts +14 -0
- package/js/js/interpolateElement.js +35 -0
- package/js/js/interpolateElement.js.map +1 -0
- package/js/js/interpolateTemplate.d.ts +21 -0
- package/js/js/interpolateTemplate.js +262 -0
- package/js/js/interpolateTemplate.js.map +1 -0
- package/js/js/interpolations.d.ts +6 -0
- package/js/js/interpolations.js +17 -0
- package/js/js/interpolations.js.map +1 -0
- package/js/js/onInit.d.ts +6 -0
- package/js/js/onInit.js +17 -0
- package/js/js/onInit.js.map +1 -0
- package/js/js/processTagArray.d.ts +5 -0
- package/js/js/processTagArray.js +49 -0
- package/js/js/processTagArray.js.map +1 -0
- package/js/js/providers.d.ts +25 -0
- package/js/js/providers.js +78 -0
- package/js/js/providers.js.map +1 -0
- package/js/js/render.d.ts +6 -0
- package/js/js/render.js +31 -0
- package/js/js/render.js.map +1 -0
- package/js/js/renderAppToElement.d.ts +8 -0
- package/js/js/renderAppToElement.js +38 -0
- package/js/js/renderAppToElement.js.map +1 -0
- package/js/js/state.d.ts +21 -0
- package/js/js/state.js +63 -0
- package/js/js/state.js.map +1 -0
- package/js/js/tag.d.ts +17 -0
- package/js/js/tag.js +57 -0
- package/js/js/tag.js.map +1 -0
- package/js/js/tagRunner.d.ts +17 -0
- package/js/js/tagRunner.js +19 -0
- package/js/js/tagRunner.js.map +1 -0
- package/js/js/wait.d.ts +1 -0
- package/js/js/wait.js +8 -0
- package/js/js/wait.js.map +1 -0
- package/js/onInit.d.ts +6 -0
- package/js/onInit.js +17 -0
- package/js/onInit.js.map +1 -0
- package/js/processTagArray.d.ts +5 -0
- package/js/processTagArray.js +49 -0
- package/js/processTagArray.js.map +1 -0
- package/js/providers.d.ts +25 -0
- package/js/providers.js +78 -0
- package/js/providers.js.map +1 -0
- package/js/render.d.ts +6 -0
- package/js/render.js +31 -0
- package/js/render.js.map +1 -0
- package/js/renderAppToElement.d.ts +8 -0
- package/js/renderAppToElement.js +38 -0
- package/js/renderAppToElement.js.map +1 -0
- package/js/state.d.ts +21 -0
- package/js/state.js +63 -0
- package/js/state.js.map +1 -0
- package/js/tag.d.ts +17 -0
- package/js/tag.js +57 -0
- package/js/tag.js.map +1 -0
- package/js/tagRunner.d.ts +17 -0
- package/js/tagRunner.js +19 -0
- package/js/tagRunner.js.map +1 -0
- package/js/wait.d.ts +1 -0
- package/js/wait.js +8 -0
- package/js/wait.js.map +1 -0
- package/package.json +1 -1
package/js/js/state.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { setUse } from "./tagRunner.js";
|
|
2
|
+
export const config = {
|
|
3
|
+
array: [],
|
|
4
|
+
rearray: [],
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* @template T
|
|
8
|
+
* @param {T} defaultValue
|
|
9
|
+
* @returns {T}
|
|
10
|
+
*/
|
|
11
|
+
export function state(defaultValue, getSetMethod) {
|
|
12
|
+
const restate = config.rearray[config.array.length];
|
|
13
|
+
if (restate) {
|
|
14
|
+
const oldValue = getStateValue(restate);
|
|
15
|
+
config.array.push(getSetMethod);
|
|
16
|
+
return oldValue; // return old value instead
|
|
17
|
+
}
|
|
18
|
+
config.array.push(getSetMethod);
|
|
19
|
+
return defaultValue;
|
|
20
|
+
}
|
|
21
|
+
setUse({
|
|
22
|
+
beforeRender: (tagSupport) => {
|
|
23
|
+
tagSupport.state = tagSupport.state || {
|
|
24
|
+
newest: [], // oldest: [],
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
beforeRedraw: (tagSupport) => {
|
|
28
|
+
const state = tagSupport.state;
|
|
29
|
+
config.rearray.length = 0;
|
|
30
|
+
if (state?.newest.length) {
|
|
31
|
+
// state.oldest = [...state.newest]
|
|
32
|
+
config.rearray.push(...state.newest);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
afterRender: (tagSupport) => {
|
|
36
|
+
if (config.rearray.length) {
|
|
37
|
+
if (config.rearray.length !== config.array.length) {
|
|
38
|
+
throw new Error(`States lengths mismatched ${config.rearray.length} !== ${config.array.length}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
config.rearray.length = 0; // clean up any previous runs
|
|
42
|
+
const state = tagSupport.state;
|
|
43
|
+
state.newest.length = 0;
|
|
44
|
+
state.newest.push(...config.array);
|
|
45
|
+
state.oldest = state.oldest || [...config.array]; // always preserve oldest
|
|
46
|
+
config.array.length = 0;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
export function getStateValue(state) {
|
|
50
|
+
const [oldValue] = state(EchoBack); // get value and set to undefined
|
|
51
|
+
const [checkValue] = state(oldValue); // set back to original value
|
|
52
|
+
if (checkValue !== EchoBack) {
|
|
53
|
+
const error = new Error('State property not used correctly.\n\n' +
|
|
54
|
+
'For "let" state use `let name = state(default, x => [name, name = x])`\n\n' +
|
|
55
|
+
'For "const" state use `const name = state(default)`\n\n' +
|
|
56
|
+
'Problem function:\n' + state + '\n');
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
return oldValue;
|
|
60
|
+
}
|
|
61
|
+
class EchoBack {
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../ts/state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAevC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,EAAsB;IAC7B,OAAO,EAAE,EAAsB;CAChC,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CACnB,YAAe,EACf,YAA+B;IAE/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACnD,IAAG,OAAO,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QACvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAE,YAAmB,CAAE,CAAA;QACxC,OAAO,QAAQ,CAAA,CAAC,2BAA2B;IAC7C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAmB,CAAC,CAAA;IACtC,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,CAAC;IACL,YAAY,EAAE,CAAC,UAA2B,EAAE,EAAE;QAC5C,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI;YACrC,MAAM,EAAE,EAAE,EAAC,cAAc;SAC1B,CAAA;IACH,CAAC;IACD,YAAY,EAAE,CACZ,UAA2B,EAC3B,EAAE;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;QAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QACzB,IAAG,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YACxB,mCAAmC;YACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IACD,WAAW,EAAE,CACX,UAA2B,EAC3B,EAAE;QACF,IAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACzB,IAAG,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,OAAO,CAAC,MAAM,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;YAClG,CAAC;QACH,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,6BAA6B;QAEvD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAc,CAAA;QACvC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;QACvB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAQ,CAAA;QACzC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA,CAAC,yBAAyB;QAC1E,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IACzB,CAAC;CACF,CAAC,CAAA;AAGF,MAAM,UAAU,aAAa,CAAC,KAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA,CAAC,iCAAiC;IACpE,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAE,QAAQ,CAAE,CAAA,CAAC,6BAA6B;IAEpE,IAAG,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,wCAAwC;YACxC,4EAA4E;YAC5E,yDAAyD;YACzD,qBAAqB,GAAG,KAAK,GAAE,IAAI,CAAC,CAAA;QACtC,MAAM,KAAK,CAAA;IACb,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,QAAQ;CAAG"}
|
package/js/js/tag.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Tag } from "./Tag.class.js";
|
|
2
|
+
export type Props = unknown;
|
|
3
|
+
export type Wrapper = () => Tag;
|
|
4
|
+
export declare class TemplaterResult {
|
|
5
|
+
props: Props;
|
|
6
|
+
newProps: Props;
|
|
7
|
+
cloneProps: Props;
|
|
8
|
+
tagged: boolean;
|
|
9
|
+
wrapper: Wrapper;
|
|
10
|
+
newest?: Tag;
|
|
11
|
+
oldest?: Tag;
|
|
12
|
+
redraw?: () => Tag | undefined;
|
|
13
|
+
}
|
|
14
|
+
type TagResult = (props: Props, // props or children
|
|
15
|
+
children?: Tag) => Tag;
|
|
16
|
+
export declare function tag<T>(tagComponent: T | TagResult): T;
|
|
17
|
+
export {};
|
package/js/js/tag.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Tag } from "./Tag.class.js";
|
|
2
|
+
import { deepClone } from "./deepFunctions.js";
|
|
3
|
+
export class TemplaterResult {
|
|
4
|
+
props;
|
|
5
|
+
newProps;
|
|
6
|
+
cloneProps;
|
|
7
|
+
tagged;
|
|
8
|
+
wrapper;
|
|
9
|
+
newest;
|
|
10
|
+
oldest;
|
|
11
|
+
redraw;
|
|
12
|
+
}
|
|
13
|
+
export function tag(tagComponent) {
|
|
14
|
+
return ((props, children) => {
|
|
15
|
+
const callback = (toCall, callWith) => {
|
|
16
|
+
const callbackResult = toCall(...callWith);
|
|
17
|
+
templater.newest?.ownerTag?.tagSupport.render();
|
|
18
|
+
return callbackResult;
|
|
19
|
+
};
|
|
20
|
+
const isPropTag = props instanceof Tag;
|
|
21
|
+
const watchProps = isPropTag ? 0 : props;
|
|
22
|
+
const newProps = resetFunctionProps(watchProps, callback);
|
|
23
|
+
let argProps = newProps;
|
|
24
|
+
if (isPropTag) {
|
|
25
|
+
children = props;
|
|
26
|
+
argProps = noPropsGiven;
|
|
27
|
+
}
|
|
28
|
+
const wrapper = () => tagComponent(argProps, children);
|
|
29
|
+
const templater = new TemplaterResult();
|
|
30
|
+
templater.tagged = true;
|
|
31
|
+
templater.props = props; // used to call function
|
|
32
|
+
templater.newProps = newProps;
|
|
33
|
+
templater.cloneProps = deepClone(newProps);
|
|
34
|
+
templater.wrapper = wrapper;
|
|
35
|
+
return templater;
|
|
36
|
+
}); // we override the function provided and pretend original is what's returned
|
|
37
|
+
}
|
|
38
|
+
class NoPropsGiven {
|
|
39
|
+
}
|
|
40
|
+
const noPropsGiven = new NoPropsGiven();
|
|
41
|
+
function resetFunctionProps(props, callback) {
|
|
42
|
+
if (typeof (props) !== 'object') {
|
|
43
|
+
return props;
|
|
44
|
+
}
|
|
45
|
+
const newProps = { ...props };
|
|
46
|
+
Object.entries(newProps).forEach(([name, value]) => {
|
|
47
|
+
if (value instanceof Function) {
|
|
48
|
+
newProps[name] = (...args) => {
|
|
49
|
+
return callback(value, args);
|
|
50
|
+
};
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
newProps[name] = value;
|
|
54
|
+
});
|
|
55
|
+
return newProps;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=tag.js.map
|
package/js/js/tag.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../ts/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAM9C,MAAM,OAAO,eAAe;IAC1B,KAAK,CAAO;IACZ,QAAQ,CAAO;IACf,UAAU,CAAO;IACjB,MAAM,CAAU;IAChB,OAAO,CAAU;IAEjB,MAAM,CAAM;IACZ,MAAM,CAAM;IACZ,MAAM,CAAwB;CAC/B;AAOD,MAAM,UAAU,GAAG,CACjB,YAA2B;IAE3B,OAAO,CAAC,CAAC,KAAmB,EAAE,QAAc,EAAE,EAAE;QAC9C,MAAM,QAAQ,GAAG,CAAC,MAAW,EAAE,QAAa,EAAE,EAAE;YAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAA;YAC1C,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,CAAA;YAC/C,OAAO,cAAc,CAAA;QACvB,CAAC,CAAA;QAED,MAAM,SAAS,GAAG,KAAK,YAAY,GAAG,CAAA;QACtC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAEzD,IAAI,QAAQ,GAAG,QAAQ,CAAA;QACvB,IAAG,SAAS,EAAE,CAAC;YACb,QAAQ,GAAG,KAAK,CAAA;YAChB,QAAQ,GAAG,YAAY,CAAA;QACzB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,EAAE,CAAE,YAA0B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAErE,MAAM,SAAS,GAAoB,IAAI,eAAe,EAAE,CAAA;QACxD,SAAS,CAAC,MAAM,GAAG,IAAI,CAAA;QACvB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAA,CAAC,wBAAwB;QAChD,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC7B,SAAS,CAAC,UAAU,GAAG,SAAS,CAAE,QAAQ,CAAE,CAAA;QAC5C,SAAS,CAAC,OAAO,GAAG,OAAO,CAAA;QAE3B,OAAO,SAAS,CAAA;IAClB,CAAC,CAAM,CAAA,CAAC,4EAA4E;AACtF,CAAC;AAED,MAAM,YAAY;CAAG;AACrB,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;AAEvC,SAAS,kBAAkB,CACzB,KAAU,EACV,QAAa;IAEb,IAAG,OAAM,CAAC,KAAK,CAAC,KAAG,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,EAAC,GAAG,KAAK,EAAC,CAAA;IAE3B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QACjD,IAAG,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;gBAClC,OAAO,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAC9B,CAAC,CAAA;YACD,OAAM;QACR,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Tag } from "./Tag.class.js";
|
|
2
|
+
import { TagSupport } from "./getTagSupport";
|
|
3
|
+
interface TagUse {
|
|
4
|
+
beforeRender: (tagSupport: TagSupport, tag?: Tag) => void;
|
|
5
|
+
beforeRedraw: (tagSupport: TagSupport, tag: Tag) => void;
|
|
6
|
+
afterRender: (tagSupport: TagSupport, tag: Tag) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const tagUse: TagUse[];
|
|
9
|
+
export declare function runBeforeRender(tagSupport: TagSupport, tag?: Tag): void;
|
|
10
|
+
export declare function runAfterRender(tagSupport: TagSupport, tag: Tag): void;
|
|
11
|
+
export declare function runBeforeRedraw(tagSupport: TagSupport, tag: Tag): void;
|
|
12
|
+
export declare function setUse(use: {
|
|
13
|
+
beforeRender?: (tagSupport: TagSupport, tag?: Tag) => void;
|
|
14
|
+
beforeRedraw?: (tagSupport: TagSupport, tag: Tag) => void;
|
|
15
|
+
afterRender?: (tagSupport: TagSupport, tag: Tag) => void;
|
|
16
|
+
}): void;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const tagUse = [];
|
|
2
|
+
export function runBeforeRender(tagSupport, tag) {
|
|
3
|
+
tagUse.forEach(tagUse => tagUse.beforeRender(tagSupport, tag));
|
|
4
|
+
}
|
|
5
|
+
export function runAfterRender(tagSupport, tag) {
|
|
6
|
+
tagUse.forEach(tagUse => tagUse.afterRender(tagSupport, tag));
|
|
7
|
+
}
|
|
8
|
+
export function runBeforeRedraw(tagSupport, tag) {
|
|
9
|
+
tagUse.forEach(tagUse => tagUse.beforeRedraw(tagSupport, tag));
|
|
10
|
+
}
|
|
11
|
+
export function setUse(use) {
|
|
12
|
+
const useMe = {
|
|
13
|
+
beforeRender: use.beforeRender || (() => undefined),
|
|
14
|
+
beforeRedraw: use.beforeRedraw || (() => undefined),
|
|
15
|
+
afterRender: use.afterRender || (() => undefined),
|
|
16
|
+
};
|
|
17
|
+
tagUse.push(useMe);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=tagRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tagRunner.js","sourceRoot":"","sources":["../ts/tagRunner.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,MAAM,GAAa,EAAE,CAAA;AAElC,MAAM,UAAU,eAAe,CAC7B,UAAsB,EACtB,GAAS;IAET,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,UAAsB,EACtB,GAAQ;IAER,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,UAAsB,EACtB,GAAQ;IAER,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAItB;IACC,MAAM,KAAK,GAAW;QACpB,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QACnD,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QACnD,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;KAClD,CAAA;IAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACpB,CAAC"}
|
package/js/js/wait.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function wait(ms: number): Promise<unknown>;
|
package/js/js/wait.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../ts/wait.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI,CAAC,EAAU;IAC7B,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QACvB,UAAU,CAAC,GAAG,EAAE;YACd,GAAG,CAAC,CAAC,CAAC,CAAA;QACR,CAAC,EAAE,EAAE,CAAC,CAAA;IACR,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/js/onInit.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Tag } from "./Tag.class.js";
|
|
2
|
+
export type OnInitCallback = () => unknown;
|
|
3
|
+
/** When undefined, it means a tag is being built for the first time so do run init(s) */
|
|
4
|
+
export declare let initCurrentTag: Tag | undefined;
|
|
5
|
+
export declare function setCurrentInitTag(tag: Tag | undefined): void;
|
|
6
|
+
export declare function onInit(callback: OnInitCallback): void;
|
package/js/onInit.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { setUse } from "./tagRunner.js";
|
|
2
|
+
/** When undefined, it means a tag is being built for the first time so do run init(s) */
|
|
3
|
+
export let initCurrentTag;
|
|
4
|
+
export function setCurrentInitTag(tag) {
|
|
5
|
+
initCurrentTag = tag;
|
|
6
|
+
}
|
|
7
|
+
export function onInit(callback) {
|
|
8
|
+
if (!initCurrentTag) {
|
|
9
|
+
callback();
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
setUse({
|
|
13
|
+
beforeRender: (_tagSupport, tag) => {
|
|
14
|
+
setCurrentInitTag(tag);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=onInit.js.map
|
package/js/onInit.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onInit.js","sourceRoot":"","sources":["../ts/onInit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAIvC,yFAAyF;AACzF,MAAM,CAAC,IAAI,cAA+B,CAAA;AAE1C,MAAM,UAAU,iBAAiB,CAAC,GAAoB;IACpD,cAAc,GAAG,GAAG,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,QAAwB;IAExB,IAAG,CAAC,cAAc,EAAE,CAAC;QACnB,QAAQ,EAAE,CAAA;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC;IACL,YAAY,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE;QACjC,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Tag } from "./Tag.class.js";
|
|
2
|
+
import { Counts } from "./interpolateTemplate.js";
|
|
3
|
+
export declare function processTagArray(result: any, value: Tag[], // arry of Tag classes
|
|
4
|
+
template: Element, // <template end interpolate />
|
|
5
|
+
ownerTag: Tag, counts: Counts): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { processTagResult } from "./interpolateTemplate.js";
|
|
2
|
+
export function processTagArray(result, value, // arry of Tag classes
|
|
3
|
+
template, // <template end interpolate />
|
|
4
|
+
ownerTag, counts) {
|
|
5
|
+
result.lastArray = result.lastArray || []; // {tag, index}[] populated in processTagResult
|
|
6
|
+
let removed = 0;
|
|
7
|
+
/** 🗑️ remove previous items first */
|
|
8
|
+
result.lastArray = result.lastArray.filter((item, index) => {
|
|
9
|
+
const lessLength = value.length - 1 < index - removed;
|
|
10
|
+
const subTag = value[index - removed];
|
|
11
|
+
const subArrayValue = subTag?.arrayValue;
|
|
12
|
+
if (lessLength || subArrayValue !== item.tag.arrayValue) {
|
|
13
|
+
const last = result.lastArray[index];
|
|
14
|
+
const tag = last.tag;
|
|
15
|
+
tag.destroy(counts.removed, false);
|
|
16
|
+
++removed;
|
|
17
|
+
++counts.removed;
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
});
|
|
22
|
+
value.forEach((subTag, index) => {
|
|
23
|
+
subTag.tagSupport = ownerTag.tagSupport;
|
|
24
|
+
subTag.ownerTag = ownerTag;
|
|
25
|
+
ownerTag.children.push(subTag);
|
|
26
|
+
if (subTag.arrayValue === undefined) {
|
|
27
|
+
// appears arrayValue is not there but maybe arrayValue is actually the value of undefined
|
|
28
|
+
if (!Object.keys(subTag).includes('arrayValue')) {
|
|
29
|
+
const err = new Error('Use html`...`.key(item) instead of html`...` to template an Array');
|
|
30
|
+
err.code = 'add-array-key';
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const previous = result.lastArray[index];
|
|
35
|
+
if (previous) {
|
|
36
|
+
if (previous.tag.arrayValue === subTag.arrayValue) {
|
|
37
|
+
previous.tag.updateValues(subTag.values);
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const before = template || template.clone;
|
|
42
|
+
processTagResult(subTag, result, before, {
|
|
43
|
+
index,
|
|
44
|
+
counts,
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=processTagArray.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processTagArray.js","sourceRoot":"","sources":["../ts/processTagArray.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,MAAM,UAAU,eAAe,CAC7B,MAAW,EACX,KAAY,EAAE,sBAAsB;AACpC,QAAiB,EAAE,+BAA+B;AAClD,QAAa,EACb,MAAc;IAEd,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAA,CAAC,+CAA+C;IAEzF,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,sCAAsC;IACtC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CACzC,IAAS,EACT,KAAa,EACb,EAAE;QACF,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAC,CAAC,GAAG,KAAK,GAAG,OAAO,CAAA;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,CAAA;QACrC,MAAM,aAAa,GAAG,MAAM,EAAE,UAAU,CAAA;QACxC,IAAG,UAAU,IAAI,aAAa,KAAK,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;YACpB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAClC,EAAE,OAAO,CAAA;YACT,EAAE,MAAM,CAAC,OAAO,CAAA;YAChB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAA;QACvC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC1B,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE9B,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,0FAA0F;YAC1F,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,mEAAmE,CAAC,CACzF;gBAAC,GAAW,CAAC,IAAI,GAAG,eAAe,CAAA;gBACpC,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;gBAClD,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC1C,CAAC;YACD,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,IAAK,QAAgB,CAAC,KAAK,CAAA;QAClD,gBAAgB,CACd,MAAM,EACN,MAAM,EACN,MAAM,EACN;YACE,KAAK;YACL,MAAM;SACP,CACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAM;AACR,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Tag } from "./Tag.class.js";
|
|
2
|
+
export type Provider = {
|
|
3
|
+
constructMethod: any;
|
|
4
|
+
instance: any;
|
|
5
|
+
clone: any;
|
|
6
|
+
};
|
|
7
|
+
export declare const config: {
|
|
8
|
+
providers: Provider[];
|
|
9
|
+
currentTag: Tag | undefined;
|
|
10
|
+
ownerTag: Tag | undefined;
|
|
11
|
+
};
|
|
12
|
+
export declare const providers: {
|
|
13
|
+
/**
|
|
14
|
+
* @template T
|
|
15
|
+
* @param {(new (...args: any[]) => T) | () => T} constructor
|
|
16
|
+
* @returns {T}
|
|
17
|
+
*/
|
|
18
|
+
create: (constructMethod: any) => any;
|
|
19
|
+
/**
|
|
20
|
+
* @template T
|
|
21
|
+
* @param {(new (...args: any[]) => T) | () => T} constructor
|
|
22
|
+
* @returns {T}
|
|
23
|
+
*/
|
|
24
|
+
inject: (constructor: any) => any;
|
|
25
|
+
};
|
package/js/providers.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { deepClone } from "./deepFunctions.js";
|
|
2
|
+
import { setUse } from "./tagRunner.js";
|
|
3
|
+
export const config = {
|
|
4
|
+
providers: [],
|
|
5
|
+
currentTag: undefined,
|
|
6
|
+
ownerTag: undefined,
|
|
7
|
+
};
|
|
8
|
+
function get(constructMethod) {
|
|
9
|
+
return config.providers.find(provider => provider.constructMethod === constructMethod);
|
|
10
|
+
}
|
|
11
|
+
export const providers = {
|
|
12
|
+
/**
|
|
13
|
+
* @template T
|
|
14
|
+
* @param {(new (...args: any[]) => T) | () => T} constructor
|
|
15
|
+
* @returns {T}
|
|
16
|
+
*/
|
|
17
|
+
create: (constructMethod) => {
|
|
18
|
+
const existing = get(constructMethod);
|
|
19
|
+
if (existing) {
|
|
20
|
+
existing.clone = deepClone(existing.instance);
|
|
21
|
+
return existing.instance;
|
|
22
|
+
}
|
|
23
|
+
// Providers with provider requirements just need to use providers.create() and providers.inject()
|
|
24
|
+
const instance = constructMethod.constructor ? new constructMethod() : constructMethod();
|
|
25
|
+
config.providers.push({
|
|
26
|
+
constructMethod,
|
|
27
|
+
instance,
|
|
28
|
+
clone: deepClone(instance)
|
|
29
|
+
});
|
|
30
|
+
return instance;
|
|
31
|
+
},
|
|
32
|
+
/**
|
|
33
|
+
* @template T
|
|
34
|
+
* @param {(new (...args: any[]) => T) | () => T} constructor
|
|
35
|
+
* @returns {T}
|
|
36
|
+
*/
|
|
37
|
+
inject: (constructor) => {
|
|
38
|
+
const oldValue = get(constructor);
|
|
39
|
+
if (oldValue) {
|
|
40
|
+
return oldValue.instance;
|
|
41
|
+
}
|
|
42
|
+
let owner = {
|
|
43
|
+
ownerTag: config.ownerTag
|
|
44
|
+
};
|
|
45
|
+
while (owner.ownerTag) {
|
|
46
|
+
const ownerProviders = owner.ownerTag.providers;
|
|
47
|
+
const provider = ownerProviders.find(provider => {
|
|
48
|
+
if (provider.constructMethod === constructor) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
if (provider) {
|
|
53
|
+
provider.clone = deepClone(provider.instance); // keep a copy of the latest before any change occur
|
|
54
|
+
config.providers.push(provider);
|
|
55
|
+
return provider.instance;
|
|
56
|
+
}
|
|
57
|
+
owner = owner.ownerTag; // cause reloop
|
|
58
|
+
}
|
|
59
|
+
const msg = `Could not inject provider: ${constructor}`;
|
|
60
|
+
console.warn(`${msg}. Available providers`, config.providers);
|
|
61
|
+
throw new Error(msg);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
setUse({
|
|
65
|
+
beforeRedraw: (_tagSupport, tag) => {
|
|
66
|
+
config.currentTag = tag;
|
|
67
|
+
config.ownerTag = tag.ownerTag;
|
|
68
|
+
if (tag.providers.length) {
|
|
69
|
+
config.providers.length = 0;
|
|
70
|
+
config.providers.push(...tag.providers);
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
afterRender: (_tagSupport, tag) => {
|
|
74
|
+
tag.providers = [...config.providers];
|
|
75
|
+
config.providers.length = 0;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../ts/providers.ts"],"names":[],"mappings":"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"}
|
package/js/render.d.ts
ADDED
package/js/render.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { interpolateElement } from "./interpolateElement.js";
|
|
2
|
+
export function buildItemTagMap(tag, template, // {string, context}
|
|
3
|
+
insertBefore) {
|
|
4
|
+
const temporary = document.createElement('div');
|
|
5
|
+
temporary.id = 'tag-temp-holder';
|
|
6
|
+
// render content with a first child that we can know is our first element
|
|
7
|
+
temporary.innerHTML = '<div></div>' + template.string;
|
|
8
|
+
const context = tag.update();
|
|
9
|
+
interpolateElement(temporary, context, tag);
|
|
10
|
+
const clones = buildClones(temporary, insertBefore);
|
|
11
|
+
tag.clones.push(...clones);
|
|
12
|
+
return clones;
|
|
13
|
+
}
|
|
14
|
+
function buildClones(temporary, insertBefore) {
|
|
15
|
+
const clones = [];
|
|
16
|
+
const templateClone = temporary.children[0];
|
|
17
|
+
const sibling = templateClone; // a div we added
|
|
18
|
+
let nextSibling = sibling.nextSibling;
|
|
19
|
+
temporary.removeChild(templateClone); // remove the div
|
|
20
|
+
while (nextSibling) {
|
|
21
|
+
const nextNextSibling = nextSibling.nextSibling;
|
|
22
|
+
buildSibling(nextSibling, insertBefore);
|
|
23
|
+
clones.push(nextSibling);
|
|
24
|
+
nextSibling = nextNextSibling;
|
|
25
|
+
}
|
|
26
|
+
return clones;
|
|
27
|
+
}
|
|
28
|
+
function buildSibling(nextSibling, insertBefore) {
|
|
29
|
+
insertBefore.parentNode.insertBefore(nextSibling, insertBefore);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=render.js.map
|
package/js/render.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../ts/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAG5D,MAAM,UAAU,eAAe,CAC7B,GAAQ,EACR,QAA4C,EAAE,oBAAoB;AAClE,YAAqB;IAErB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC/C,SAAS,CAAC,EAAE,GAAG,iBAAiB,CAAA;IAEhC,0EAA0E;IAC1E,SAAS,CAAC,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAA;IAErD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA;IAC5B,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IAE3C,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACnD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAE,GAAG,MAAM,CAAE,CAAA;IAE5B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,WAAW,CAClB,SAAkB,EAClB,YAAqB;IAErB,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,aAAa,CAAA,CAAC,iBAAiB;IAC/C,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;IACrC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA,CAAC,iBAAiB;IAEtD,OAAO,WAAW,EAAE,CAAC;QACnB,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,CAAA;QAC/C,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QACvC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACxB,WAAW,GAAG,eAAe,CAAA;IAC/B,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,YAAY,CACnB,WAAsB,EACtB,YAAqB;IAEpB,YAAY,CAAC,UAAyB,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;AACjF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TagSupport } from "./getTagSupport.js";
|
|
2
|
+
import { Tag } from "./Tag.class.js";
|
|
3
|
+
import { TemplaterResult } from "./tag.js";
|
|
4
|
+
export declare function renderAppToElement(app: (...args: unknown[]) => TemplaterResult, element: Element, props: unknown): void;
|
|
5
|
+
export declare function applyTagUpdater(wrapper: TemplaterResult): {
|
|
6
|
+
tag: Tag;
|
|
7
|
+
tagSupport: TagSupport;
|
|
8
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { interpolateElement } from "./interpolateElement.js";
|
|
2
|
+
import { getTagSupport } from "./getTagSupport.js";
|
|
3
|
+
import { runBeforeRender } from "./tagRunner.js";
|
|
4
|
+
export function renderAppToElement(app, element, props) {
|
|
5
|
+
// Create the app which returns [props, runOneTimeFunction]
|
|
6
|
+
const wrapper = app(props);
|
|
7
|
+
// have a function setup and call the tagWrapper with (props, {update, async, on})
|
|
8
|
+
const result = applyTagUpdater(wrapper);
|
|
9
|
+
const { tag, tagSupport } = result;
|
|
10
|
+
let lastTag;
|
|
11
|
+
tagSupport.mutatingRender = () => {
|
|
12
|
+
runBeforeRender(tagSupport, tag);
|
|
13
|
+
tag.beforeRedraw();
|
|
14
|
+
const fromTag = lastTag = wrapper.wrapper();
|
|
15
|
+
fromTag.setSupport(tag.tagSupport);
|
|
16
|
+
tag.afterRender();
|
|
17
|
+
tag.updateByTag(fromTag);
|
|
18
|
+
if (lastTag) {
|
|
19
|
+
lastTag.destroy(0);
|
|
20
|
+
}
|
|
21
|
+
return lastTag;
|
|
22
|
+
};
|
|
23
|
+
const context = tag.updateValues(tag.values);
|
|
24
|
+
const template = tag.getTemplate();
|
|
25
|
+
element.innerHTML = template.string;
|
|
26
|
+
interpolateElement(element, context, tag);
|
|
27
|
+
}
|
|
28
|
+
export function applyTagUpdater(wrapper) {
|
|
29
|
+
const tagSupport = getTagSupport(wrapper);
|
|
30
|
+
runBeforeRender(tagSupport);
|
|
31
|
+
// Call the apps function for our tag templater
|
|
32
|
+
const templater = tagSupport.templater;
|
|
33
|
+
const tag = templater.wrapper();
|
|
34
|
+
tag.tagSupport = tagSupport;
|
|
35
|
+
tag.afterRender();
|
|
36
|
+
return { tag, tagSupport };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=renderAppToElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderAppToElement.js","sourceRoot":"","sources":["../ts/renderAppToElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAc,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGhD,MAAM,UAAU,kBAAkB,CAChC,GAA4C,EAC5C,OAAgB,EAChB,KAAc;IAEd,2DAA2D;IAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;IAE1B,kFAAkF;IAClF,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACvC,MAAM,EAAC,GAAG,EAAE,UAAU,EAAC,GAAG,MAAM,CAAA;IAEhC,IAAI,OAAO,CAAA;IACX,UAAU,CAAC,cAAc,GAAG,GAAG,EAAE;QAC/B,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QAChC,GAAG,CAAC,YAAY,EAAE,CAAA;QAElB,MAAM,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAE3C,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAClC,GAAG,CAAC,WAAW,EAAE,CAAA;QACjB,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAExB,IAAG,OAAO,EAAE,CAAC;YACX,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAElC,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA;IACnC,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;AAE3C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAwB;IAExB,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACzC,eAAe,CAAC,UAAU,CAAC,CAAA;IAE3B,+CAA+C;IAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,SAA4B,CAAA;IACzD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,CAAA;IAE/B,GAAG,CAAC,UAAU,GAAG,UAAU,CAAA;IAC3B,GAAG,CAAC,WAAW,EAAE,CAAA;IAEjB,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAA;AAC5B,CAAC"}
|
package/js/state.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TagSupport } from "./getTagSupport.js";
|
|
2
|
+
export type StateConfig = ((x?: any) => [any, any]);
|
|
3
|
+
export type StateConfigArray = StateConfig[];
|
|
4
|
+
export type State = {
|
|
5
|
+
newest: StateConfigArray;
|
|
6
|
+
oldest?: StateConfigArray;
|
|
7
|
+
};
|
|
8
|
+
export type StateTagSupport = TagSupport & {
|
|
9
|
+
state?: State;
|
|
10
|
+
};
|
|
11
|
+
export declare const config: {
|
|
12
|
+
array: StateConfigArray;
|
|
13
|
+
rearray: StateConfigArray;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* @template T
|
|
17
|
+
* @param {T} defaultValue
|
|
18
|
+
* @returns {T}
|
|
19
|
+
*/
|
|
20
|
+
export declare function state<T>(defaultValue: T, getSetMethod?: (x: T) => [T, T]): T;
|
|
21
|
+
export declare function getStateValue(state: StateConfig): any;
|
package/js/state.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { setUse } from "./tagRunner.js";
|
|
2
|
+
export const config = {
|
|
3
|
+
array: [],
|
|
4
|
+
rearray: [],
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* @template T
|
|
8
|
+
* @param {T} defaultValue
|
|
9
|
+
* @returns {T}
|
|
10
|
+
*/
|
|
11
|
+
export function state(defaultValue, getSetMethod) {
|
|
12
|
+
const restate = config.rearray[config.array.length];
|
|
13
|
+
if (restate) {
|
|
14
|
+
const oldValue = getStateValue(restate);
|
|
15
|
+
config.array.push(getSetMethod);
|
|
16
|
+
return oldValue; // return old value instead
|
|
17
|
+
}
|
|
18
|
+
config.array.push(getSetMethod);
|
|
19
|
+
return defaultValue;
|
|
20
|
+
}
|
|
21
|
+
setUse({
|
|
22
|
+
beforeRender: (tagSupport) => {
|
|
23
|
+
tagSupport.state = tagSupport.state || {
|
|
24
|
+
newest: [], // oldest: [],
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
beforeRedraw: (tagSupport) => {
|
|
28
|
+
const state = tagSupport.state;
|
|
29
|
+
config.rearray.length = 0;
|
|
30
|
+
if (state?.newest.length) {
|
|
31
|
+
// state.oldest = [...state.newest]
|
|
32
|
+
config.rearray.push(...state.newest);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
afterRender: (tagSupport) => {
|
|
36
|
+
if (config.rearray.length) {
|
|
37
|
+
if (config.rearray.length !== config.array.length) {
|
|
38
|
+
throw new Error(`States lengths mismatched ${config.rearray.length} !== ${config.array.length}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
config.rearray.length = 0; // clean up any previous runs
|
|
42
|
+
const state = tagSupport.state;
|
|
43
|
+
state.newest.length = 0;
|
|
44
|
+
state.newest.push(...config.array);
|
|
45
|
+
state.oldest = state.oldest || [...config.array]; // always preserve oldest
|
|
46
|
+
config.array.length = 0;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
export function getStateValue(state) {
|
|
50
|
+
const [oldValue] = state(EchoBack); // get value and set to undefined
|
|
51
|
+
const [checkValue] = state(oldValue); // set back to original value
|
|
52
|
+
if (checkValue !== EchoBack) {
|
|
53
|
+
const error = new Error('State property not used correctly.\n\n' +
|
|
54
|
+
'For "let" state use `let name = state(default, x => [name, name = x])`\n\n' +
|
|
55
|
+
'For "const" state use `const name = state(default)`\n\n' +
|
|
56
|
+
'Problem function:\n' + state + '\n');
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
return oldValue;
|
|
60
|
+
}
|
|
61
|
+
class EchoBack {
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=state.js.map
|
package/js/state.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../ts/state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAevC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,EAAsB;IAC7B,OAAO,EAAE,EAAsB;CAChC,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CACnB,YAAe,EACf,YAA+B;IAE/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACnD,IAAG,OAAO,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QACvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAE,YAAmB,CAAE,CAAA;QACxC,OAAO,QAAQ,CAAA,CAAC,2BAA2B;IAC7C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAmB,CAAC,CAAA;IACtC,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,CAAC;IACL,YAAY,EAAE,CAAC,UAA2B,EAAE,EAAE;QAC5C,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI;YACrC,MAAM,EAAE,EAAE,EAAC,cAAc;SAC1B,CAAA;IACH,CAAC;IACD,YAAY,EAAE,CACZ,UAA2B,EAC3B,EAAE;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;QAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QACzB,IAAG,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YACxB,mCAAmC;YACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IACD,WAAW,EAAE,CACX,UAA2B,EAC3B,EAAE;QACF,IAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACzB,IAAG,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,OAAO,CAAC,MAAM,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;YAClG,CAAC;QACH,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,6BAA6B;QAEvD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAc,CAAA;QACvC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;QACvB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAQ,CAAA;QACzC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA,CAAC,yBAAyB;QAC1E,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IACzB,CAAC;CACF,CAAC,CAAA;AAGF,MAAM,UAAU,aAAa,CAAC,KAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA,CAAC,iCAAiC;IACpE,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAE,QAAQ,CAAE,CAAA,CAAC,6BAA6B;IAEpE,IAAG,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,wCAAwC;YACxC,4EAA4E;YAC5E,yDAAyD;YACzD,qBAAqB,GAAG,KAAK,GAAE,IAAI,CAAC,CAAA;QACtC,MAAM,KAAK,CAAA;IACb,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,QAAQ;CAAG"}
|
package/js/tag.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Tag } from "./Tag.class.js";
|
|
2
|
+
export type Props = unknown;
|
|
3
|
+
export type Wrapper = () => Tag;
|
|
4
|
+
export declare class TemplaterResult {
|
|
5
|
+
props: Props;
|
|
6
|
+
newProps: Props;
|
|
7
|
+
cloneProps: Props;
|
|
8
|
+
tagged: boolean;
|
|
9
|
+
wrapper: Wrapper;
|
|
10
|
+
newest?: Tag;
|
|
11
|
+
oldest?: Tag;
|
|
12
|
+
redraw?: () => Tag | undefined;
|
|
13
|
+
}
|
|
14
|
+
type TagResult = (props: Props, // props or children
|
|
15
|
+
children?: Tag) => Tag;
|
|
16
|
+
export declare function tag<T>(tagComponent: T | TagResult): T;
|
|
17
|
+
export {};
|