tiny-essentials 1.16.0 → 1.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1468,6 +1468,475 @@ class TinyHtml {
1468
1468
  return TinyHtml.cssFloats(this, prop);
1469
1469
  }
1470
1470
  //////////////////////////////////////////////////////////////////////
1471
+ /**
1472
+ * Stores camelCase to kebab-case CSS property aliases.
1473
+ *
1474
+ * Used to normalize property names when interacting with `element.style` or `getComputedStyle`.
1475
+ *
1476
+ * ⚠️ This object should not be modified directly. Use `TinyHtml.cssPropAliases` instead to ensure reverse mappings stay in sync.
1477
+ *
1478
+ * Example of how to add a new alias:
1479
+ *
1480
+ * ```js
1481
+ * TinyHtml.cssPropAliases.tinyPudding = 'tiny-pudding';
1482
+ * ```
1483
+ *
1484
+ * This will automatically update `TinyHtml.cssPropRevAliases['tiny-pudding']` with `'tinyPudding'`.
1485
+ *
1486
+ * @type {Record<string | symbol, string>}
1487
+ */
1488
+ static #cssPropAliases = {
1489
+ alignContent: 'align-content',
1490
+ alignItems: 'align-items',
1491
+ alignSelf: 'align-self',
1492
+ animationDelay: 'animation-delay',
1493
+ animationDirection: 'animation-direction',
1494
+ animationDuration: 'animation-duration',
1495
+ animationFillMode: 'animation-fill-mode',
1496
+ animationIterationCount: 'animation-iteration-count',
1497
+ animationName: 'animation-name',
1498
+ animationPlayState: 'animation-play-state',
1499
+ animationTimingFunction: 'animation-timing-function',
1500
+ backfaceVisibility: 'backface-visibility',
1501
+ backgroundAttachment: 'background-attachment',
1502
+ backgroundBlendMode: 'background-blend-mode',
1503
+ backgroundClip: 'background-clip',
1504
+ backgroundColor: 'background-color',
1505
+ backgroundImage: 'background-image',
1506
+ backgroundOrigin: 'background-origin',
1507
+ backgroundPosition: 'background-position',
1508
+ backgroundRepeat: 'background-repeat',
1509
+ backgroundSize: 'background-size',
1510
+ borderBottom: 'border-bottom',
1511
+ borderBottomColor: 'border-bottom-color',
1512
+ borderBottomLeftRadius: 'border-bottom-left-radius',
1513
+ borderBottomRightRadius: 'border-bottom-right-radius',
1514
+ borderBottomStyle: 'border-bottom-style',
1515
+ borderBottomWidth: 'border-bottom-width',
1516
+ borderCollapse: 'border-collapse',
1517
+ borderColor: 'border-color',
1518
+ borderImage: 'border-image',
1519
+ borderImageOutset: 'border-image-outset',
1520
+ borderImageRepeat: 'border-image-repeat',
1521
+ borderImageSlice: 'border-image-slice',
1522
+ borderImageSource: 'border-image-source',
1523
+ borderImageWidth: 'border-image-width',
1524
+ borderLeft: 'border-left',
1525
+ borderLeftColor: 'border-left-color',
1526
+ borderLeftStyle: 'border-left-style',
1527
+ borderLeftWidth: 'border-left-width',
1528
+ borderRadius: 'border-radius',
1529
+ borderRight: 'border-right',
1530
+ borderRightColor: 'border-right-color',
1531
+ borderRightStyle: 'border-right-style',
1532
+ borderRightWidth: 'border-right-width',
1533
+ borderSpacing: 'border-spacing',
1534
+ borderStyle: 'border-style',
1535
+ borderTop: 'border-top',
1536
+ borderTopColor: 'border-top-color',
1537
+ borderTopLeftRadius: 'border-top-left-radius',
1538
+ borderTopRightRadius: 'border-top-right-radius',
1539
+ borderTopStyle: 'border-top-style',
1540
+ borderTopWidth: 'border-top-width',
1541
+ borderWidth: 'border-width',
1542
+ boxDecorationBreak: 'box-decoration-break',
1543
+ boxShadow: 'box-shadow',
1544
+ boxSizing: 'box-sizing',
1545
+ breakAfter: 'break-after',
1546
+ breakBefore: 'break-before',
1547
+ breakInside: 'break-inside',
1548
+ captionSide: 'caption-side',
1549
+ caretColor: 'caret-color',
1550
+ clipPath: 'clip-path',
1551
+ columnCount: 'column-count',
1552
+ columnFill: 'column-fill',
1553
+ columnGap: 'column-gap',
1554
+ columnRule: 'column-rule',
1555
+ columnRuleColor: 'column-rule-color',
1556
+ columnRuleStyle: 'column-rule-style',
1557
+ columnRuleWidth: 'column-rule-width',
1558
+ columnSpan: 'column-span',
1559
+ columnWidth: 'column-width',
1560
+ counterIncrement: 'counter-increment',
1561
+ counterReset: 'counter-reset',
1562
+ emptyCells: 'empty-cells',
1563
+ flexBasis: 'flex-basis',
1564
+ flexDirection: 'flex-direction',
1565
+ flexFlow: 'flex-flow',
1566
+ flexGrow: 'flex-grow',
1567
+ flexShrink: 'flex-shrink',
1568
+ flexWrap: 'flex-wrap',
1569
+ fontFamily: 'font-family',
1570
+ fontFeatureSettings: 'font-feature-settings',
1571
+ fontKerning: 'font-kerning',
1572
+ fontLanguageOverride: 'font-language-override',
1573
+ fontSize: 'font-size',
1574
+ fontSizeAdjust: 'font-size-adjust',
1575
+ fontStretch: 'font-stretch',
1576
+ fontStyle: 'font-style',
1577
+ fontSynthesis: 'font-synthesis',
1578
+ fontVariant: 'font-variant',
1579
+ fontVariantAlternates: 'font-variant-alternates',
1580
+ fontVariantCaps: 'font-variant-caps',
1581
+ fontVariantEastAsian: 'font-variant-east-asian',
1582
+ fontVariantLigatures: 'font-variant-ligatures',
1583
+ fontVariantNumeric: 'font-variant-numeric',
1584
+ fontVariantPosition: 'font-variant-position',
1585
+ fontWeight: 'font-weight',
1586
+ gridArea: 'grid-area',
1587
+ gridAutoColumns: 'grid-auto-columns',
1588
+ gridAutoFlow: 'grid-auto-flow',
1589
+ gridAutoRows: 'grid-auto-rows',
1590
+ gridColumn: 'grid-column',
1591
+ gridColumnEnd: 'grid-column-end',
1592
+ gridColumnGap: 'grid-column-gap',
1593
+ gridColumnStart: 'grid-column-start',
1594
+ gridGap: 'grid-gap',
1595
+ gridRow: 'grid-row',
1596
+ gridRowEnd: 'grid-row-end',
1597
+ gridRowGap: 'grid-row-gap',
1598
+ gridRowStart: 'grid-row-start',
1599
+ gridTemplate: 'grid-template',
1600
+ gridTemplateAreas: 'grid-template-areas',
1601
+ gridTemplateColumns: 'grid-template-columns',
1602
+ gridTemplateRows: 'grid-template-rows',
1603
+ imageRendering: 'image-rendering',
1604
+ justifyContent: 'justify-content',
1605
+ letterSpacing: 'letter-spacing',
1606
+ lineBreak: 'line-break',
1607
+ lineHeight: 'line-height',
1608
+ listStyle: 'list-style',
1609
+ listStyleImage: 'list-style-image',
1610
+ listStylePosition: 'list-style-position',
1611
+ listStyleType: 'list-style-type',
1612
+ marginBottom: 'margin-bottom',
1613
+ marginLeft: 'margin-left',
1614
+ marginRight: 'margin-right',
1615
+ marginTop: 'margin-top',
1616
+ maskClip: 'mask-clip',
1617
+ maskComposite: 'mask-composite',
1618
+ maskImage: 'mask-image',
1619
+ maskMode: 'mask-mode',
1620
+ maskOrigin: 'mask-origin',
1621
+ maskPosition: 'mask-position',
1622
+ maskRepeat: 'mask-repeat',
1623
+ maskSize: 'mask-size',
1624
+ maskType: 'mask-type',
1625
+ maxHeight: 'max-height',
1626
+ maxWidth: 'max-width',
1627
+ minHeight: 'min-height',
1628
+ minWidth: 'min-width',
1629
+ mixBlendMode: 'mix-blend-mode',
1630
+ objectFit: 'object-fit',
1631
+ objectPosition: 'object-position',
1632
+ offsetAnchor: 'offset-anchor',
1633
+ offsetDistance: 'offset-distance',
1634
+ offsetPath: 'offset-path',
1635
+ offsetRotate: 'offset-rotate',
1636
+ outlineColor: 'outline-color',
1637
+ outlineOffset: 'outline-offset',
1638
+ outlineStyle: 'outline-style',
1639
+ outlineWidth: 'outline-width',
1640
+ overflowAnchor: 'overflow-anchor',
1641
+ overflowWrap: 'overflow-wrap',
1642
+ overflowX: 'overflow-x',
1643
+ overflowY: 'overflow-y',
1644
+ paddingBottom: 'padding-bottom',
1645
+ paddingLeft: 'padding-left',
1646
+ paddingRight: 'padding-right',
1647
+ paddingTop: 'padding-top',
1648
+ pageBreakAfter: 'page-break-after',
1649
+ pageBreakBefore: 'page-break-before',
1650
+ pageBreakInside: 'page-break-inside',
1651
+ perspectiveOrigin: 'perspective-origin',
1652
+ placeContent: 'place-content',
1653
+ placeItems: 'place-items',
1654
+ placeSelf: 'place-self',
1655
+ pointerEvents: 'pointer-events',
1656
+ rowGap: 'row-gap',
1657
+ scrollBehavior: 'scroll-behavior',
1658
+ scrollMargin: 'scroll-margin',
1659
+ scrollMarginBlock: 'scroll-margin-block',
1660
+ scrollMarginBlockEnd: 'scroll-margin-block-end',
1661
+ scrollMarginBlockStart: 'scroll-margin-block-start',
1662
+ scrollMarginBottom: 'scroll-margin-bottom',
1663
+ scrollMarginInline: 'scroll-margin-inline',
1664
+ scrollMarginInlineEnd: 'scroll-margin-inline-end',
1665
+ scrollMarginInlineStart: 'scroll-margin-inline-start',
1666
+ scrollMarginLeft: 'scroll-margin-left',
1667
+ scrollMarginRight: 'scroll-margin-right',
1668
+ scrollMarginTop: 'scroll-margin-top',
1669
+ scrollPadding: 'scroll-padding',
1670
+ scrollPaddingBlock: 'scroll-padding-block',
1671
+ scrollPaddingBlockEnd: 'scroll-padding-block-end',
1672
+ scrollPaddingBlockStart: 'scroll-padding-block-start',
1673
+ scrollPaddingBottom: 'scroll-padding-bottom',
1674
+ scrollPaddingInline: 'scroll-padding-inline',
1675
+ scrollPaddingInlineEnd: 'scroll-padding-inline-end',
1676
+ scrollPaddingInlineStart: 'scroll-padding-inline-start',
1677
+ scrollPaddingLeft: 'scroll-padding-left',
1678
+ scrollPaddingRight: 'scroll-padding-right',
1679
+ scrollPaddingTop: 'scroll-padding-top',
1680
+ scrollSnapAlign: 'scroll-snap-align',
1681
+ scrollSnapStop: 'scroll-snap-stop',
1682
+ scrollSnapType: 'scroll-snap-type',
1683
+ shapeImageThreshold: 'shape-image-threshold',
1684
+ shapeMargin: 'shape-margin',
1685
+ shapeOutside: 'shape-outside',
1686
+ tabSize: 'tab-size',
1687
+ tableLayout: 'table-layout',
1688
+ textAlign: 'text-align',
1689
+ textAlignLast: 'text-align-last',
1690
+ textCombineUpright: 'text-combine-upright',
1691
+ textDecoration: 'text-decoration',
1692
+ textDecorationColor: 'text-decoration-color',
1693
+ textDecorationLine: 'text-decoration-line',
1694
+ textDecorationStyle: 'text-decoration-style',
1695
+ textIndent: 'text-indent',
1696
+ textJustify: 'text-justify',
1697
+ textOrientation: 'text-orientation',
1698
+ textOverflow: 'text-overflow',
1699
+ textShadow: 'text-shadow',
1700
+ textTransform: 'text-transform',
1701
+ transformBox: 'transform-box',
1702
+ transformOrigin: 'transform-origin',
1703
+ transformStyle: 'transform-style',
1704
+ transitionDelay: 'transition-delay',
1705
+ transitionDuration: 'transition-duration',
1706
+ transitionProperty: 'transition-property',
1707
+ transitionTimingFunction: 'transition-timing-function',
1708
+ unicodeBidi: 'unicode-bidi',
1709
+ userSelect: 'user-select',
1710
+ verticalAlign: 'vertical-align',
1711
+ whiteSpace: 'white-space',
1712
+ willChange: 'will-change',
1713
+ wordBreak: 'word-break',
1714
+ wordSpacing: 'word-spacing',
1715
+ wordWrap: 'word-wrap',
1716
+ writingMode: 'writing-mode',
1717
+ zIndex: 'z-index',
1718
+ WebkitTransform: '-webkit-transform',
1719
+ WebkitTransition: '-webkit-transition',
1720
+ WebkitBoxShadow: '-webkit-box-shadow',
1721
+ MozBoxShadow: '-moz-box-shadow',
1722
+ MozTransform: '-moz-transform',
1723
+ MozTransition: '-moz-transition',
1724
+ msTransform: '-ms-transform',
1725
+ msTransition: '-ms-transition',
1726
+ };
1727
+ /** @type {Record<string | symbol, string>} */
1728
+ static cssPropAliases = new Proxy(TinyHtml.#cssPropAliases, {
1729
+ set(target, camelCaseKey, kebabValue) {
1730
+ target[camelCaseKey] = kebabValue;
1731
+ // @ts-ignore
1732
+ TinyHtml.cssPropRevAliases[kebabValue] = camelCaseKey;
1733
+ return true;
1734
+ },
1735
+ });
1736
+ /** @type {Record<string | symbol, string>} */
1737
+ static cssPropRevAliases = Object.fromEntries(Object.entries(TinyHtml.#cssPropAliases).map(([camel, kebab]) => [kebab, camel]));
1738
+ /**
1739
+ * Converts a camelCase string to kebab-case
1740
+ * @param {string} str
1741
+ * @returns {string}
1742
+ */
1743
+ static toStyleKc(str) {
1744
+ if (typeof TinyHtml.cssPropAliases[str] === 'string')
1745
+ return TinyHtml.cssPropAliases[str];
1746
+ return str;
1747
+ }
1748
+ /**
1749
+ * Converts a kebab-case string to camelCase
1750
+ * @param {string} str
1751
+ * @returns {string}
1752
+ */
1753
+ static toStyleCc(str) {
1754
+ if (typeof TinyHtml.cssPropRevAliases[str] === 'string')
1755
+ return TinyHtml.cssPropRevAliases[str];
1756
+ return str;
1757
+ }
1758
+ /**
1759
+ * Sets one or more CSS inline style properties on the given element(s).
1760
+ *
1761
+ * - If `prop` is a string, the `value` will be applied to that property.
1762
+ * - If `prop` is an object, each key-value pair will be applied as a CSS property and value.
1763
+ *
1764
+ * @param {TinyHtmlElement|TinyHtmlElement[]} el - The element to inspect.
1765
+ * @param {string|Object} prop - The property name or an object with key-value pairs
1766
+ * @param {string|null} [value=null] - The value to set (if `prop` is a string)
1767
+ */
1768
+ static setStyle(el, prop, value = null) {
1769
+ TinyHtml._preHtmlElems(el, 'setStyle').forEach((elem) => {
1770
+ if (typeof prop === 'object') {
1771
+ for (const [k, v] of Object.entries(prop)) {
1772
+ elem.style.setProperty(TinyHtml.toStyleKc(k), typeof v === 'string' ? v : typeof v === 'number' ? `${v}px` : String(v));
1773
+ }
1774
+ }
1775
+ else
1776
+ elem.style.setProperty(TinyHtml.toStyleKc(prop), value);
1777
+ });
1778
+ }
1779
+ /**
1780
+ * Sets one or more CSS inline style properties on the given element(s).
1781
+ *
1782
+ * - If `prop` is a string, the `value` will be applied to that property.
1783
+ * - If `prop` is an object, each key-value pair will be applied as a CSS property and value.
1784
+ *
1785
+ * @param {string|Object} prop - The property name or an object with key-value pairs
1786
+ * @param {string|null} [value=null] - The value to set (if `prop` is a string)
1787
+ */
1788
+ setStyle(prop, value) {
1789
+ return TinyHtml.setStyle(this, prop, value);
1790
+ }
1791
+ /**
1792
+ * Gets the value of a specific inline style property.
1793
+ *
1794
+ * Returns only the value set directly via the `style` attribute.
1795
+ *
1796
+ * @param {TinyHtmlElement|TinyHtmlElement[]} el - A single element to inspect.
1797
+ * @param {string} prop - The style property name to retrieve.
1798
+ * @returns {string} The style value of the specified property.
1799
+ */
1800
+ static getStyle(el, prop) {
1801
+ return TinyHtml._preHtmlElem(el, 'getStyle').style.getPropertyValue(TinyHtml.toStyleKc(prop));
1802
+ }
1803
+ /**
1804
+ * Gets the value of a specific inline style property.
1805
+ *
1806
+ * Returns only the value set directly via the `style` attribute.
1807
+ *
1808
+ * @param {string} prop - The style property name to retrieve.
1809
+ * @returns {string} The style value of the specified property.
1810
+ */
1811
+ getStyle(prop) {
1812
+ return TinyHtml.getStyle(this, prop);
1813
+ }
1814
+ /**
1815
+ * Gets all inline styles defined directly on the element (`style` attribute).
1816
+ *
1817
+ * Returns an object with all property-value pairs in kebab-case format.
1818
+ *
1819
+ * @param {TinyHtmlElement|TinyHtmlElement[]} el - A single element to inspect.
1820
+ * @param {Object} [settings={}] - Optional configuration settings.
1821
+ * @param {boolean} [settings.camelCase=false] - If `true`, the property names will be converted to camelCase.
1822
+ * @param {boolean} [settings.rawAttr=false] - If `true`, reads the style string from the `style` attribute instead of using the style object.
1823
+ * @returns {Record<string, string>} All inline styles as an object.
1824
+ *
1825
+ * @throws {TypeError} If `camelCase` or `rawAttr` is not a boolean.
1826
+ */
1827
+ static style(el, { camelCase = false, rawAttr = false } = {}) {
1828
+ if (typeof camelCase !== 'boolean')
1829
+ throw new TypeError(`"camelCase" must be a boolean. Received: ${typeof camelCase}`);
1830
+ if (typeof rawAttr !== 'boolean')
1831
+ throw new TypeError(`"rawAttr" must be a boolean. Received: ${typeof rawAttr}`);
1832
+ const elem = TinyHtml._preHtmlElem(el, 'style');
1833
+ /** @type {Record<string, string>} */
1834
+ const result = {};
1835
+ if (rawAttr) {
1836
+ const raw = elem.getAttribute('style') || '';
1837
+ const entries = raw.split(';');
1838
+ for (const entry of entries) {
1839
+ const [rawProp, rawVal] = entry.split(':');
1840
+ if (!rawProp || !rawVal)
1841
+ continue;
1842
+ const prop = rawProp.trim();
1843
+ const value = rawVal.trim();
1844
+ result[camelCase ? TinyHtml.toStyleCc(prop) : prop] = value;
1845
+ }
1846
+ }
1847
+ else {
1848
+ const styles = elem.style;
1849
+ for (let i = 0; i < styles.length; i++) {
1850
+ const prop = styles[i]; // Already in kebab-case
1851
+ const value = styles.getPropertyValue(prop);
1852
+ result[camelCase ? TinyHtml.toStyleCc(prop) : prop] = value;
1853
+ }
1854
+ }
1855
+ return result;
1856
+ }
1857
+ /**
1858
+ * Gets all inline styles defined directly on the element (`style` attribute).
1859
+ *
1860
+ * Returns an object with all property-value pairs in kebab-case format.
1861
+ *
1862
+ * @param {Object} [settings={}] - Optional configuration settings.
1863
+ * @param {boolean} [settings.camelCase=false] - If `true`, the property names will be converted to camelCase.
1864
+ * @param {boolean} [settings.rawAttr=false] - If `true`, reads the style string from the `style` attribute instead of using the style object.
1865
+ * @returns {Record<string, string>} All inline styles as an object.
1866
+ */
1867
+ style(settings) {
1868
+ return TinyHtml.style(this, settings);
1869
+ }
1870
+ /**
1871
+ * Removes one or more inline CSS properties from the given element(s).
1872
+ *
1873
+ * @param {TinyHtmlElement|TinyHtmlElement[]} el - A single element or an array of elements.
1874
+ * @param {string|string[]} prop - A property name or an array of property names to remove.
1875
+ */
1876
+ static removeStyle(el, prop) {
1877
+ TinyHtml._preHtmlElems(el, 'removeStyle').forEach((elem) => {
1878
+ if (Array.isArray(prop)) {
1879
+ for (const p of prop) {
1880
+ elem.style.removeProperty(TinyHtml.toStyleKc(p));
1881
+ }
1882
+ }
1883
+ else
1884
+ elem.style.removeProperty(TinyHtml.toStyleKc(prop));
1885
+ });
1886
+ }
1887
+ /**
1888
+ * Removes one or more inline CSS properties from the given element(s).
1889
+ *
1890
+ * @param {string|string[]} prop - A property name or an array of property names to remove.
1891
+ */
1892
+ removeStyle(prop) {
1893
+ return TinyHtml.removeStyle(this, prop);
1894
+ }
1895
+ /**
1896
+ * Toggles a CSS property value between two given values.
1897
+ *
1898
+ * The current computed value is compared to `val1`. If it matches, the property is set to `val2`. Otherwise, it is set to `val1`.
1899
+ *
1900
+ * @param {TinyHtmlElement|TinyHtmlElement[]} el - A single element or an array of elements.
1901
+ * @param {string} prop - The CSS property to toggle.
1902
+ * @param {string} val1 - The first value (used as "current" check).
1903
+ * @param {string} val2 - The second value (used as the "alternative").
1904
+ */
1905
+ static toggleStyle(el, prop, val1, val2) {
1906
+ TinyHtml._preHtmlElems(el, 'toggleStyle').forEach((elem) => {
1907
+ const current = TinyHtml.getStyle(elem, prop).trim();
1908
+ const newVal = current === TinyHtml.toStyleKc(val1) ? val2 : val1;
1909
+ TinyHtml.setStyle(elem, prop, newVal);
1910
+ });
1911
+ }
1912
+ /**
1913
+ * Toggles a CSS property value between two given values.
1914
+ *
1915
+ * The current computed value is compared to `val1`. If it matches, the property is set to `val2`. Otherwise, it is set to `val1`.
1916
+ *
1917
+ * @param {string} prop - The CSS property to toggle.
1918
+ * @param {string} val1 - The first value (used as "current" check).
1919
+ * @param {string} val2 - The second value (used as the "alternative").
1920
+ */
1921
+ toggleStyle(prop, val1, val2) {
1922
+ return TinyHtml.toggleStyle(this, prop, val1, val2);
1923
+ }
1924
+ /**
1925
+ * Removes all inline styles (`style` attribute) from the given element(s).
1926
+ *
1927
+ * @param {TinyElement|TinyElement[]} el - A single element or an array of elements.
1928
+ */
1929
+ static clearStyle(el) {
1930
+ TinyHtml._preElems(el, 'clearStyle').forEach((elem) => elem.removeAttribute('style'));
1931
+ }
1932
+ /**
1933
+ * Removes all inline styles (`style` attribute) from the given element(s).
1934
+ *
1935
+ */
1936
+ clearStyle() {
1937
+ return TinyHtml.clearStyle(this);
1938
+ }
1939
+ //////////////////////////////////////////////////////////////////////
1471
1940
  /**
1472
1941
  * Focus the element.
1473
1942
  *
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var objFilter = require('../basics/objFilter.cjs');
4
+ require('./TinyHtml.cjs');
4
5
  require('fs');
5
6
  require('path');
6
7
  require('fs/promises');
package/docs/v1/README.md CHANGED
@@ -12,15 +12,15 @@ Here, you can navigate through different sections of the project. Below are the
12
12
 
13
13
  This folder contains the core scripts we have worked on so far. Each file is a module focused on specific functionality.
14
14
 
15
- - 📦 **[array](./basics/array.md)** — A tiny utility for shuffling arrays using the Fisher–Yates algorithm.
16
- - ⏰ **[clock](./basics/clock.md)** — A versatile time utility module for calculating and formatting time durations.
17
- - 🧠 **[objFilter](./basics/objFilter.md)** — Type detection, extension, and analysis made easy with simple and extensible type validation.
18
- - 🔢 **[simpleMath](./basics/simpleMath.md)** — A collection of simple math utilities for calculations like the Rule of Three and percentages.
19
- - ✍️ **[text](./basics/text.md)** — A utility for transforming text into title case formats, with multiple options for capitalization.
20
- - 🔄 **[asyncReplace](./basics/asyncReplace.md)** — Asynchronously replaces matches in a string using a regex and an async function.
21
- - 🖼️ **[html](./basics/html.md)** — Utilities for handling DOM element interactions like collision detection and basic element manipulation.
22
- - 📺 **[fullScreen](./basics/fullScreen.md)** — A complete fullscreen API manager with detection, event handling, and cross-browser compatibility.
23
- - 🧱 **[collision](./basics/collision.md)** — Full-featured rectangle collision detection system with directional analysis, depth calculation, and center offset metrics.
15
+ - 📦 **[Array](./basics/array.md)** — A tiny utility for shuffling arrays using the Fisher–Yates algorithm.
16
+ - ⏰ **[Clock](./basics/clock.md)** — A versatile time utility module for calculating and formatting time durations.
17
+ - 🧠 **[ObjFilter](./basics/objFilter.md)** — Type detection, extension, and analysis made easy with simple and extensible type validation.
18
+ - 🔢 **[SimpleMath](./basics/simpleMath.md)** — A collection of simple math utilities for calculations like the Rule of Three and percentages.
19
+ - ✍️ **[Text](./basics/text.md)** — A utility for transforming text into title case formats, with multiple options for capitalization.
20
+ - 🔄 **[AsyncReplace](./basics/asyncReplace.md)** — Asynchronously replaces matches in a string using a regex and an async function.
21
+ - 🖼️ **[Html](./basics/html.md)** — Utilities for handling DOM element interactions like collision detection and basic element manipulation.
22
+ - 📺 **[FullScreen](./basics/fullScreen.md)** — A complete fullscreen API manager with detection, event handling, and cross-browser compatibility.
23
+ - 🧱 **[Collision](./basics/collision.md)** — Full-featured rectangle collision detection system with directional analysis, depth calculation, and center offset metrics.
24
24
 
25
25
  ### 2. **`libs/`**
26
26
  - 🗂️ **[TinyPromiseQueue](./libs/TinyPromiseQueue.md)** — A class that allows sequential execution of asynchronous tasks, supporting task delays, cancellation, and queue management.
@@ -37,7 +37,7 @@ This folder contains the core scripts we have worked on so far. Each file is a m
37
37
  - 🧱 **[TinyHtml](./libs/TinyHtml.md)** — A minimalist DOM utility class that offers jQuery-like methods in pure JavaScript for querying, styling, traversing, event handling, collision detection, and visibility logic — all in a lightweight and chainable interface.
38
38
 
39
39
  ### 3. **`fileManager/`**
40
- * 📁 **[main](./fileManager/main.md)** — A Node.js file/directory utility module with support for JSON, backups, renaming, size analysis, and more.
40
+ * 📁 **[Main](./fileManager/main.md)** — A Node.js file/directory utility module with support for JSON, backups, renaming, size analysis, and more.
41
41
 
42
42
  ---
43
43