mirror of
https://github.com/jaandrle/deka-dom-el
synced 2025-04-02 20:15:53 +02:00
* ⚡ 🎉 * ⚡ wip * 🔤 * ⚡ wip * ⚡ wip * ⚡ Refatc signals to .get/.set syntax #26 * 🐛 Better types for on* * 🔤 * 🔤 * 🐛 coumputed signal * 🔤 ⚡ Docs UI/UX * ⚡ 🔤 UI enhancements * ⚡ (bs) (un)min * 🔤 adds debugging * 🔤 ssr * 🔤 * ⚡ bs/lint * 🔤 * 🔤 UI * 🔤 updates texts * 🔤UI * ⚡ dispatch * 🔤 events * 🔤 elements * 🔤 intro * 🐛 fixes completitions for el with components * 🐛 wrong file(s) in git * 🔤 logo * 🐛 🔤 types 3ps * 🔤 ui/ux * 🔤 * 🔤 * 🔤 scopes * 🔤 * 🔤 ui/ux * 🔤 * ⚡ issignal * 🔤 improvemens * ⚡ irelands * 🔤 UI/UX/wording * 🐛 npx-hint [Scrollable region must have keyboard access | Axe Rules | Deque University | Deque Systems](https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI) * 🔤 logos * ⚡ better? dts builds * Update README.md
71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
export { t } from "./utils/index.js";
|
|
export const path_target= {
|
|
root: "dist/docs/",
|
|
css: "dist/docs/",
|
|
assets: "dist/docs/assets/"
|
|
};
|
|
/**
|
|
* This variable will be filled with the list of pages during the build process (see `bs/docs.js`).
|
|
* @type {import("./types.d.ts").Info[]}
|
|
* */
|
|
export let pages= [];
|
|
/**
|
|
* @typedef registerClientFile
|
|
* @type {function}
|
|
* @param {URL} url
|
|
* @param {Object} [options]
|
|
* @param {HTMLScriptElement|HTMLLinkElement} [options.head]
|
|
* @param {string} [options.folder]
|
|
* @param {function} [options.replacer]
|
|
* */
|
|
export function registerClientFile(url, { head, folder= "", replacer }= {}){
|
|
if(folder && !folder.endsWith("/")) folder+= "/";
|
|
const file_name= url.pathname.split("/").pop();
|
|
s.mkdir("-p", path_target.root+folder);
|
|
let content= s.cat(url)
|
|
if(replacer) content= s.echo(replacer(content.toString()));
|
|
content.to(path_target.root+folder+file_name);
|
|
|
|
if(!head) return;
|
|
head[head instanceof HTMLScriptElement ? "src" : "href"]= file_name;
|
|
document.head.append(
|
|
head
|
|
);
|
|
}
|
|
|
|
const events= {
|
|
oneachrender: new Set(),
|
|
onssrend: new Set()
|
|
};
|
|
/** @param {keyof typeof events} name @param {function} listener */
|
|
export function addEventListener(name, listener){
|
|
events[name].add(listener);
|
|
}
|
|
/** @param {keyof typeof events} name @param {any} a */
|
|
export function dispatchEvent(name, a){
|
|
const ls= events[name];
|
|
ls.forEach(l=> l(a));
|
|
if(name!=="oneachrender")
|
|
ls.clear();
|
|
}
|
|
|
|
export const styles= {
|
|
element: null,
|
|
name: "global.css",
|
|
get location(){ return path_target.css.replace(path_target.root, "")+this.name; },
|
|
content: "",
|
|
|
|
/** @param {Parameters<typeof String.raw>} a */
|
|
css(...a){
|
|
let c= css(...a);
|
|
if(this.content) this.content+= "\n";
|
|
this.content+= c;
|
|
return this;
|
|
}
|
|
};
|
|
addEventListener("oneachrender", ()=> document.head.append(
|
|
Object.assign(document.createElement("link"), { rel: "stylesheet", href: styles.location })
|
|
));
|
|
/** @type {typeof String.raw} */
|
|
function css(...a){ return String.raw(...a).trim(); }
|