- Add debounced state updates for title and content (500ms delay) - Immediate UI updates with delayed history saving - Prevent one-letter-per-undo issue - Add cleanup for debounce timers on unmount
37 lines
1.0 KiB
JavaScript
37 lines
1.0 KiB
JavaScript
// src/jsx/context.ts
|
|
import { raw } from "../helper/html/index.js";
|
|
import { JSXFragmentNode } from "./base.js";
|
|
import { DOM_RENDERER } from "./constants.js";
|
|
import { createContextProviderFunction } from "./dom/context.js";
|
|
var globalContexts = [];
|
|
var createContext = (defaultValue) => {
|
|
const values = [defaultValue];
|
|
const context = ((props) => {
|
|
values.push(props.value);
|
|
let string;
|
|
try {
|
|
string = props.children ? (Array.isArray(props.children) ? new JSXFragmentNode("", {}, props.children) : props.children).toString() : "";
|
|
} finally {
|
|
values.pop();
|
|
}
|
|
if (string instanceof Promise) {
|
|
return string.then((resString) => raw(resString, resString.callbacks));
|
|
} else {
|
|
return raw(string);
|
|
}
|
|
});
|
|
context.values = values;
|
|
context.Provider = context;
|
|
context[DOM_RENDERER] = createContextProviderFunction(values);
|
|
globalContexts.push(context);
|
|
return context;
|
|
};
|
|
var useContext = (context) => {
|
|
return context.values.at(-1);
|
|
};
|
|
export {
|
|
createContext,
|
|
globalContexts,
|
|
useContext
|
|
};
|