Initial commit
This commit is contained in:
11
.editorconfig
Normal file
11
.editorconfig
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# EditorConfig is awesome: https://editorconfig.org
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 4
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
indent_style = tab
|
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
/.yarn/** linguist-vendored
|
||||||
|
/.yarn/releases/* binary
|
||||||
|
/.yarn/plugins/**/* binary
|
||||||
|
/.pnp.* binary linguist-generated
|
17
.gitignore
vendored
Normal file
17
.gitignore
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
.yarn/*
|
||||||
|
!.yarn/patches
|
||||||
|
!.yarn/plugins
|
||||||
|
!.yarn/releases
|
||||||
|
!.yarn/sdks
|
||||||
|
!.yarn/versions
|
||||||
|
|
||||||
|
# Whether you use PnP or not, the node_modules folder is often used to store
|
||||||
|
# build artifacts that should be gitignored
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
# Swap the comments on the following lines if you wish to use zero-installs
|
||||||
|
# In that case, don't forget to run `yarn config set enableGlobalCache false`!
|
||||||
|
# Documentation here: https://yarnpkg.com/features/caching#zero-installs
|
||||||
|
|
||||||
|
#!.yarn/cache
|
||||||
|
.pnp.*
|
4
.prettierrc
Normal file
4
.prettierrc
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"tabWidth": 4,
|
||||||
|
"useTabs": false
|
||||||
|
}
|
9
.vscode/settings.json
vendored
Normal file
9
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"cSpell.words": [
|
||||||
|
"btih",
|
||||||
|
"Hocevar",
|
||||||
|
"ohtml",
|
||||||
|
"unlisten",
|
||||||
|
"unplugin"
|
||||||
|
]
|
||||||
|
}
|
13
COPYING
Normal file
13
COPYING
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
Version 2, December 2004
|
||||||
|
|
||||||
|
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim or modified
|
||||||
|
copies of this license document, and changing it is allowed as long
|
||||||
|
as the name is changed.
|
||||||
|
|
||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. You just DO WHAT THE FUCK YOU WANT TO.
|
7
LICENSE
Normal file
7
LICENSE
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Copyright © 2025 Eric Woodward
|
||||||
|
|
||||||
|
This program is free software. It comes without any warranty,
|
||||||
|
to the extent permitted by applicable law. You can redistribute
|
||||||
|
it and/or modify it under the terms of the Do What The Fuck You
|
||||||
|
Want To Public License, Version 2, as published by Sam Hocevar.
|
||||||
|
See the COPYING file for more details.
|
140
README.md
Normal file
140
README.md
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
# fluent-dom-esm
|
||||||
|
|
||||||
|
A remarkably simple but surprisingly powerful DOM element creation library with an easy-to-use syntax inspired by the classic JS libraries of yesterday.
|
||||||
|
|
||||||
|
When you don't need a whole framework (or JSX), but also don't want to spend all day typing `document.createElement` or `document.getElementById`, **fluent-dom-esm** may just be the thing you need.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Grab the latest copy of the `fluent-dom-esm.js` file, either by [downloading it](./dist/fluent-dom-esm.js) or doing a `git clone` and pulling it out of the `dist` folder.
|
||||||
|
2. Add the newly acquired file to your static site / progressive web app / over-engineered blog.
|
||||||
|
3. Import it as an ESM module (`import $d from "./src/fluent-dom-esm.js"`).
|
||||||
|
4. Profit!
|
||||||
|
|
||||||
|
### Occasionally Asked Questions
|
||||||
|
|
||||||
|
- _How can I use this in Node?_ You can't, AFAIK. It requires access to the HTML `Document` object from the browser.
|
||||||
|
- _How can I minify or bundle this?_ You shouldn't, IMHO. JavaScript is meant to be read by humans _AND_ machines.
|
||||||
|
|
||||||
|
## Building / Modifying
|
||||||
|
|
||||||
|
The source exists as a couple of TypeScript files which are "bundled" into a traditional JS file (along with TS definitions).
|
||||||
|
|
||||||
|
### Building
|
||||||
|
|
||||||
|
To build new versions of the `fluent-dom-esm.js` file:
|
||||||
|
|
||||||
|
1. `git clone` this project.
|
||||||
|
2. `cd fluent-dom-esm`
|
||||||
|
3. `yarn`
|
||||||
|
4. `yarn build`
|
||||||
|
|
||||||
|
If everything goes as expected, you should have a newly built `fluent-dom-esm.js` file in the `dist` folder.
|
||||||
|
|
||||||
|
### Modifying
|
||||||
|
|
||||||
|
To edit the source of the `fluent-dom-esm.js` file:
|
||||||
|
|
||||||
|
1. `git clone` this project.
|
||||||
|
2. `cd fluent-dom-esm`
|
||||||
|
3. `yarn`
|
||||||
|
4. `yarn dev`
|
||||||
|
5. Make your changes to `fluent-dom-esm.ts`.
|
||||||
|
6. When you're happy with it, do a `yarn build`.
|
||||||
|
|
||||||
|
If everything goes as expected, you should have a newly built `fluent-dom-esm.js` file in the `dist` folder with your changes.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
All assume that `$d` is the default function from `fluent-dom-esm` (`import $d from './fluent-dom-esm.js'`);
|
||||||
|
|
||||||
|
- For more examples, see the `demo.html` file in the `dist` folder.
|
||||||
|
|
||||||
|
### Create a Paragraph
|
||||||
|
|
||||||
|
```
|
||||||
|
$(document.body).app($d
|
||||||
|
.c("p")
|
||||||
|
.s("background-color", "yellow")
|
||||||
|
.s("color", "black")
|
||||||
|
.t("The quick brown fox jumped over the lazy, sleeping dog.")
|
||||||
|
);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
renders (with added spaces) as
|
||||||
|
|
||||||
|
```
|
||||||
|
...
|
||||||
|
<body>
|
||||||
|
<p style="background-color: yellow; color: black;">
|
||||||
|
The quick brown fox jumped over the lazy, sleeping dog.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create a List
|
||||||
|
|
||||||
|
```
|
||||||
|
const $ul = $d
|
||||||
|
.c("ul")
|
||||||
|
.id("example-list")
|
||||||
|
.cls("example-list");
|
||||||
|
[
|
||||||
|
"List Item 1",
|
||||||
|
"List Item 2",
|
||||||
|
"List Item 3",
|
||||||
|
].forEach((reason, idx) => {
|
||||||
|
$ul.app(
|
||||||
|
$d
|
||||||
|
.c("li")
|
||||||
|
.id(`fluentDom-example-list-item${idx + 1}`)
|
||||||
|
.t(reason),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document.body).app($ul);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
renders (with added spaces) as
|
||||||
|
|
||||||
|
```
|
||||||
|
<body>
|
||||||
|
<ul class="example-list" id="example-list">
|
||||||
|
<li id="fluentDom-example-list-item1">List Item 1</li>
|
||||||
|
<li id="fluentDom-example-list-item2">List Item 2</li>
|
||||||
|
<li id="fluentDom-example-list-item3">List Item 3</li>
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright © 2025 Eric Woodward
|
||||||
|
|
||||||
|
Based on [original source](https://glacius.tmont.com/articles/fluent-dom-manipulation-in-javascript), copyright © 2009 Tommy Montgomery.
|
||||||
|
|
||||||
|
```
|
||||||
|
This program is free software. It comes without any warranty, to the
|
||||||
|
extent permitted by applicable law. You can redistribute it and/or
|
||||||
|
modify it under the terms of the Do What The Fuck You Want To Public
|
||||||
|
License, Version 2, as published by Sam Hocevar.
|
||||||
|
|
||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
Version 2, December 2004
|
||||||
|
|
||||||
|
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim or modified
|
||||||
|
copies of this license document, and changing it is allowed as long
|
||||||
|
as the name is changed.
|
||||||
|
|
||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||||
|
|
||||||
|
```
|
170
dist/demo.html
vendored
Normal file
170
dist/demo.html
vendored
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>fluent-dom-esm Demo</title>
|
||||||
|
<link rel="stylesheet" href="/styles/main.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<script type="module">
|
||||||
|
import $d from "/fluent-dom-esm.js";
|
||||||
|
|
||||||
|
const $article = $d
|
||||||
|
.c("article")
|
||||||
|
.id("fde-article")
|
||||||
|
.cls("cool-article")
|
||||||
|
.app($d.c("h1").cls("cool-heading").t("fluent-dom-esm"))
|
||||||
|
.app(
|
||||||
|
$d
|
||||||
|
.c("p")
|
||||||
|
.s("background-color", "#db7c17")
|
||||||
|
.s("color", "var(--main-dark)")
|
||||||
|
.t("Why is it so cool?"),
|
||||||
|
);
|
||||||
|
|
||||||
|
const $ul = $d.c("ul").id("fluentDom-example-list");
|
||||||
|
|
||||||
|
[
|
||||||
|
"Remarkably simple syntax",
|
||||||
|
"Surprisingly powerful features",
|
||||||
|
"Easy to use and remember",
|
||||||
|
].forEach((reason, idx) => {
|
||||||
|
$ul.app(
|
||||||
|
$d
|
||||||
|
.c("li")
|
||||||
|
.id(`fluentDom-example-list-item${idx + 1}`)
|
||||||
|
.t(reason),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
$d(document.body).app(
|
||||||
|
$article
|
||||||
|
.app($ul)
|
||||||
|
.app(
|
||||||
|
$d.c("em").t("Try it today!").style("color", "#c43a19"),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
import $d from "/fluent-dom-esm.js";
|
||||||
|
|
||||||
|
const preDom = $d
|
||||||
|
.c("pre")
|
||||||
|
.t(
|
||||||
|
`
|
||||||
|
\<script type="module">
|
||||||
|
import $d from "/src/fluent-dom-esm.ts";
|
||||||
|
|
||||||
|
const $article = $d
|
||||||
|
.c("article")
|
||||||
|
.id("fde-article")
|
||||||
|
.cls("cool-article")
|
||||||
|
.app($d.c("h1").cls("cool-heading").t("fluent-dom-esm"))
|
||||||
|
.app(
|
||||||
|
$d
|
||||||
|
.c("p")
|
||||||
|
.s("background-color", "#db7c17")
|
||||||
|
.s("color", "var(--main-dark)")
|
||||||
|
.t("Why is it so cool?"),
|
||||||
|
);
|
||||||
|
|
||||||
|
const $ul = $d.c("ul").id("fluentDom-example-list");
|
||||||
|
|
||||||
|
[
|
||||||
|
"Remarkably simple syntax",
|
||||||
|
"Surprisingly powerful features",
|
||||||
|
"Easy to use and remember",
|
||||||
|
].forEach((reason, idx) => {
|
||||||
|
$ul.app(
|
||||||
|
$d
|
||||||
|
.c("li")
|
||||||
|
.id(\`fluentDom-example-list-item$\{idx + 1}\`)
|
||||||
|
.t(reason),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
$d(document.body).app(
|
||||||
|
$article
|
||||||
|
.app($ul)
|
||||||
|
.app(
|
||||||
|
$d.c("em").t("Try it today!").style("color", "#c43a19"),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
<\/script>
|
||||||
|
`
|
||||||
|
.trim()
|
||||||
|
.split("\n")
|
||||||
|
.map((val) => {
|
||||||
|
return val.replace(" ", "");
|
||||||
|
})
|
||||||
|
.join("\n"),
|
||||||
|
)
|
||||||
|
.toDom();
|
||||||
|
|
||||||
|
preDom.innerHTML = preDom.innerHTML
|
||||||
|
// strRegEx must be applied first to prevent false positives
|
||||||
|
.replace(/\"[^"]+\"/g, (val) =>
|
||||||
|
val !== '"module"'
|
||||||
|
? `<span class="code-str">${val}</span>`
|
||||||
|
: val,
|
||||||
|
)
|
||||||
|
.replace(
|
||||||
|
/\`[^`]+\`/g,
|
||||||
|
(val) => `<span class="code-str">${val}</span>`,
|
||||||
|
)
|
||||||
|
.replace(/\.\w+/g, (val) =>
|
||||||
|
val !== ".ts"
|
||||||
|
? `<span class="code-func">${val}</span>`
|
||||||
|
: val,
|
||||||
|
)
|
||||||
|
.replace(/(\$\w+)/g, '<span class="code-dom">$1</span>')
|
||||||
|
.replace("document", '<span class="code-var">document</span>')
|
||||||
|
.replaceAll("reason", '<span class="code-var">reason</span>')
|
||||||
|
.replace("idx", '<span class="code-var">idx</span>')
|
||||||
|
.replace(
|
||||||
|
/<\/?script[^&]*>/g,
|
||||||
|
(val) => `<span class="code-cmd">${val}</span>`,
|
||||||
|
);
|
||||||
|
|
||||||
|
const themeToggleButton = $d
|
||||||
|
.c("button")
|
||||||
|
.cls("themeToggle-button")
|
||||||
|
.id("themeToggle-button")
|
||||||
|
// .t("☀︎ / ☾")
|
||||||
|
.listen("click", () => {
|
||||||
|
document.body.classList.toggle("invertedTheme");
|
||||||
|
})
|
||||||
|
.html(
|
||||||
|
`
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-hidden="true"
|
||||||
|
width="1em"
|
||||||
|
height="1em"
|
||||||
|
class="themeToggle-svgIndicator"
|
||||||
|
fill="currentColor"
|
||||||
|
viewBox="0 0 32 32"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M16 .5C7.4.5.5 7.4.5 16S7.4 31.5 16 31.5 31.5 24.6 31.5 16 24.6.5
|
||||||
|
16 .5zm0 28.1V3.4C23 3.4 28.6 9 28.6 16S23 28.6 16 28.6z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
`.trim(),
|
||||||
|
);
|
||||||
|
|
||||||
|
$d(document.body)
|
||||||
|
.app(
|
||||||
|
$d
|
||||||
|
.c("figure")
|
||||||
|
.app($d.c("figcaption").t("Source"))
|
||||||
|
.app(preDom),
|
||||||
|
)
|
||||||
|
.app(themeToggleButton);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
165
dist/fluent-dom-esm.js
vendored
Normal file
165
dist/fluent-dom-esm.js
vendored
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
// @license magnet:?xt=urn:btih:723febf9f6185544f57f0660a41489c7d6b4931b&dn=wtfpl.txt
|
||||||
|
const version = "1.1.0";
|
||||||
|
const isFluentDomObject = (value) => !!value.fluentDom;
|
||||||
|
const isHTMLElement = (value) => !!value.nodeType;
|
||||||
|
const isNumber = (value) => typeof value === "number";
|
||||||
|
const isString = (value) => typeof value === "string";
|
||||||
|
/**
|
||||||
|
* fluent-dom-esm v1.1.0
|
||||||
|
*
|
||||||
|
* Fluent DOM Manipulation, adapted to ESM and cranked up to v1.1(.0).
|
||||||
|
*
|
||||||
|
* https://git.itsericwoodward.com/eric/fluent-dom-esm
|
||||||
|
*
|
||||||
|
* v1.1.0 Copyright (c) 2025 Eric Woodward
|
||||||
|
* Original copyright (c) 2009 Tommy Montgomery (https://glacius.tmont.com/articles/fluent-dom-manipulation-in-javascript)
|
||||||
|
*
|
||||||
|
* Released under the WTFPL (Do What the Fuck You Want to Public License)
|
||||||
|
*
|
||||||
|
* @author Eric Woodward (v1.1.0 update)
|
||||||
|
* @author Tommy Montgomery (original)
|
||||||
|
* @license http://sam.zoy.org/wtfpl/
|
||||||
|
*/
|
||||||
|
const fluentDomEsm = (function() {
|
||||||
|
const FluentDom = function(node) {
|
||||||
|
return new FluentDomInternal(node);
|
||||||
|
};
|
||||||
|
FluentDom.create = FluentDom.c = function(tagName) {
|
||||||
|
const f = new FluentDomInternal();
|
||||||
|
f.create(tagName);
|
||||||
|
return f;
|
||||||
|
};
|
||||||
|
const FluentDomInternal = function(node) {
|
||||||
|
let root = node || null;
|
||||||
|
this.fluentDom = version;
|
||||||
|
this.a = this.attr = function(name, value) {
|
||||||
|
if (!root || value && !root.setAttribute) {
|
||||||
|
throw new Error("Cannot set an attribute on a non-element");
|
||||||
|
}
|
||||||
|
if (!value) return root.getAttribute(name);
|
||||||
|
root.setAttribute(name, value);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
this.app = this.append = function(value) {
|
||||||
|
if (!root || !root?.appendChild) {
|
||||||
|
throw new Error("Cannot append to a non-element");
|
||||||
|
}
|
||||||
|
const type = typeof value;
|
||||||
|
if (type === "object") {
|
||||||
|
if (isFluentDomObject(value)) {
|
||||||
|
const domVal = value.toDom();
|
||||||
|
if (domVal !== null) root.appendChild(domVal);
|
||||||
|
} else if (isHTMLElement(value)) {
|
||||||
|
root.appendChild(value);
|
||||||
|
} else {
|
||||||
|
throw new Error(
|
||||||
|
"Invalid argument: not an HTMLElement or FluentDom object"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else if (isNumber(value) || isString(value)) {
|
||||||
|
root.appendChild(document.createTextNode(`${value}`));
|
||||||
|
} else {
|
||||||
|
throw new Error(
|
||||||
|
`Invalid argument: not a valid type (${typeof value})`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
this.c = this.create = function(tagName) {
|
||||||
|
root = document.createElement(tagName);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
this.className = this.cls = function(value) {
|
||||||
|
return this.attr("class", value);
|
||||||
|
};
|
||||||
|
this.clear = function() {
|
||||||
|
root = null;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
this.h = this.href = function(link) {
|
||||||
|
return this.attr("href", link);
|
||||||
|
};
|
||||||
|
this.html = function(content) {
|
||||||
|
if (!root) {
|
||||||
|
throw new Error(
|
||||||
|
"Cannot get or set innerHTML for a non-element"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!content) return root.innerHTML;
|
||||||
|
root.innerHTML = content;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
this.id = function(value) {
|
||||||
|
return this.attr("id", value);
|
||||||
|
};
|
||||||
|
this.l = this.listen = function(...props) {
|
||||||
|
if (!root || !root.addEventListener) {
|
||||||
|
throw new Error("Cannot addEventListener to a non-element");
|
||||||
|
}
|
||||||
|
root.addEventListener(...props);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
this.ohtml = function(content) {
|
||||||
|
if (!root) {
|
||||||
|
throw new Error(
|
||||||
|
"Cannot get or set outerHTML for a non-element"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!content) return root.outerHTML;
|
||||||
|
root.outerHTML = content;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
this.s = this.style = function(prop, value) {
|
||||||
|
if (!root) {
|
||||||
|
throw new Error("Cannot get or set style for a non-element");
|
||||||
|
}
|
||||||
|
if (typeof prop === "undefined") return root.style;
|
||||||
|
if (typeof value !== "undefined") {
|
||||||
|
root.style[prop] = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (typeof prop === "string") return root.style[prop];
|
||||||
|
if (typeof prop !== "object") {
|
||||||
|
throw new Error(
|
||||||
|
`Invalid argument: "prop" must be string or object (found ${typeof prop})`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Object.keys(prop).forEach((key) => {
|
||||||
|
root.style[key] = prop[key];
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
this.t = this.text = function(text) {
|
||||||
|
if (!root) {
|
||||||
|
throw new Error(
|
||||||
|
"Cannot get or set innerText for a non-element"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (typeof text === "undefined") return root.innerText;
|
||||||
|
return this.append(text);
|
||||||
|
};
|
||||||
|
this.title = function(value) {
|
||||||
|
if (!root) {
|
||||||
|
throw new Error(
|
||||||
|
"Cannot get or set outerHTML for a non-element"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return this.attr("title", value);
|
||||||
|
};
|
||||||
|
this.toDom = function() {
|
||||||
|
return root;
|
||||||
|
};
|
||||||
|
this.unlisten = function(...props) {
|
||||||
|
if (!root || !root.removeEventListener) {
|
||||||
|
throw new Error("Cannot removeEventListener on a non-element");
|
||||||
|
}
|
||||||
|
root.removeEventListener(...props);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return FluentDom;
|
||||||
|
})();
|
||||||
|
export {
|
||||||
|
fluentDomEsm as default
|
||||||
|
};
|
||||||
|
// @license-end
|
35
dist/package.json.d.ts
vendored
Normal file
35
dist/package.json.d.ts
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
declare const _default: {
|
||||||
|
"name": "fluent-dom-esm",
|
||||||
|
"version": "1.1.0",
|
||||||
|
"description": "",
|
||||||
|
"license": "WTFPL",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"import": "./dist/fluent-dom-esm.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "module",
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"module": "./dist/fluent-dom-esm.js",
|
||||||
|
"scripts": {
|
||||||
|
"add-license": "cat ./src/license-begin.txt ./dist/fluent-dom-esm.js ./src/license-end.txt > .temp && mv .temp ./dist/fluent-dom-esm.js",
|
||||||
|
"build": "tsc && vite build && yarn add-license",
|
||||||
|
"ci": "yarn build",
|
||||||
|
"dev": "vite",
|
||||||
|
"preview": "vite preview",
|
||||||
|
"prepublishOnly": "yarn build",
|
||||||
|
"postpublish": "git push && git push --tags",
|
||||||
|
"test": "echo 'No tests yet!'"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"prettier": "^3.6.2",
|
||||||
|
"typescript": "^5.9.2",
|
||||||
|
"unplugin-dts": "1.0.0-beta.6",
|
||||||
|
"vite": "^7.1.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
export default _default;
|
28
dist/src/fluent-dom-esm.d.ts
vendored
Normal file
28
dist/src/fluent-dom-esm.d.ts
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* fluent-dom-esm v1.1.0
|
||||||
|
*
|
||||||
|
* Fluent DOM Manipulation, adapted to ESM and cranked up to v1.1(.0).
|
||||||
|
*
|
||||||
|
* https://git.itsericwoodward.com/eric/fluent-dom-esm
|
||||||
|
*
|
||||||
|
* v1.1.0 Copyright (c) 2025 Eric Woodward
|
||||||
|
* Original copyright (c) 2009 Tommy Montgomery (https://glacius.tmont.com/articles/fluent-dom-manipulation-in-javascript)
|
||||||
|
*
|
||||||
|
* Released under the WTFPL (Do What the Fuck You Want to Public License)
|
||||||
|
*
|
||||||
|
* @author Eric Woodward (v1.1.0 update)
|
||||||
|
* @author Tommy Montgomery (original)
|
||||||
|
* @license http://sam.zoy.org/wtfpl/
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* IIFE that creates the FluentDomObject as default export
|
||||||
|
*/
|
||||||
|
declare const _default: {
|
||||||
|
(node: HTMLElement): any;
|
||||||
|
/**
|
||||||
|
* Creates a new HTML element which is wrapped in a FluentDomObject and returned
|
||||||
|
*/
|
||||||
|
create: (tagName: string) => any;
|
||||||
|
c(tagName: string): any;
|
||||||
|
};
|
||||||
|
export default _default;
|
5
dist/src/fluent-dom-esm.type-guards.d.ts
vendored
Normal file
5
dist/src/fluent-dom-esm.type-guards.d.ts
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { FluentDomObject } from './fluent-dom-esm.types';
|
||||||
|
export declare const isFluentDomObject: (value: any) => value is FluentDomObject;
|
||||||
|
export declare const isHTMLElement: (value: any) => value is HTMLElement;
|
||||||
|
export declare const isNumber: (value: any) => value is number;
|
||||||
|
export declare const isString: (value: any) => value is string;
|
27
dist/src/fluent-dom-esm.types.d.ts
vendored
Normal file
27
dist/src/fluent-dom-esm.types.d.ts
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
export interface FluentDomObject {
|
||||||
|
fluentDom: string;
|
||||||
|
a: (name: string, value?: string) => FluentDomObject | string | null;
|
||||||
|
app: (obj: FluentDomObject | HTMLElement | string) => FluentDomObject;
|
||||||
|
append: (obj: FluentDomObject | HTMLElement | string) => FluentDomObject;
|
||||||
|
attr: (name: string, value?: string) => FluentDomObject | string | null;
|
||||||
|
c: (tagName: string) => FluentDomObject;
|
||||||
|
create: (tagName: string) => FluentDomObject;
|
||||||
|
className: (className?: string) => FluentDomObject | string | null;
|
||||||
|
clear: () => FluentDomObject;
|
||||||
|
cls: (className?: string) => FluentDomObject | string | null;
|
||||||
|
clr: () => FluentDomObject;
|
||||||
|
h: (url?: string) => FluentDomObject | string | null;
|
||||||
|
href: (url?: string) => FluentDomObject | string | null;
|
||||||
|
html: (content?: string) => string | FluentDomObject;
|
||||||
|
id: (id?: string) => FluentDomObject | string | null;
|
||||||
|
l: (type: keyof HTMLElementEventMap, listener: () => {}, optionsOrUseCapture?: boolean | object) => FluentDomObject;
|
||||||
|
listen: (type: keyof HTMLElementEventMap, listener: () => {}, optionsOrUseCapture?: boolean | object) => FluentDomObject;
|
||||||
|
ohtml: (content?: string) => string | FluentDomObject;
|
||||||
|
s: (prop?: CSSStyleDeclaration | string, value?: string) => FluentDomObject | CSSStyleDeclaration | string | undefined;
|
||||||
|
style: (prop?: CSSStyleDeclaration | string, value?: string) => FluentDomObject | CSSStyleDeclaration | string | undefined;
|
||||||
|
t: (text?: string) => FluentDomObject | string;
|
||||||
|
text: (text?: string) => FluentDomObject | string;
|
||||||
|
title: (title?: string) => FluentDomObject | string | null;
|
||||||
|
toDom: () => HTMLElement | null;
|
||||||
|
unlisten: (type: keyof HTMLElementEventMap, listener: () => {}, optionsOrUseCapture?: boolean | object) => FluentDomObject;
|
||||||
|
}
|
140
dist/styles/main.css
vendored
Normal file
140
dist/styles/main.css
vendored
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
* {
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--main-light: #4f9a97;
|
||||||
|
--main-dark: #1a2737;
|
||||||
|
|
||||||
|
--gray-light: #eee;
|
||||||
|
--gray-bg-60: rgba(10, 10, 10, .6);
|
||||||
|
--gray-bg-80: rgba(10, 10, 10, .8);
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: var(--main-dark);
|
||||||
|
color: var(--main-light);
|
||||||
|
font-size: 18px;
|
||||||
|
transition: color .5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
figcaption {
|
||||||
|
border-bottom: 1px dashed var(--main-light);
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: -1rem -1rem 1rem -1rem;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
background-color: var(--gray-bg-60);
|
||||||
|
border: 1px solid var(--main-light);
|
||||||
|
color: #285559;
|
||||||
|
margin: 1rem;
|
||||||
|
padding: 1rem;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-cmd {
|
||||||
|
color: #347c7a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-dom {
|
||||||
|
color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-func {
|
||||||
|
color: #db7c17;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-str {
|
||||||
|
color: #c43a19;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-var {
|
||||||
|
color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.themeToggle-button {
|
||||||
|
background-color: #5d27a1;
|
||||||
|
border: 1px solid var(--gray-light);
|
||||||
|
border-radius: 1rem;
|
||||||
|
color: var(--gray-light);
|
||||||
|
display: flex;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
padding: .5rem;
|
||||||
|
position: absolute;
|
||||||
|
right: 1rem;
|
||||||
|
top: 1rem;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
.themeToggle-svgIndicator {
|
||||||
|
rotate: 180deg;
|
||||||
|
transition: rotate .5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
body.invertedTheme {
|
||||||
|
background-color: var(--main-light);
|
||||||
|
color: var(--main-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme figcaption {
|
||||||
|
border-color: var(--main-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme figure {
|
||||||
|
background-color: var(--gray-bg-80);
|
||||||
|
border-color: var(--main-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme .themeToggle-svgIndicator {
|
||||||
|
rotate: 0deg;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: light) {
|
||||||
|
body {
|
||||||
|
background-color: var(--main-light);
|
||||||
|
color: var(--main-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
background-color: var(--gray-bg-80);
|
||||||
|
border-color: var(--main-dark);
|
||||||
|
color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.themeToggle-svgIndicator {
|
||||||
|
rotate: 0deg;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme {
|
||||||
|
background-color: var(--main-dark);
|
||||||
|
color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme figcaption {
|
||||||
|
border-color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme figure {
|
||||||
|
background-color: var(--gray-bg-60);
|
||||||
|
border-color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme .themeToggle-svgIndicator {
|
||||||
|
rotate: 180deg;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
170
index.html
Normal file
170
index.html
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>fluent-dom-esm Demo</title>
|
||||||
|
<link rel="stylesheet" href="/styles/main.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<script type="module">
|
||||||
|
import $d from "/src/fluent-dom-esm.ts";
|
||||||
|
|
||||||
|
const $article = $d
|
||||||
|
.c("article")
|
||||||
|
.id("fde-article")
|
||||||
|
.cls("cool-article")
|
||||||
|
.app($d.c("h1").cls("cool-heading").t("fluent-dom-esm"))
|
||||||
|
.app(
|
||||||
|
$d
|
||||||
|
.c("p")
|
||||||
|
.s("background-color", "#db7c17")
|
||||||
|
.s("color", "var(--main-dark)")
|
||||||
|
.t("Why is it so cool?"),
|
||||||
|
);
|
||||||
|
|
||||||
|
const $ul = $d.c("ul").id("fluentDom-example-list");
|
||||||
|
|
||||||
|
[
|
||||||
|
"Remarkably simple syntax",
|
||||||
|
"Surprisingly powerful features",
|
||||||
|
"Easy to use and remember",
|
||||||
|
].forEach((reason, idx) => {
|
||||||
|
$ul.app(
|
||||||
|
$d
|
||||||
|
.c("li")
|
||||||
|
.id(`fluentDom-example-list-item${idx + 1}`)
|
||||||
|
.t(reason),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
$d(document.body).app(
|
||||||
|
$article
|
||||||
|
.app($ul)
|
||||||
|
.app(
|
||||||
|
$d.c("em").t("Try it today!").style("color", "#c43a19"),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
import $d from "/src/fluent-dom-esm.ts";
|
||||||
|
|
||||||
|
const preDom = $d
|
||||||
|
.c("pre")
|
||||||
|
.t(
|
||||||
|
`
|
||||||
|
\<script type="module">
|
||||||
|
import $d from "/src/fluent-dom-esm.ts";
|
||||||
|
|
||||||
|
const $article = $d
|
||||||
|
.c("article")
|
||||||
|
.id("fde-article")
|
||||||
|
.cls("cool-article")
|
||||||
|
.app($d.c("h1").cls("cool-heading").t("fluent-dom-esm"))
|
||||||
|
.app(
|
||||||
|
$d
|
||||||
|
.c("p")
|
||||||
|
.s("background-color", "#db7c17")
|
||||||
|
.s("color", "var(--main-dark)")
|
||||||
|
.t("Why is it so cool?"),
|
||||||
|
);
|
||||||
|
|
||||||
|
const $ul = $d.c("ul").id("fluentDom-example-list");
|
||||||
|
|
||||||
|
[
|
||||||
|
"Remarkably simple syntax",
|
||||||
|
"Surprisingly powerful features",
|
||||||
|
"Easy to use and remember",
|
||||||
|
].forEach((reason, idx) => {
|
||||||
|
$ul.app(
|
||||||
|
$d
|
||||||
|
.c("li")
|
||||||
|
.id(\`fluentDom-example-list-item$\{idx + 1}\`)
|
||||||
|
.t(reason),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
$d(document.body).app(
|
||||||
|
$article
|
||||||
|
.app($ul)
|
||||||
|
.app(
|
||||||
|
$d.c("em").t("Try it today!").style("color", "#c43a19"),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
<\/script>
|
||||||
|
`
|
||||||
|
.trim()
|
||||||
|
.split("\n")
|
||||||
|
.map((val) => {
|
||||||
|
return val.replace(" ", "");
|
||||||
|
})
|
||||||
|
.join("\n"),
|
||||||
|
)
|
||||||
|
.toDom();
|
||||||
|
|
||||||
|
preDom.innerHTML = preDom.innerHTML
|
||||||
|
// strRegEx must be applied first to prevent false positives
|
||||||
|
.replace(/\"[^"]+\"/g, (val) =>
|
||||||
|
val !== '"module"'
|
||||||
|
? `<span class="code-str">${val}</span>`
|
||||||
|
: val,
|
||||||
|
)
|
||||||
|
.replace(
|
||||||
|
/\`[^`]+\`/g,
|
||||||
|
(val) => `<span class="code-str">${val}</span>`,
|
||||||
|
)
|
||||||
|
.replace(/\.\w+/g, (val) =>
|
||||||
|
val !== ".ts"
|
||||||
|
? `<span class="code-func">${val}</span>`
|
||||||
|
: val,
|
||||||
|
)
|
||||||
|
.replace(/(\$\w+)/g, '<span class="code-dom">$1</span>')
|
||||||
|
.replace("document", '<span class="code-var">document</span>')
|
||||||
|
.replaceAll("reason", '<span class="code-var">reason</span>')
|
||||||
|
.replace("idx", '<span class="code-var">idx</span>')
|
||||||
|
.replace(
|
||||||
|
/<\/?script[^&]*>/g,
|
||||||
|
(val) => `<span class="code-cmd">${val}</span>`,
|
||||||
|
);
|
||||||
|
|
||||||
|
const themeToggleButton = $d
|
||||||
|
.c("button")
|
||||||
|
.cls("themeToggle-button")
|
||||||
|
.id("themeToggle-button")
|
||||||
|
// .t("☀︎ / ☾")
|
||||||
|
.listen("click", () => {
|
||||||
|
document.body.classList.toggle("invertedTheme");
|
||||||
|
})
|
||||||
|
.html(
|
||||||
|
`
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-hidden="true"
|
||||||
|
width="1em"
|
||||||
|
height="1em"
|
||||||
|
class="themeToggle-svgIndicator"
|
||||||
|
fill="currentColor"
|
||||||
|
viewBox="0 0 32 32"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M16 .5C7.4.5.5 7.4.5 16S7.4 31.5 16 31.5 31.5 24.6 31.5 16 24.6.5
|
||||||
|
16 .5zm0 28.1V3.4C23 3.4 28.6 9 28.6 16S23 28.6 16 28.6z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
`.trim(),
|
||||||
|
);
|
||||||
|
|
||||||
|
$d(document.body)
|
||||||
|
.app(
|
||||||
|
$d
|
||||||
|
.c("figure")
|
||||||
|
.app($d.c("figcaption").t("Source"))
|
||||||
|
.app(preDom),
|
||||||
|
)
|
||||||
|
.app(themeToggleButton);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
32
package.json
Normal file
32
package.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "fluent-dom-esm",
|
||||||
|
"version": "1.1.0",
|
||||||
|
"description": "",
|
||||||
|
"license": "WTFPL",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"import": "./dist/fluent-dom-esm.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "module",
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"module": "./dist/fluent-dom-esm.js",
|
||||||
|
"scripts": {
|
||||||
|
"add-license": "cat ./src/license-begin.txt ./dist/fluent-dom-esm.js ./src/license-end.txt > .temp && mv .temp ./dist/fluent-dom-esm.js",
|
||||||
|
"build": "tsc && vite build && yarn add-license",
|
||||||
|
"ci": "yarn build",
|
||||||
|
"dev": "vite",
|
||||||
|
"preview": "vite preview",
|
||||||
|
"prepublishOnly": "yarn build",
|
||||||
|
"postpublish": "git push && git push --tags",
|
||||||
|
"test": "echo 'No tests yet!'"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"prettier": "^3.6.2",
|
||||||
|
"typescript": "^5.9.2",
|
||||||
|
"unplugin-dts": "1.0.0-beta.6",
|
||||||
|
"vite": "^7.1.4"
|
||||||
|
}
|
||||||
|
}
|
170
public/demo.html
Normal file
170
public/demo.html
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>fluent-dom-esm Demo</title>
|
||||||
|
<link rel="stylesheet" href="/styles/main.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<script type="module">
|
||||||
|
import $d from "/fluent-dom-esm.js";
|
||||||
|
|
||||||
|
const $article = $d
|
||||||
|
.c("article")
|
||||||
|
.id("fde-article")
|
||||||
|
.cls("cool-article")
|
||||||
|
.app($d.c("h1").cls("cool-heading").t("fluent-dom-esm"))
|
||||||
|
.app(
|
||||||
|
$d
|
||||||
|
.c("p")
|
||||||
|
.s("background-color", "#db7c17")
|
||||||
|
.s("color", "var(--main-dark)")
|
||||||
|
.t("Why is it so cool?"),
|
||||||
|
);
|
||||||
|
|
||||||
|
const $ul = $d.c("ul").id("fluentDom-example-list");
|
||||||
|
|
||||||
|
[
|
||||||
|
"Remarkably simple syntax",
|
||||||
|
"Surprisingly powerful features",
|
||||||
|
"Easy to use and remember",
|
||||||
|
].forEach((reason, idx) => {
|
||||||
|
$ul.app(
|
||||||
|
$d
|
||||||
|
.c("li")
|
||||||
|
.id(`fluentDom-example-list-item${idx + 1}`)
|
||||||
|
.t(reason),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
$d(document.body).app(
|
||||||
|
$article
|
||||||
|
.app($ul)
|
||||||
|
.app(
|
||||||
|
$d.c("em").t("Try it today!").style("color", "#c43a19"),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
import $d from "/fluent-dom-esm.js";
|
||||||
|
|
||||||
|
const preDom = $d
|
||||||
|
.c("pre")
|
||||||
|
.t(
|
||||||
|
`
|
||||||
|
\<script type="module">
|
||||||
|
import $d from "/src/fluent-dom-esm.ts";
|
||||||
|
|
||||||
|
const $article = $d
|
||||||
|
.c("article")
|
||||||
|
.id("fde-article")
|
||||||
|
.cls("cool-article")
|
||||||
|
.app($d.c("h1").cls("cool-heading").t("fluent-dom-esm"))
|
||||||
|
.app(
|
||||||
|
$d
|
||||||
|
.c("p")
|
||||||
|
.s("background-color", "#db7c17")
|
||||||
|
.s("color", "var(--main-dark)")
|
||||||
|
.t("Why is it so cool?"),
|
||||||
|
);
|
||||||
|
|
||||||
|
const $ul = $d.c("ul").id("fluentDom-example-list");
|
||||||
|
|
||||||
|
[
|
||||||
|
"Remarkably simple syntax",
|
||||||
|
"Surprisingly powerful features",
|
||||||
|
"Easy to use and remember",
|
||||||
|
].forEach((reason, idx) => {
|
||||||
|
$ul.app(
|
||||||
|
$d
|
||||||
|
.c("li")
|
||||||
|
.id(\`fluentDom-example-list-item$\{idx + 1}\`)
|
||||||
|
.t(reason),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
$d(document.body).app(
|
||||||
|
$article
|
||||||
|
.app($ul)
|
||||||
|
.app(
|
||||||
|
$d.c("em").t("Try it today!").style("color", "#c43a19"),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
<\/script>
|
||||||
|
`
|
||||||
|
.trim()
|
||||||
|
.split("\n")
|
||||||
|
.map((val) => {
|
||||||
|
return val.replace(" ", "");
|
||||||
|
})
|
||||||
|
.join("\n"),
|
||||||
|
)
|
||||||
|
.toDom();
|
||||||
|
|
||||||
|
preDom.innerHTML = preDom.innerHTML
|
||||||
|
// strRegEx must be applied first to prevent false positives
|
||||||
|
.replace(/\"[^"]+\"/g, (val) =>
|
||||||
|
val !== '"module"'
|
||||||
|
? `<span class="code-str">${val}</span>`
|
||||||
|
: val,
|
||||||
|
)
|
||||||
|
.replace(
|
||||||
|
/\`[^`]+\`/g,
|
||||||
|
(val) => `<span class="code-str">${val}</span>`,
|
||||||
|
)
|
||||||
|
.replace(/\.\w+/g, (val) =>
|
||||||
|
val !== ".ts"
|
||||||
|
? `<span class="code-func">${val}</span>`
|
||||||
|
: val,
|
||||||
|
)
|
||||||
|
.replace(/(\$\w+)/g, '<span class="code-dom">$1</span>')
|
||||||
|
.replace("document", '<span class="code-var">document</span>')
|
||||||
|
.replaceAll("reason", '<span class="code-var">reason</span>')
|
||||||
|
.replace("idx", '<span class="code-var">idx</span>')
|
||||||
|
.replace(
|
||||||
|
/<\/?script[^&]*>/g,
|
||||||
|
(val) => `<span class="code-cmd">${val}</span>`,
|
||||||
|
);
|
||||||
|
|
||||||
|
const themeToggleButton = $d
|
||||||
|
.c("button")
|
||||||
|
.cls("themeToggle-button")
|
||||||
|
.id("themeToggle-button")
|
||||||
|
// .t("☀︎ / ☾")
|
||||||
|
.listen("click", () => {
|
||||||
|
document.body.classList.toggle("invertedTheme");
|
||||||
|
})
|
||||||
|
.html(
|
||||||
|
`
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
aria-hidden="true"
|
||||||
|
width="1em"
|
||||||
|
height="1em"
|
||||||
|
class="themeToggle-svgIndicator"
|
||||||
|
fill="currentColor"
|
||||||
|
viewBox="0 0 32 32"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M16 .5C7.4.5.5 7.4.5 16S7.4 31.5 16 31.5 31.5 24.6 31.5 16 24.6.5
|
||||||
|
16 .5zm0 28.1V3.4C23 3.4 28.6 9 28.6 16S23 28.6 16 28.6z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
`.trim(),
|
||||||
|
);
|
||||||
|
|
||||||
|
$d(document.body)
|
||||||
|
.app(
|
||||||
|
$d
|
||||||
|
.c("figure")
|
||||||
|
.app($d.c("figcaption").t("Source"))
|
||||||
|
.app(preDom),
|
||||||
|
)
|
||||||
|
.app(themeToggleButton);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
140
public/styles/main.css
Normal file
140
public/styles/main.css
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
* {
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--main-light: #4f9a97;
|
||||||
|
--main-dark: #1a2737;
|
||||||
|
|
||||||
|
--gray-light: #eee;
|
||||||
|
--gray-bg-60: rgba(10, 10, 10, .6);
|
||||||
|
--gray-bg-80: rgba(10, 10, 10, .8);
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: var(--main-dark);
|
||||||
|
color: var(--main-light);
|
||||||
|
font-size: 18px;
|
||||||
|
transition: color .5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
figcaption {
|
||||||
|
border-bottom: 1px dashed var(--main-light);
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: -1rem -1rem 1rem -1rem;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
background-color: var(--gray-bg-60);
|
||||||
|
border: 1px solid var(--main-light);
|
||||||
|
color: #285559;
|
||||||
|
margin: 1rem;
|
||||||
|
padding: 1rem;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-cmd {
|
||||||
|
color: #347c7a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-dom {
|
||||||
|
color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-func {
|
||||||
|
color: #db7c17;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-str {
|
||||||
|
color: #c43a19;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-var {
|
||||||
|
color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.themeToggle-button {
|
||||||
|
background-color: #5d27a1;
|
||||||
|
border: 1px solid var(--gray-light);
|
||||||
|
border-radius: 1rem;
|
||||||
|
color: var(--gray-light);
|
||||||
|
display: flex;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
padding: .5rem;
|
||||||
|
position: absolute;
|
||||||
|
right: 1rem;
|
||||||
|
top: 1rem;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
.themeToggle-svgIndicator {
|
||||||
|
rotate: 180deg;
|
||||||
|
transition: rotate .5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
body.invertedTheme {
|
||||||
|
background-color: var(--main-light);
|
||||||
|
color: var(--main-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme figcaption {
|
||||||
|
border-color: var(--main-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme figure {
|
||||||
|
background-color: var(--gray-bg-80);
|
||||||
|
border-color: var(--main-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme .themeToggle-svgIndicator {
|
||||||
|
rotate: 0deg;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: light) {
|
||||||
|
body {
|
||||||
|
background-color: var(--main-light);
|
||||||
|
color: var(--main-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
background-color: var(--gray-bg-80);
|
||||||
|
border-color: var(--main-dark);
|
||||||
|
color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.themeToggle-svgIndicator {
|
||||||
|
rotate: 0deg;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme {
|
||||||
|
background-color: var(--main-dark);
|
||||||
|
color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme figcaption {
|
||||||
|
border-color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme figure {
|
||||||
|
background-color: var(--gray-bg-60);
|
||||||
|
border-color: var(--main-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.invertedTheme .themeToggle-svgIndicator {
|
||||||
|
rotate: 180deg;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
264
src/fluent-dom-esm.ts
Normal file
264
src/fluent-dom-esm.ts
Normal file
@@ -0,0 +1,264 @@
|
|||||||
|
/**
|
||||||
|
* fluent-dom-esm v1.1.0
|
||||||
|
*
|
||||||
|
* Fluent DOM Manipulation, adapted to ESM and cranked up to v1.1(.0).
|
||||||
|
*
|
||||||
|
* https://git.itsericwoodward.com/eric/fluent-dom-esm
|
||||||
|
*
|
||||||
|
* v1.1.0 Copyright (c) 2025 Eric Woodward
|
||||||
|
* Original copyright (c) 2009 Tommy Montgomery (https://glacius.tmont.com/articles/fluent-dom-manipulation-in-javascript)
|
||||||
|
*
|
||||||
|
* Released under the WTFPL (Do What the Fuck You Want to Public License)
|
||||||
|
*
|
||||||
|
* @author Eric Woodward (v1.1.0 update)
|
||||||
|
* @author Tommy Montgomery (original)
|
||||||
|
* @license http://sam.zoy.org/wtfpl/
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type { FluentDomObject } from "./fluent-dom-esm.types";
|
||||||
|
|
||||||
|
import { version } from "../package.json";
|
||||||
|
import {
|
||||||
|
isFluentDomObject,
|
||||||
|
isHTMLElement,
|
||||||
|
isNumber,
|
||||||
|
isString,
|
||||||
|
} from "./fluent-dom-esm.type-guards";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IIFE that creates the FluentDomObject as default export
|
||||||
|
*/
|
||||||
|
export default (function () {
|
||||||
|
/**
|
||||||
|
* Wraps provided element in a FluentDomObject which is then returned
|
||||||
|
*/
|
||||||
|
const FluentDom = function (node: HTMLElement) {
|
||||||
|
return new (FluentDomInternal as any)(node);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new HTML element which is wrapped in a FluentDomObject and returned
|
||||||
|
*/
|
||||||
|
FluentDom.create = FluentDom.c = function (tagName: string) {
|
||||||
|
const f = new (FluentDomInternal as any)();
|
||||||
|
f.create(tagName);
|
||||||
|
return f;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The internal representation of the FluentDomObject
|
||||||
|
*/
|
||||||
|
const FluentDomInternal = function (
|
||||||
|
this: FluentDomObject,
|
||||||
|
node?: HTMLElement,
|
||||||
|
) {
|
||||||
|
let root = node || null;
|
||||||
|
|
||||||
|
// adds several new features
|
||||||
|
this.fluentDom = version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets or sets the named attribute on the wrapped HTMLElement
|
||||||
|
*/
|
||||||
|
this.a = this.attr = function (name, value) {
|
||||||
|
if (!root || (value && !root.setAttribute)) {
|
||||||
|
throw new Error("Cannot set an attribute on a non-element");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!value) return root.getAttribute(name);
|
||||||
|
|
||||||
|
root.setAttribute(name, value);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends value to wrapped HTMLElement
|
||||||
|
*/
|
||||||
|
this.app = this.append = function (value) {
|
||||||
|
if (!root || !root?.appendChild) {
|
||||||
|
throw new Error("Cannot append to a non-element");
|
||||||
|
}
|
||||||
|
|
||||||
|
const type = typeof value;
|
||||||
|
if (type === "object") {
|
||||||
|
if (isFluentDomObject(value)) {
|
||||||
|
const domVal = value.toDom();
|
||||||
|
if (domVal !== null) root.appendChild(domVal);
|
||||||
|
} else if (isHTMLElement(value)) {
|
||||||
|
root.appendChild(value);
|
||||||
|
} else {
|
||||||
|
throw new Error(
|
||||||
|
"Invalid argument: not an HTMLElement or FluentDom object",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else if (isNumber(value) || isString(value)) {
|
||||||
|
root.appendChild(document.createTextNode(`${value}`));
|
||||||
|
} else {
|
||||||
|
throw new Error(
|
||||||
|
`Invalid argument: not a valid type (${typeof value})`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new wrapped HTMLElement of the indicated tag
|
||||||
|
*/
|
||||||
|
this.c = this.create = function (tagName) {
|
||||||
|
root = document.createElement(tagName);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets or sets the "class" attribute on the wrapped HTMLElement
|
||||||
|
*/
|
||||||
|
this.className = this.cls = function (value) {
|
||||||
|
return this.attr("class", value);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the wrapped HTMLElement to null
|
||||||
|
*/
|
||||||
|
this.clear = function () {
|
||||||
|
root = null;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets or sets the "href" attribute on the wrapped HTMLElement
|
||||||
|
*/
|
||||||
|
this.h = this.href = function (link) {
|
||||||
|
return this.attr("href", link);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets or sets the wrapped HTMLElement's "innerHTML" property
|
||||||
|
*/
|
||||||
|
this.html = function (content) {
|
||||||
|
if (!root) {
|
||||||
|
throw new Error(
|
||||||
|
"Cannot get or set innerHTML for a non-element",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!content) return root.innerHTML;
|
||||||
|
|
||||||
|
root.innerHTML = content;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets or sets the "id" attribute on the wrapped HTMLElement
|
||||||
|
*/
|
||||||
|
this.id = function (value) {
|
||||||
|
return this.attr("id", value);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Passes props to the "addEventListener" function on the wrapped HTMLElement
|
||||||
|
*/
|
||||||
|
this.l = this.listen = function (...props) {
|
||||||
|
if (!root || !root.addEventListener) {
|
||||||
|
throw new Error("Cannot addEventListener to a non-element");
|
||||||
|
}
|
||||||
|
|
||||||
|
root.addEventListener(...props);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets or sets the wrapped HTMLElement's "outerHTML" property
|
||||||
|
*/
|
||||||
|
this.ohtml = function (content) {
|
||||||
|
if (!root) {
|
||||||
|
throw new Error(
|
||||||
|
"Cannot get or set outerHTML for a non-element",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!content) return root.outerHTML;
|
||||||
|
|
||||||
|
root.outerHTML = content;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets or sets a one or more style attributes on the wrapped HTMLElement
|
||||||
|
*/
|
||||||
|
this.s = this.style = function (prop, value) {
|
||||||
|
if (!root) {
|
||||||
|
throw new Error("Cannot get or set style for a non-element");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof prop === "undefined") return root.style;
|
||||||
|
|
||||||
|
if (typeof value !== "undefined") {
|
||||||
|
root.style[prop as any] = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof prop === "string") return root.style[prop as any];
|
||||||
|
|
||||||
|
if (typeof prop !== "object") {
|
||||||
|
throw new Error(
|
||||||
|
`Invalid argument: "prop" must be string or object (found ${typeof prop})`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.keys(prop).forEach((key) => {
|
||||||
|
(root as HTMLElement).style[key as any] = prop[key as any];
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets or sets the wrapped HTMLElement's "innerText" property
|
||||||
|
*/
|
||||||
|
this.t = this.text = function (text) {
|
||||||
|
if (!root) {
|
||||||
|
throw new Error(
|
||||||
|
"Cannot get or set innerText for a non-element",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof text === "undefined") return root.innerText;
|
||||||
|
|
||||||
|
return this.append(text);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets or sets the "title" attribute on the wrapped HTMLElement
|
||||||
|
*/
|
||||||
|
this.title = function (value) {
|
||||||
|
if (!root) {
|
||||||
|
throw new Error(
|
||||||
|
"Cannot get or set outerHTML for a non-element",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.attr("title", value);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the wrapped HTMLElement itself
|
||||||
|
*/
|
||||||
|
this.toDom = function () {
|
||||||
|
return root;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Passes props to the "removeEventListener" function on the wrapped HTMLElement
|
||||||
|
*/
|
||||||
|
this.unlisten = function (...props) {
|
||||||
|
if (!root || !root.removeEventListener) {
|
||||||
|
throw new Error("Cannot removeEventListener on a non-element");
|
||||||
|
}
|
||||||
|
|
||||||
|
root.removeEventListener(...props);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return FluentDom;
|
||||||
|
})();
|
13
src/fluent-dom-esm.type-guards.ts
Normal file
13
src/fluent-dom-esm.type-guards.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import type { FluentDomObject } from "./fluent-dom-esm.types";
|
||||||
|
|
||||||
|
export const isFluentDomObject = (value: any): value is FluentDomObject =>
|
||||||
|
!!value.fluentDom;
|
||||||
|
|
||||||
|
export const isHTMLElement = (value: any): value is HTMLElement =>
|
||||||
|
!!value.nodeType;
|
||||||
|
|
||||||
|
export const isNumber = (value: any): value is number =>
|
||||||
|
typeof value === "number";
|
||||||
|
|
||||||
|
export const isString = (value: any): value is string =>
|
||||||
|
typeof value === "string";
|
46
src/fluent-dom-esm.types.ts
Normal file
46
src/fluent-dom-esm.types.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
export interface FluentDomObject {
|
||||||
|
fluentDom: string;
|
||||||
|
|
||||||
|
a: (name: string, value?: string) => FluentDomObject | string | null;
|
||||||
|
app: (obj: FluentDomObject | HTMLElement | string) => FluentDomObject;
|
||||||
|
append: (obj: FluentDomObject | HTMLElement | string) => FluentDomObject;
|
||||||
|
attr: (name: string, value?: string) => FluentDomObject | string | null;
|
||||||
|
c: (tagName: string) => FluentDomObject;
|
||||||
|
create: (tagName: string) => FluentDomObject;
|
||||||
|
className: (className?: string) => FluentDomObject | string | null;
|
||||||
|
clear: () => FluentDomObject;
|
||||||
|
cls: (className?: string) => FluentDomObject | string | null;
|
||||||
|
clr: () => FluentDomObject;
|
||||||
|
h: (url?: string) => FluentDomObject | string | null;
|
||||||
|
href: (url?: string) => FluentDomObject | string | null;
|
||||||
|
html: (content?: string) => string | FluentDomObject;
|
||||||
|
id: (id?: string) => FluentDomObject | string | null;
|
||||||
|
l: (
|
||||||
|
type: keyof HTMLElementEventMap,
|
||||||
|
listener: () => {},
|
||||||
|
optionsOrUseCapture?: boolean | object,
|
||||||
|
) => FluentDomObject;
|
||||||
|
listen: (
|
||||||
|
type: keyof HTMLElementEventMap,
|
||||||
|
listener: () => {},
|
||||||
|
optionsOrUseCapture?: boolean | object,
|
||||||
|
) => FluentDomObject;
|
||||||
|
ohtml: (content?: string) => string | FluentDomObject;
|
||||||
|
s: (
|
||||||
|
prop?: CSSStyleDeclaration | string,
|
||||||
|
value?: string,
|
||||||
|
) => FluentDomObject | CSSStyleDeclaration | string | undefined;
|
||||||
|
style: (
|
||||||
|
prop?: CSSStyleDeclaration | string,
|
||||||
|
value?: string,
|
||||||
|
) => FluentDomObject | CSSStyleDeclaration | string | undefined;
|
||||||
|
t: (text?: string) => FluentDomObject | string;
|
||||||
|
text: (text?: string) => FluentDomObject | string;
|
||||||
|
title: (title?: string) => FluentDomObject | string | null;
|
||||||
|
toDom: () => HTMLElement | null;
|
||||||
|
unlisten: (
|
||||||
|
type: keyof HTMLElementEventMap,
|
||||||
|
listener: () => {},
|
||||||
|
optionsOrUseCapture?: boolean | object,
|
||||||
|
) => FluentDomObject;
|
||||||
|
}
|
1
src/license-begin.txt
Normal file
1
src/license-begin.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// @license magnet:?xt=urn:btih:723febf9f6185544f57f0660a41489c7d6b4931b&dn=wtfpl.txt
|
1
src/license-end.txt
Normal file
1
src/license-end.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// @license-end
|
24
tsconfig.json
Normal file
24
tsconfig.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2022",
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
"module": "ESNext",
|
||||||
|
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
||||||
|
"skipLibCheck": true,
|
||||||
|
|
||||||
|
/* Bundler mode */
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
|
"verbatimModuleSyntax": true,
|
||||||
|
"moduleDetection": "force",
|
||||||
|
"noEmit": true,
|
||||||
|
|
||||||
|
/* Linting */
|
||||||
|
"strict": true,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noUnusedParameters": true,
|
||||||
|
"erasableSyntaxOnly": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"noUncheckedSideEffectImports": true
|
||||||
|
},
|
||||||
|
}
|
27
vite.config.js
Normal file
27
vite.config.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import dts from 'unplugin-dts/vite'
|
||||||
|
import { dirname, resolve } from 'node:path'
|
||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
import { defineConfig } from 'vite';
|
||||||
|
|
||||||
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [dts()],
|
||||||
|
build: {
|
||||||
|
lib: {
|
||||||
|
entry: resolve(__dirname, 'src/fluent-dom-esm.ts'),
|
||||||
|
name: 'fluent-dom-esm',
|
||||||
|
fileName: 'fluent-dom-esm',
|
||||||
|
formats: ['es']
|
||||||
|
},
|
||||||
|
minify: false,
|
||||||
|
rollupOptions: {
|
||||||
|
output: {
|
||||||
|
banner: '/* my-library version banner */',
|
||||||
|
footer: '/* follow me on Twitter! @rich_harris footer */',
|
||||||
|
intro: '/* my-library version intro*/',
|
||||||
|
outro: '/* follow me on Twitter! @rich_harris outro */',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
585
yarn.lock
Normal file
585
yarn.lock
Normal file
@@ -0,0 +1,585 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@esbuild/aix-ppc64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz#bef96351f16520055c947aba28802eede3c9e9a9"
|
||||||
|
integrity sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==
|
||||||
|
|
||||||
|
"@esbuild/android-arm64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz#d2e70be7d51a529425422091e0dcb90374c1546c"
|
||||||
|
integrity sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==
|
||||||
|
|
||||||
|
"@esbuild/android-arm@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.9.tgz#d2a753fe2a4c73b79437d0ba1480e2d760097419"
|
||||||
|
integrity sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==
|
||||||
|
|
||||||
|
"@esbuild/android-x64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.9.tgz#5278836e3c7ae75761626962f902a0d55352e683"
|
||||||
|
integrity sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==
|
||||||
|
|
||||||
|
"@esbuild/darwin-arm64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz#f1513eaf9ec8fa15dcaf4c341b0f005d3e8b47ae"
|
||||||
|
integrity sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==
|
||||||
|
|
||||||
|
"@esbuild/darwin-x64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz#e27dbc3b507b3a1cea3b9280a04b8b6b725f82be"
|
||||||
|
integrity sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==
|
||||||
|
|
||||||
|
"@esbuild/freebsd-arm64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz#364e3e5b7a1fd45d92be08c6cc5d890ca75908ca"
|
||||||
|
integrity sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==
|
||||||
|
|
||||||
|
"@esbuild/freebsd-x64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz#7c869b45faeb3df668e19ace07335a0711ec56ab"
|
||||||
|
integrity sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==
|
||||||
|
|
||||||
|
"@esbuild/linux-arm64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz#48d42861758c940b61abea43ba9a29b186d6cb8b"
|
||||||
|
integrity sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==
|
||||||
|
|
||||||
|
"@esbuild/linux-arm@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz#6ce4b9cabf148274101701d112b89dc67cc52f37"
|
||||||
|
integrity sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==
|
||||||
|
|
||||||
|
"@esbuild/linux-ia32@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz#207e54899b79cac9c26c323fc1caa32e3143f1c4"
|
||||||
|
integrity sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==
|
||||||
|
|
||||||
|
"@esbuild/linux-loong64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz#0ba48a127159a8f6abb5827f21198b999ffd1fc0"
|
||||||
|
integrity sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==
|
||||||
|
|
||||||
|
"@esbuild/linux-mips64el@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz#a4d4cc693d185f66a6afde94f772b38ce5d64eb5"
|
||||||
|
integrity sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==
|
||||||
|
|
||||||
|
"@esbuild/linux-ppc64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz#0f5805c1c6d6435a1dafdc043cb07a19050357db"
|
||||||
|
integrity sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==
|
||||||
|
|
||||||
|
"@esbuild/linux-riscv64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz#6776edece0f8fca79f3386398b5183ff2a827547"
|
||||||
|
integrity sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==
|
||||||
|
|
||||||
|
"@esbuild/linux-s390x@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz#3f6f29ef036938447c2218d309dc875225861830"
|
||||||
|
integrity sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==
|
||||||
|
|
||||||
|
"@esbuild/linux-x64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz#831fe0b0e1a80a8b8391224ea2377d5520e1527f"
|
||||||
|
integrity sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==
|
||||||
|
|
||||||
|
"@esbuild/netbsd-arm64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz#06f99d7eebe035fbbe43de01c9d7e98d2a0aa548"
|
||||||
|
integrity sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==
|
||||||
|
|
||||||
|
"@esbuild/netbsd-x64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz#db99858e6bed6e73911f92a88e4edd3a8c429a52"
|
||||||
|
integrity sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==
|
||||||
|
|
||||||
|
"@esbuild/openbsd-arm64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz#afb886c867e36f9d86bb21e878e1185f5d5a0935"
|
||||||
|
integrity sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==
|
||||||
|
|
||||||
|
"@esbuild/openbsd-x64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz#30855c9f8381fac6a0ef5b5f31ac6e7108a66ecf"
|
||||||
|
integrity sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==
|
||||||
|
|
||||||
|
"@esbuild/openharmony-arm64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz#2f2144af31e67adc2a8e3705c20c2bd97bd88314"
|
||||||
|
integrity sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==
|
||||||
|
|
||||||
|
"@esbuild/sunos-x64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz#69b99a9b5bd226c9eb9c6a73f990fddd497d732e"
|
||||||
|
integrity sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==
|
||||||
|
|
||||||
|
"@esbuild/win32-arm64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz#d789330a712af916c88325f4ffe465f885719c6b"
|
||||||
|
integrity sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==
|
||||||
|
|
||||||
|
"@esbuild/win32-ia32@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz#52fc735406bd49688253e74e4e837ac2ba0789e3"
|
||||||
|
integrity sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==
|
||||||
|
|
||||||
|
"@esbuild/win32-x64@0.25.9":
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz#585624dc829cfb6e7c0aa6c3ca7d7e6daa87e34f"
|
||||||
|
integrity sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==
|
||||||
|
|
||||||
|
"@jridgewell/gen-mapping@^0.3.5":
|
||||||
|
version "0.3.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
|
||||||
|
integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/sourcemap-codec" "^1.5.0"
|
||||||
|
"@jridgewell/trace-mapping" "^0.3.24"
|
||||||
|
|
||||||
|
"@jridgewell/remapping@^2.3.5":
|
||||||
|
version "2.3.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1"
|
||||||
|
integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/gen-mapping" "^0.3.5"
|
||||||
|
"@jridgewell/trace-mapping" "^0.3.24"
|
||||||
|
|
||||||
|
"@jridgewell/resolve-uri@^3.1.0":
|
||||||
|
version "3.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
|
||||||
|
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
|
||||||
|
|
||||||
|
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5":
|
||||||
|
version "1.5.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
|
||||||
|
integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
|
||||||
|
|
||||||
|
"@jridgewell/trace-mapping@^0.3.24":
|
||||||
|
version "0.3.30"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz#4a76c4daeee5df09f5d3940e087442fb36ce2b99"
|
||||||
|
integrity sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/resolve-uri" "^3.1.0"
|
||||||
|
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||||
|
|
||||||
|
"@rollup/pluginutils@^5.1.4":
|
||||||
|
version "5.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz#57ba1b0cbda8e7a3c597a4853c807b156e21a7b4"
|
||||||
|
integrity sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==
|
||||||
|
dependencies:
|
||||||
|
"@types/estree" "^1.0.0"
|
||||||
|
estree-walker "^2.0.2"
|
||||||
|
picomatch "^4.0.2"
|
||||||
|
|
||||||
|
"@rollup/rollup-android-arm-eabi@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.0.tgz#939c1be9625d428d8513e4ab60d406fe8db23718"
|
||||||
|
integrity sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==
|
||||||
|
|
||||||
|
"@rollup/rollup-android-arm64@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.0.tgz#b74005775903f7a8f4e363d2840c1dcef3776ff3"
|
||||||
|
integrity sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==
|
||||||
|
|
||||||
|
"@rollup/rollup-darwin-arm64@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.0.tgz#8c04603cdcf1ec0cd6b27152b3827e49295f2962"
|
||||||
|
integrity sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==
|
||||||
|
|
||||||
|
"@rollup/rollup-darwin-x64@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.0.tgz#19ec976f1cc663def2692cd7ffb32981f2b0b733"
|
||||||
|
integrity sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==
|
||||||
|
|
||||||
|
"@rollup/rollup-freebsd-arm64@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.0.tgz#a96b4ad8346229f6fcbd9d57f1c53040b037c2da"
|
||||||
|
integrity sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ==
|
||||||
|
|
||||||
|
"@rollup/rollup-freebsd-x64@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.0.tgz#fa565a282bc57967ee6668607b181678bdd74e4a"
|
||||||
|
integrity sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-arm-gnueabihf@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.0.tgz#dfc88f7295e1f98d77f25296be787e8a5d6ced75"
|
||||||
|
integrity sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-arm-musleabihf@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.0.tgz#32cd70c87455ca031f0361090cf17da5a2ef66d5"
|
||||||
|
integrity sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-arm64-gnu@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.0.tgz#0e7e1fe7241e3384f6c6b4ccdbcfa8ad8c78b869"
|
||||||
|
integrity sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-arm64-musl@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.0.tgz#5d421f2f3e4a84786c4dfd9ce97e595c9b59e7f4"
|
||||||
|
integrity sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-loongarch64-gnu@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.0.tgz#a0fb5c7d0e88319e18acfd9436f19ee39354b027"
|
||||||
|
integrity sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-ppc64-gnu@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.0.tgz#a65b598af12f25210c3295da551a6e3616ea488d"
|
||||||
|
integrity sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-riscv64-gnu@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.0.tgz#10ba776214ae2857c5bf4389690dabb2fbaf7d98"
|
||||||
|
integrity sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-riscv64-musl@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.0.tgz#c2a46cbaa329d5f21e5808f5a66bb9c78cf68aac"
|
||||||
|
integrity sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-s390x-gnu@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.0.tgz#a07447be069d64462e30c66611be20c4513963ed"
|
||||||
|
integrity sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-x64-gnu@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.0.tgz#8887c58bd51242754ae9c56947d6e883332dcc74"
|
||||||
|
integrity sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==
|
||||||
|
|
||||||
|
"@rollup/rollup-linux-x64-musl@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.0.tgz#6403fda72a2b3b9fbbeeff93d14f1c45ef9775f3"
|
||||||
|
integrity sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==
|
||||||
|
|
||||||
|
"@rollup/rollup-openharmony-arm64@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.0.tgz#52809afccaff47e731b965a0c16e5686be819d5f"
|
||||||
|
integrity sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==
|
||||||
|
|
||||||
|
"@rollup/rollup-win32-arm64-msvc@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.0.tgz#23fe00ddbb40b27a3889bc1e99e6310d97353ad5"
|
||||||
|
integrity sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg==
|
||||||
|
|
||||||
|
"@rollup/rollup-win32-ia32-msvc@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.0.tgz#520b588076b593413d919912d69dfd5728a1f305"
|
||||||
|
integrity sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==
|
||||||
|
|
||||||
|
"@rollup/rollup-win32-x64-msvc@4.50.0":
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.0.tgz#d81efe6a12060c7feddf9805e2a94c3ab0679f48"
|
||||||
|
integrity sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==
|
||||||
|
|
||||||
|
"@types/estree@1.0.8", "@types/estree@^1.0.0":
|
||||||
|
version "1.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
|
||||||
|
integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
|
||||||
|
|
||||||
|
"@volar/language-core@2.4.23":
|
||||||
|
version "2.4.23"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.4.23.tgz#deb6dbc5fdbafa9bb7ba691fc59cb196cdb856d3"
|
||||||
|
integrity sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==
|
||||||
|
dependencies:
|
||||||
|
"@volar/source-map" "2.4.23"
|
||||||
|
|
||||||
|
"@volar/source-map@2.4.23":
|
||||||
|
version "2.4.23"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.4.23.tgz#d476e11a3a669d89858a5eb38b02342be39b0e44"
|
||||||
|
integrity sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==
|
||||||
|
|
||||||
|
"@volar/typescript@^2.4.17":
|
||||||
|
version "2.4.23"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.4.23.tgz#b9b114ea01ad0ad977139edda0239fdafdb21ad7"
|
||||||
|
integrity sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==
|
||||||
|
dependencies:
|
||||||
|
"@volar/language-core" "2.4.23"
|
||||||
|
path-browserify "^1.0.1"
|
||||||
|
vscode-uri "^3.0.8"
|
||||||
|
|
||||||
|
acorn@^8.15.0:
|
||||||
|
version "8.15.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
|
||||||
|
integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
|
||||||
|
|
||||||
|
compare-versions@^6.1.1:
|
||||||
|
version "6.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9"
|
||||||
|
integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==
|
||||||
|
|
||||||
|
confbox@^0.1.8:
|
||||||
|
version "0.1.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06"
|
||||||
|
integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==
|
||||||
|
|
||||||
|
confbox@^0.2.2:
|
||||||
|
version "0.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.2.tgz#8652f53961c74d9e081784beed78555974a9c110"
|
||||||
|
integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==
|
||||||
|
|
||||||
|
debug@^4.4.0:
|
||||||
|
version "4.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
|
||||||
|
integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==
|
||||||
|
dependencies:
|
||||||
|
ms "^2.1.3"
|
||||||
|
|
||||||
|
esbuild@^0.25.0:
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.9.tgz#15ab8e39ae6cdc64c24ff8a2c0aef5b3fd9fa976"
|
||||||
|
integrity sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==
|
||||||
|
optionalDependencies:
|
||||||
|
"@esbuild/aix-ppc64" "0.25.9"
|
||||||
|
"@esbuild/android-arm" "0.25.9"
|
||||||
|
"@esbuild/android-arm64" "0.25.9"
|
||||||
|
"@esbuild/android-x64" "0.25.9"
|
||||||
|
"@esbuild/darwin-arm64" "0.25.9"
|
||||||
|
"@esbuild/darwin-x64" "0.25.9"
|
||||||
|
"@esbuild/freebsd-arm64" "0.25.9"
|
||||||
|
"@esbuild/freebsd-x64" "0.25.9"
|
||||||
|
"@esbuild/linux-arm" "0.25.9"
|
||||||
|
"@esbuild/linux-arm64" "0.25.9"
|
||||||
|
"@esbuild/linux-ia32" "0.25.9"
|
||||||
|
"@esbuild/linux-loong64" "0.25.9"
|
||||||
|
"@esbuild/linux-mips64el" "0.25.9"
|
||||||
|
"@esbuild/linux-ppc64" "0.25.9"
|
||||||
|
"@esbuild/linux-riscv64" "0.25.9"
|
||||||
|
"@esbuild/linux-s390x" "0.25.9"
|
||||||
|
"@esbuild/linux-x64" "0.25.9"
|
||||||
|
"@esbuild/netbsd-arm64" "0.25.9"
|
||||||
|
"@esbuild/netbsd-x64" "0.25.9"
|
||||||
|
"@esbuild/openbsd-arm64" "0.25.9"
|
||||||
|
"@esbuild/openbsd-x64" "0.25.9"
|
||||||
|
"@esbuild/openharmony-arm64" "0.25.9"
|
||||||
|
"@esbuild/sunos-x64" "0.25.9"
|
||||||
|
"@esbuild/win32-arm64" "0.25.9"
|
||||||
|
"@esbuild/win32-ia32" "0.25.9"
|
||||||
|
"@esbuild/win32-x64" "0.25.9"
|
||||||
|
|
||||||
|
estree-walker@^2.0.2:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
|
||||||
|
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
|
||||||
|
|
||||||
|
exsolve@^1.0.7:
|
||||||
|
version "1.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.7.tgz#3b74e4c7ca5c5f9a19c3626ca857309fa99f9e9e"
|
||||||
|
integrity sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==
|
||||||
|
|
||||||
|
fdir@^6.5.0:
|
||||||
|
version "6.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350"
|
||||||
|
integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
|
||||||
|
|
||||||
|
fsevents@~2.3.2, fsevents@~2.3.3:
|
||||||
|
version "2.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
||||||
|
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||||
|
|
||||||
|
kolorist@^1.8.0:
|
||||||
|
version "1.8.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c"
|
||||||
|
integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==
|
||||||
|
|
||||||
|
local-pkg@^1.1.1:
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.1.2.tgz#c03d208787126445303f8161619dc701afa4abb5"
|
||||||
|
integrity sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==
|
||||||
|
dependencies:
|
||||||
|
mlly "^1.7.4"
|
||||||
|
pkg-types "^2.3.0"
|
||||||
|
quansync "^0.2.11"
|
||||||
|
|
||||||
|
magic-string@^0.30.17:
|
||||||
|
version "0.30.18"
|
||||||
|
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.18.tgz#905bfbbc6aa5692703a93db26a9edcaa0007d2bb"
|
||||||
|
integrity sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/sourcemap-codec" "^1.5.5"
|
||||||
|
|
||||||
|
mlly@^1.7.4:
|
||||||
|
version "1.8.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.8.0.tgz#e074612b938af8eba1eaf43299cbc89cb72d824e"
|
||||||
|
integrity sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==
|
||||||
|
dependencies:
|
||||||
|
acorn "^8.15.0"
|
||||||
|
pathe "^2.0.3"
|
||||||
|
pkg-types "^1.3.1"
|
||||||
|
ufo "^1.6.1"
|
||||||
|
|
||||||
|
ms@^2.1.3:
|
||||||
|
version "2.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||||
|
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||||
|
|
||||||
|
nanoid@^3.3.11:
|
||||||
|
version "3.3.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
|
||||||
|
integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
|
||||||
|
|
||||||
|
path-browserify@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
|
||||||
|
integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
|
||||||
|
|
||||||
|
pathe@^2.0.1, pathe@^2.0.3:
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716"
|
||||||
|
integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==
|
||||||
|
|
||||||
|
picocolors@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||||
|
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||||
|
|
||||||
|
picomatch@^4.0.2, picomatch@^4.0.3:
|
||||||
|
version "4.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
|
||||||
|
integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
|
||||||
|
|
||||||
|
pkg-types@^1.3.1:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df"
|
||||||
|
integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==
|
||||||
|
dependencies:
|
||||||
|
confbox "^0.1.8"
|
||||||
|
mlly "^1.7.4"
|
||||||
|
pathe "^2.0.1"
|
||||||
|
|
||||||
|
pkg-types@^2.3.0:
|
||||||
|
version "2.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.3.0.tgz#037f2c19bd5402966ff6810e32706558cb5b5726"
|
||||||
|
integrity sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==
|
||||||
|
dependencies:
|
||||||
|
confbox "^0.2.2"
|
||||||
|
exsolve "^1.0.7"
|
||||||
|
pathe "^2.0.3"
|
||||||
|
|
||||||
|
postcss@^8.5.6:
|
||||||
|
version "8.5.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
|
||||||
|
integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
|
||||||
|
dependencies:
|
||||||
|
nanoid "^3.3.11"
|
||||||
|
picocolors "^1.1.1"
|
||||||
|
source-map-js "^1.2.1"
|
||||||
|
|
||||||
|
prettier@^3.6.2:
|
||||||
|
version "3.6.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393"
|
||||||
|
integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==
|
||||||
|
|
||||||
|
quansync@^0.2.11:
|
||||||
|
version "0.2.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/quansync/-/quansync-0.2.11.tgz#f9c3adda2e1272e4f8cf3f1457b04cbdb4ee692a"
|
||||||
|
integrity sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==
|
||||||
|
|
||||||
|
rollup@^4.43.0:
|
||||||
|
version "4.50.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.50.0.tgz#6f237f598b7163ede33ce827af8534c929aaa186"
|
||||||
|
integrity sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==
|
||||||
|
dependencies:
|
||||||
|
"@types/estree" "1.0.8"
|
||||||
|
optionalDependencies:
|
||||||
|
"@rollup/rollup-android-arm-eabi" "4.50.0"
|
||||||
|
"@rollup/rollup-android-arm64" "4.50.0"
|
||||||
|
"@rollup/rollup-darwin-arm64" "4.50.0"
|
||||||
|
"@rollup/rollup-darwin-x64" "4.50.0"
|
||||||
|
"@rollup/rollup-freebsd-arm64" "4.50.0"
|
||||||
|
"@rollup/rollup-freebsd-x64" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-arm-gnueabihf" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-arm-musleabihf" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-arm64-gnu" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-arm64-musl" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-loongarch64-gnu" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-ppc64-gnu" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-riscv64-gnu" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-riscv64-musl" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-s390x-gnu" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-x64-gnu" "4.50.0"
|
||||||
|
"@rollup/rollup-linux-x64-musl" "4.50.0"
|
||||||
|
"@rollup/rollup-openharmony-arm64" "4.50.0"
|
||||||
|
"@rollup/rollup-win32-arm64-msvc" "4.50.0"
|
||||||
|
"@rollup/rollup-win32-ia32-msvc" "4.50.0"
|
||||||
|
"@rollup/rollup-win32-x64-msvc" "4.50.0"
|
||||||
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
|
source-map-js@^1.2.1:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
|
||||||
|
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
|
||||||
|
|
||||||
|
tinyglobby@^0.2.14:
|
||||||
|
version "0.2.15"
|
||||||
|
resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2"
|
||||||
|
integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==
|
||||||
|
dependencies:
|
||||||
|
fdir "^6.5.0"
|
||||||
|
picomatch "^4.0.3"
|
||||||
|
|
||||||
|
typescript@^5.9.2:
|
||||||
|
version "5.9.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6"
|
||||||
|
integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==
|
||||||
|
|
||||||
|
ufo@^1.6.1:
|
||||||
|
version "1.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b"
|
||||||
|
integrity sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==
|
||||||
|
|
||||||
|
unplugin-dts@1.0.0-beta.6:
|
||||||
|
version "1.0.0-beta.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/unplugin-dts/-/unplugin-dts-1.0.0-beta.6.tgz#a40589970e3c862f59ac082f0163d96aa47d8be6"
|
||||||
|
integrity sha512-+xbFv5aVFtLZFNBAKI4+kXmd2h+T42/AaP8Bsp0YP/je/uOTN94Ame2Xt3e9isZS+Z7/hrLCLbsVJh+saqFMfQ==
|
||||||
|
dependencies:
|
||||||
|
"@rollup/pluginutils" "^5.1.4"
|
||||||
|
"@volar/typescript" "^2.4.17"
|
||||||
|
compare-versions "^6.1.1"
|
||||||
|
debug "^4.4.0"
|
||||||
|
kolorist "^1.8.0"
|
||||||
|
local-pkg "^1.1.1"
|
||||||
|
magic-string "^0.30.17"
|
||||||
|
unplugin "^2.3.2"
|
||||||
|
|
||||||
|
unplugin@^2.3.2:
|
||||||
|
version "2.3.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-2.3.10.tgz#15e75fec9384743335be7e54e5c88b5c187a3e94"
|
||||||
|
integrity sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/remapping" "^2.3.5"
|
||||||
|
acorn "^8.15.0"
|
||||||
|
picomatch "^4.0.3"
|
||||||
|
webpack-virtual-modules "^0.6.2"
|
||||||
|
|
||||||
|
vite@^7.1.4:
|
||||||
|
version "7.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.4.tgz#354944affb55e1aff0157406b74e0d0a3232df9a"
|
||||||
|
integrity sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw==
|
||||||
|
dependencies:
|
||||||
|
esbuild "^0.25.0"
|
||||||
|
fdir "^6.5.0"
|
||||||
|
picomatch "^4.0.3"
|
||||||
|
postcss "^8.5.6"
|
||||||
|
rollup "^4.43.0"
|
||||||
|
tinyglobby "^0.2.14"
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents "~2.3.3"
|
||||||
|
|
||||||
|
vscode-uri@^3.0.8:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.1.0.tgz#dd09ec5a66a38b5c3fffc774015713496d14e09c"
|
||||||
|
integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==
|
||||||
|
|
||||||
|
webpack-virtual-modules@^0.6.2:
|
||||||
|
version "0.6.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8"
|
||||||
|
integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==
|
Reference in New Issue
Block a user