jj 0.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +35 -7
- package/lib/ComponentFiles.d.ts +35 -0
- package/lib/ComponentFiles.js +116 -0
- package/lib/ComponentFiles.js.map +1 -0
- package/lib/WC.d.ts +33 -0
- package/lib/WC.js +160 -0
- package/lib/WC.js.map +1 -0
- package/lib/WDF.d.ts +11 -0
- package/lib/WDF.js +31 -0
- package/lib/WDF.js.map +1 -0
- package/lib/WE.d.ts +42 -0
- package/lib/WE.js +132 -0
- package/lib/WE.js.map +1 -0
- package/lib/WF.d.ts +14 -0
- package/lib/WF.js +44 -0
- package/lib/WF.js.map +1 -0
- package/lib/WHE.d.ts +21 -0
- package/lib/WHE.js +75 -0
- package/lib/WHE.js.map +1 -0
- package/lib/WN-mixin.d.ts +9 -0
- package/lib/WN-mixin.js +59 -0
- package/lib/WN-mixin.js.map +1 -0
- package/lib/WN.d.ts +34 -0
- package/lib/WN.js +145 -0
- package/lib/WN.js.map +1 -0
- package/lib/WS.d.ts +11 -0
- package/lib/WS.js +32 -0
- package/lib/WS.js.map +1 -0
- package/lib/WSH.d.ts +11 -0
- package/lib/WSH.js +29 -0
- package/lib/WSH.js.map +1 -0
- package/lib/WT.d.ts +12 -0
- package/lib/WT.js +39 -0
- package/lib/WT.js.map +1 -0
- package/lib/Welem.d.ts +49 -0
- package/lib/Welem.js +173 -0
- package/lib/Welem.js.map +1 -0
- package/lib/Wfrag.d.ts +15 -0
- package/lib/Wfrag.js +56 -0
- package/lib/Wfrag.js.map +1 -0
- package/lib/Whelem.d.ts +17 -0
- package/lib/Whelem.js +69 -0
- package/lib/Whelem.js.map +1 -0
- package/lib/Wnode.d.ts +6 -0
- package/lib/Wnode.js +33 -0
- package/lib/Wnode.js.map +1 -0
- package/lib/Wshad.d.ts +9 -0
- package/lib/Wshad.js +31 -0
- package/lib/Wshad.js.map +1 -0
- package/lib/bundle.js +737 -0
- package/lib/bundle.js.map +7 -0
- package/lib/bundle.min.js +3 -0
- package/lib/case.d.ts +3 -0
- package/lib/case.js +34 -0
- package/lib/case.js.map +1 -0
- package/lib/case.test.d.ts +1 -0
- package/lib/case.test.js +79 -0
- package/lib/case.test.js.map +1 -0
- package/lib/h.d.ts +3 -0
- package/lib/h.js +9 -0
- package/lib/h.js.map +1 -0
- package/lib/index.d.ts +11 -0
- package/lib/index.js +12 -0
- package/lib/index.js.map +1 -0
- package/lib/util.d.ts +5 -0
- package/lib/util.js +19 -0
- package/lib/util.js.map +1 -0
- package/lib/wrap-unwrap.d.ts +22 -0
- package/lib/wrap-unwrap.js +68 -0
- package/lib/wrap-unwrap.js.map +1 -0
- package/package.json +56 -26
- package/CSS.js +0 -145
- package/Router.js +0 -89
- package/Selector.js +0 -175
- package/Tag.js +0 -827
- package/control.js +0 -74
- package/events.js +0 -16
- package/index.js +0 -26
- package/observer.js +0 -27
- package/rollup.config.js +0 -25
- package/unit.js +0 -78
- package/util.js +0 -153
- package/win.js +0 -11
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/util.ts", "../src/case.ts", "../node_modules/jty/src/misc.ts", "../node_modules/jty/src/number.ts", "../node_modules/jty/src/array.ts", "../node_modules/jty/src/object.ts", "../node_modules/jty/src/string.ts", "../node_modules/jty/src/same.ts", "../src/WN.ts", "../src/WT.ts", "../src/WDF.ts", "../src/WSH.ts", "../src/WE.ts", "../src/WHE.ts", "../src/WC.ts", "../src/WN-mixin.ts", "../src/h.ts"],
|
|
4
|
+
"sourcesContent": ["/** Used to Give the UI a moment to update */\nexport function nextAnimationFrame(): Promise<number> {\n return new Promise((resolve) => requestAnimationFrame(resolve))\n}\n\nexport function on(target: EventTarget, eventName: string, handler: EventListenerOrEventListenerObject): void {\n target.addEventListener(eventName, handler)\n}\n\nexport function off(target: EventTarget, eventName: string, handler: EventListenerOrEventListenerObject): void {\n target.removeEventListener(eventName, handler)\n}\n\nexport async function ensureComponent(\n name: string,\n constructor: CustomElementConstructor,\n): Promise<CustomElementConstructor> {\n if (!customElements.get(name)) {\n customElements.define(name, constructor)\n await customElements.whenDefined(name)\n return constructor\n }\n return constructor\n}\n", "export function pas2keb(str: string): string {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string. Got ${str} (${typeof str})`)\n }\n if (/[^a-zA-Z0-9_]/.test(str)) {\n throw new TypeError(`Invalid characters in string. Only alphanumeric and underscores are allowed. Got: ${str}`)\n }\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .replace(/_/g, '-')\n .toLowerCase()\n}\n\nexport function keb2pas(str: string): string {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string. Got ${str} (${typeof str})`)\n }\n return (\n str\n .split('-')\n .filter(Boolean) // Remove empty strings from leading/trailing/multiple hyphens\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('') ||\n // Handle strings that were not kebab-case to begin with (e.g. 'single', 'camelCase')\n (str.length > 0 ? str.charAt(0).toUpperCase() + str.slice(1) : '')\n )\n}\n\nexport function keb2cam(str: string): string {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string. Got ${str} (${typeof str})`)\n }\n return str\n .replace(/^-+|-+$/g, '') // Remove any leading or trailing hyphens\n .replace(/-+([a-z])/g, (g, c) => c.toUpperCase())\n}\n", null, null, null, null, null, null, "import { isA } from 'jty'\nimport { Unwrapped, Wrappable, Wrapped } from './WN-mixin.js'\nimport { off, on } from './util.js'\n\n/** @returns true if this.ref is an instance of descendant of Element or DocumentFragment */\nfunction isElementOrDocumentFragment(x: unknown): x is Element | DocumentFragment {\n return isA(x, Element) || isA(x, DocumentFragment)\n}\n\n/**\n * Wraps a DOM Node\n */\nexport class WN<T extends Node = Node> {\n static from(node: Node): WN {\n return new WN(node)\n }\n\n declare static wrap: (raw: Wrappable) => Wrapped\n declare static unwrap: (obj: Wrappable) => Unwrapped\n\n /**\n * wraps an iteratable object (e.g. an array of wrapped or DOM elements)\n */\n static wrapAll(iterable: Iterable<Wrappable>): Wrapped[] {\n return Array.from(iterable, WN.wrap)\n }\n\n /**\n * unwraps an iteratable object (e.g. an array of HTMLCollection)\n */\n static unwrapAll(iterable: Iterable<Wrappable>): Unwrapped[] {\n return Array.from(iterable, WN.unwrap)\n }\n\n static byId(id: string, throwIfNotFound = true): Wrapped | null {\n const el = document.getElementById(id)\n if (el) {\n return WN.wrap(el)\n }\n if (throwIfNotFound) {\n throw new TypeError(`Element with id ${id} not found`)\n }\n return null\n }\n\n static byClass(className: string) {\n return WN.wrapAll(document.getElementsByClassName(className))\n }\n\n static query(selector: string, throwIfNotFound = true): Wrapped | null {\n const queryResult = document.querySelector(selector)\n if (queryResult) {\n return WN.wrap(queryResult)\n }\n if (throwIfNotFound) {\n throw new TypeError(`Element with selector ${selector} not found`)\n }\n return null\n }\n\n query(selector: string, throwIfNotFound = true): Wrapped | null {\n if (!isElementOrDocumentFragment(this.ref)) {\n throw new TypeError(`Expected an Element or DocumentFragment. Got ${this.ref} (${typeof this.ref})`)\n }\n const queryResult = this.ref.querySelector(selector)\n if (queryResult) {\n return WN.wrap(queryResult)\n }\n if (throwIfNotFound) {\n throw new TypeError(`Element with selector ${selector} not found`)\n }\n return null\n }\n\n static queryAll(selector: string): Wrapped[] {\n return WN.wrapAll(document.querySelectorAll(selector))\n }\n\n queryAll(selector: string): Wrapped[] {\n if (!isElementOrDocumentFragment(this.ref)) {\n throw new TypeError(`Expected an Element or DocumentFragment. Got ${this.ref} (${typeof this.ref})`)\n }\n return WN.wrapAll(this.ref.querySelectorAll(selector))\n }\n\n #ref!: T\n\n constructor(ref: T) {\n if (!isA(ref, Node)) {\n throw new TypeError(`Expected a Node. Got ${ref} (${typeof ref})`)\n }\n this.#ref = ref\n }\n\n get ref() {\n return this.#ref\n }\n\n clone(deep?: boolean): Wrapped {\n return WN.wrap(this.ref.cloneNode(deep))\n }\n\n append(...children: Wrappable[]): this {\n const nodes = WN.unwrapAll(children)\n if (isElementOrDocumentFragment(this.ref)) {\n this.ref.append(...nodes)\n } else {\n for (const node of nodes) {\n if (node) {\n this.ref.appendChild(node)\n }\n }\n }\n return this\n }\n\n mapAppend<T>(array: Wrappable[], mapFn: (item: Wrappable) => Wrappable): this {\n return this.append(...array.map(mapFn))\n }\n\n prepend(...children: Wrappable[]): this {\n const nodes = WN.unwrapAll(children)\n if (isElementOrDocumentFragment(this.ref)) {\n this.ref.prepend(...nodes)\n } else {\n const first = this.ref.firstChild\n for (const node of nodes) {\n if (node) {\n this.ref.insertBefore(node, first)\n }\n }\n }\n return this\n }\n\n mapPrepend<T>(array: Wrappable[], mapFn: (item: Wrappable) => Wrappable): this {\n return this.prepend(...array.map(mapFn))\n }\n\n on(eventName: string, handler: EventListenerOrEventListenerObject): this {\n on(this.ref, eventName, handler)\n return this\n }\n\n off(eventName: string, handler: EventListenerOrEventListenerObject): this {\n off(this.ref, eventName, handler)\n return this\n }\n\n rm() {\n this.ref.parentNode?.removeChild(this.ref)\n return this\n }\n}\n", "import { isA, isStr } from 'jty'\nimport { WN } from './WN.js'\n\n/**\n * Wraps a DOM Text Node\n */\nexport class WT<T extends Text = Text> extends WN<Text> {\n static from(text: Text): WT {\n if (!isA(text, Text)) {\n throw new TypeError(`Expected a Text object. Got: ${text} (${typeof text})`)\n }\n return new WT(text)\n }\n\n constructor(ref: T | String) {\n if (isStr(ref)) {\n super(document.createTextNode(ref))\n } else if (isA(ref, Text)) {\n super(ref)\n }\n throw new TypeError(`Expected a Text. Got: ${ref} (${typeof ref})`)\n }\n\n getText(): string {\n return this.ref.textContent\n }\n\n setText(text: string): this {\n if (!isStr(text)) {\n throw new TypeError(`Expected a string. Got: ${text} (${typeof text})`)\n }\n this.ref.textContent = text\n return this\n }\n\n empty(): this {\n return this.setText('')\n }\n\n addLines(...lines: string[]): this {\n return this.setText(lines.join('\\n'))\n }\n}\n", "import { isA } from 'jty'\nimport { WN } from './WN.js'\nimport { Wrapped } from './WN-mixin.js'\n\n/**\n * Wraps a DocumentFragment (which is a descendant of Node)\n */\nexport class WDF<T extends DocumentFragment = DocumentFragment> extends WN<T> {\n static from(ref: DocumentFragment): WDF {\n return new WDF(ref)\n }\n\n constructor(ref: T) {\n if (!isA(ref, DocumentFragment)) {\n throw new TypeError(`Expected a DocumentFragment. Got ${ref} (${typeof ref})`)\n }\n super(ref)\n }\n\n byId(id: string, throwIfNotFound = true): Wrapped | null {\n const el = this.ref.getElementById(id)\n if (el) {\n return WN.wrap(el)\n }\n if (throwIfNotFound) {\n throw new TypeError(`Element with id ${id} not found`)\n }\n return null\n }\n\n empty(): this {\n this.ref.replaceChildren()\n return this\n }\n}\n", "import { isA } from 'jty'\nimport { WDF } from './WDF.js'\n\n/**\n * Wraps a DOM ShadowRoot node (which is a descendant of DocumentFragment)\n */\nexport class WSH<T extends ShadowRoot = ShadowRoot> extends WDF<T> {\n static from(shadow: ShadowRoot) {\n return new WSH(shadow)\n }\n\n constructor(shadow: T) {\n if (!isA(shadow, ShadowRoot)) {\n throw new TypeError(`Expected a ShadowRoot. Got ${shadow} (${typeof shadow})`)\n }\n super(shadow)\n }\n\n getHtml(): string {\n return this.ref.innerHTML\n }\n\n setHtml(value: string, unsafe: false): this {\n // TODO: https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/setHTMLUnsafe\n this.ref.innerHTML = value\n return this\n }\n\n addStyleSheets(...styleSheets: CSSStyleSheet[]): this {\n this.ref.adoptedStyleSheets.push(...styleSheets)\n return this\n }\n}\n", "import { isA, isObj } from 'jty'\nimport { WN } from './WN.js'\nimport { WSH } from './WSH.js'\n\n/**\n * Wraps a DOM Element (which is a descendant of Node)\n */\nexport class WE<T extends Element = Element> extends WN<T> {\n static from(ref: Element): WE {\n return new WE(ref)\n }\n\n constructor(ref: T) {\n if (!isA(ref, Element)) {\n throw new TypeError(`Expected a Element. Got: ${ref} (${typeof ref})`)\n }\n super(ref)\n }\n\n getAttr(name: string): string | null {\n return this.ref.getAttribute(name)\n }\n\n hasAttr(name: string): boolean {\n return this.ref.hasAttribute(name)\n }\n\n setAttr(name: string, value: string): this {\n this.ref.setAttribute(name, value)\n return this\n }\n\n setAttrs(obj: Record<string, string>): this {\n if (!isObj(obj)) {\n throw new TypeError(`Expected an object. Got: ${obj} (${typeof obj})`)\n }\n for (const [name, value] of Object.entries(obj)) {\n this.setAttr(name, value)\n }\n return this\n }\n\n rmAttr(name: string) {\n return this.rmAttrs(name)\n }\n\n rmAttrs(...names: string[]): this {\n for (const name of names) {\n this.ref.removeAttribute(name)\n }\n return this\n }\n\n getAria(name: string): string | null {\n return this.ref.getAttribute(`aria-${name}`)\n }\n\n hasAria(name: string): boolean {\n return this.ref.hasAttribute(`aria-${name}`)\n }\n\n setAria(name: string, value: string): this {\n this.ref.setAttribute(`aria-${name}`, value)\n return this\n }\n\n rmAria(name: string): this {\n this.ref.removeAttribute(`aria-${name}`)\n return this\n }\n\n addClass(...classNames: string[]): this {\n this.ref.classList.add(...classNames)\n return this\n }\n\n rmClasses(...classNames: string[]): this {\n this.ref.classList.remove(...classNames)\n return this\n }\n\n rmClass(className: string) {\n return this.rmClasses(className)\n }\n\n hasClass(className: string): boolean {\n return this.ref.classList.contains(className)\n }\n\n toggleClass(className: string): this {\n this.ref.classList.toggle(className)\n return this\n }\n\n onClick(handler: EventListenerOrEventListenerObject): this {\n return this.on('click', handler)\n }\n\n hide(): this {\n return this.setAttr('hidden', '').setAttr('aria-hidden', 'true')\n }\n\n show(): this {\n return this.rmAttrs('hidden', 'aria-hidden')\n }\n\n disable(): this {\n return this.setAttr('disabled', '').setAttr('aria-disabled', 'true')\n }\n\n enable(): this {\n return this.rmAttrs('disabled', 'aria-disabled')\n }\n\n getTitle(): string | null {\n return this.getAttr('title')\n }\n\n setTitle(title: string): this {\n return this.setAttr('title', title)\n }\n\n setId(id: string): this {\n return this.setAttr('id', id)\n }\n\n getId(): string | null {\n return this.getAttr('id')\n }\n\n getHtml(): string {\n return this.ref.innerHTML\n }\n\n setHtml(html: string): this {\n this.ref.innerHTML = html\n return this\n }\n\n /**\n * @remarks\n * **Note:** You can't attach a shadow root to every type of element. There are some that can't have a\n * shadow DOM for security reasons (for example `<a>`).\n */\n setShadow(mode: ShadowRootMode = 'open', html?: string, ...styleSheets: CSSStyleSheet[]): this {\n const shadowRoot = this.ref.shadowRoot ?? this.ref.attachShadow({ mode })\n if (html) {\n shadowRoot.innerHTML = html\n }\n if (styleSheets.length) {\n shadowRoot.adoptedStyleSheets.push(...styleSheets)\n }\n return this\n }\n\n getShadow(): WSH {\n if (!this.ref.shadowRoot) throw new Error('No shadow root')\n return new WSH(this.ref.shadowRoot)\n }\n}\n", "import { hasProp, isA, isStr } from 'jty'\nimport { WE } from './WE.js'\n\n/**\n * Wraps a DOM HTMLElement (which is a descendant of Element)\n */\nexport class WHE<T extends HTMLElement = HTMLElement> extends WE<T> {\n static from(ref: HTMLElement): WHE {\n return new WHE(ref)\n }\n\n static fromTag(tagName: string, options?: ElementCreationOptions): WHE {\n if (!isStr(tagName)) {\n throw new TypeError(`Expected a string for tagName. Got: ${tagName} (${typeof tagName})`)\n }\n return new WHE(document.createElement(tagName, options))\n }\n\n constructor(ref: T) {\n if (!isA(ref, HTMLElement)) {\n throw new TypeError(`Expected a HTMLElement. Got ${ref} (${typeof ref})`)\n }\n super(ref)\n }\n\n getValue() {\n if (!hasProp(this.ref, 'value')) {\n throw new Error('Element does not have a value property')\n }\n return this.ref.value\n }\n\n setValue(value: string): this {\n if (!hasProp(this.ref, 'value')) {\n throw new Error('Element does not have a value property')\n }\n this.ref.value = value\n return this\n }\n\n getData(name: string): string | undefined {\n return this.ref.dataset[name]\n }\n\n hasData(name: string): boolean {\n return hasProp(this.ref.dataset, name)\n }\n\n setData(name: string, value: string): this {\n this.ref.dataset[name] = value\n return this\n }\n\n setDataObj(obj: Record<string, string>): this {\n for (const [name, value] of Object.entries(obj)) {\n this.setData(name, value)\n }\n return this\n }\n\n rmData(name: string): this {\n delete this.ref.dataset[name]\n return this\n }\n\n focus(): this {\n this.ref.focus()\n return this\n }\n\n click(): this {\n this.ref.click()\n return this\n }\n\n empty(): this {\n this.ref.innerText = ''\n return this\n }\n\n getText(): string {\n return this.ref.innerText\n }\n\n setText(text: string): this {\n this.ref.innerText = text\n return this\n }\n}\n", "import { keb2cam } from './case.js'\nimport { WHE } from './WHE.js'\nimport { hasProp, isA, isArr, isStr } from 'jty'\nimport { WSH } from './WSH.js'\nimport { WN } from './WN.js'\n\nexport type LoadingStrategy = 'eager' | 'lazy' | 'prefetch' | 'preload'\n\ninterface ComponentResource<T> {\n get promise(): Promise<T>\n}\n\nabstract class ComponentFile<T> implements ComponentResource<T> {\n #promise: Promise<T> | undefined\n\n constructor(\n protected as: 'fetch' | 'style',\n protected href: string,\n loading: LoadingStrategy = 'lazy',\n ) {\n if (!isStr(href)) {\n throw new TypeError(`Expected a string href. Got ${href} (${typeof href})`)\n }\n switch (loading) {\n case 'eager':\n this.promise // Trigger fetch\n break\n case 'prefetch':\n case 'preload':\n this.addLinkPre(loading)\n break\n case 'lazy':\n break\n default:\n throw new RangeError(`Expected a valid loading strategy. Got: ${loading} (${typeof loading})`)\n }\n }\n\n /**\n * Creates a <lik re=\"preload|prefetch\"> element and adds it to the document <head> element.\n * @param as the link \"as\" attribute. Use 'fetch' for HTML, 'style' for CSS, and 'script' for JavaScript\n * @param rel when set to a truthy value, a 'preload' link is created. Otherwise a 'prefetch' is created\n * The difference lies in the priority of loading the resource to the browser cache where preload has higher prio.\n */\n protected addLinkPre(rel: 'prefetch' | 'preload') {\n const link = WHE.fromTag('link').setAttr('rel', rel).setAttr('href', this.href).setAttr('as', this.as)\n document.head.append(link.ref)\n return this\n }\n\n get promise(): Promise<T> {\n if (this.#promise === undefined) {\n this.#promise = this.fetch()\n }\n return this.#promise\n }\n\n protected abstract fetch(): Promise<T>\n}\n\nclass TemplateFile extends ComponentFile<string> {\n constructor(href: string, loading?: LoadingStrategy) {\n super('fetch', href, loading)\n }\n\n protected async fetch(): Promise<string> {\n const response = await fetch(this.href, { headers: { Accept: 'text/html' } })\n if (!response.ok) {\n throw new Error(`GET ${this.href} failed: ${response.status} ${response.statusText}`)\n }\n return response.text()\n }\n}\n\nclass StyleFile extends ComponentFile<CSSStyleSheet> {\n constructor(href: string, loading?: LoadingStrategy) {\n super('style', href, loading)\n }\n\n protected async fetch(): Promise<CSSStyleSheet> {\n const response = await fetch(this.href, { headers: { Accept: 'text/css' } })\n if (!response.ok) {\n throw new Error(`GET ${this.href} failed: ${response.status} ${response.statusText}`)\n }\n const text = await response.text()\n const sheet = new CSSStyleSheet()\n return sheet.replace(`${text}\\n/*# sourceURL=${this.href} */`)\n }\n}\n\nclass TemplateStr implements ComponentResource<string> {\n promise: Promise<string>\n\n constructor(content: string) {\n if (!isStr(content)) {\n throw new TypeError(`Expected a HTML string. Got ${content} (${typeof content})`)\n }\n this.promise = Promise.resolve(content)\n }\n}\n\nclass StyleStr implements ComponentResource<CSSStyleSheet> {\n promise: Promise<CSSStyleSheet>\n\n constructor(css: string) {\n if (!isStr(css)) {\n throw new TypeError(`Expected a CSS string. Got ${css} (${typeof css})`)\n }\n const sheet = new CSSStyleSheet()\n this.promise = sheet.replace(css)\n }\n}\n\n/**\n * Parent class for custom components.\n * It adds a few pragmatic functionalities\n * - `setTemplate` sets the template for the custom component body\n * - `addStyle` adds a stylesheet to be used by the shadowRoot\n * - `connectedCallback` assigns the templates to shadowRoot and attaches any styles\n * - `attributeChangedCallback` sets any props that corresponds to attributes defined in `static observedAttributes`\n */\nexport class WC extends HTMLElement {\n declare static jjTemplate?: ComponentResource<string>\n declare static jjStyle?: ComponentResource<CSSStyleSheet>[]\n declare static closedShadow?: boolean\n declare static observedAttributes?: string[]\n\n static setTemplateFile(href: string, loading?: LoadingStrategy) {\n this.jjTemplate = new TemplateFile(href, loading)\n return this\n }\n\n static setTemplateHtml(html: string) {\n this.jjTemplate = new TemplateStr(html)\n return this\n }\n\n static addStyleFile(href: string, loading?: LoadingStrategy) {\n if (!isArr(this.jjStyle)) {\n this.jjStyle = []\n }\n this.jjStyle.push(new StyleFile(href, loading))\n return this\n }\n\n static addStyleCss(css: string) {\n if (!isArr(this.jjStyle)) {\n this.jjStyle = []\n }\n this.jjStyle.push(new StyleStr(css))\n return this\n }\n\n async connectedCallback() {\n const { jjTemplate: template, jjStyle: style = [], closedShadow } = this.constructor as typeof WC\n const [html, ...styleSheets] = await Promise.all([template?.promise, ...style.map((style) => style.promise)])\n // Prevent FOUC by assigning the template and CSS in one go\n WHE.from(this).setShadow(closedShadow ? 'closed' : 'open', html, ...styleSheets)\n }\n\n /**\n * The class that extends this one should define\n * `static observedAttributes[]` containing kebab-based attribute names (all lower case)\n * @param name kebab-case and in lower case exactly as it appears in `observedAttributes`\n * @param oldValue\n * @param newValue\n * @returns true if it tried to set the attribute; otherwise false\n */\n attributeChangedCallback(name: string, oldValue: any, newValue: any) {\n // Called when observed attributes change.\n if (oldValue !== newValue) {\n const observedAttributes = (this.constructor as typeof WC).observedAttributes\n if (isArr(observedAttributes) && observedAttributes.includes(name)) {\n const kebabName = keb2cam(name)\n if (hasProp(this, kebabName)) {\n this[kebabName as keyof this] = newValue\n return true\n }\n }\n }\n return false\n }\n}\n", "import { isA, isObj, isStr } from 'jty'\nimport { WHE } from './WHE.js'\nimport { WE } from './WE.js'\nimport { WDF } from './WDF.js'\nimport { WSH } from './WSH.js'\nimport { WT } from './WT.js'\nimport { WN } from './WN.js'\n\nexport type Wrappable = WN | Node | string\nexport type Wrapped = WHE | WE | WDF | WSH | WDF | WT | WN\nexport type Unwrapped = HTMLElement | Element | ShadowRoot | DocumentFragment | Text | Node\n\n/**\n * @returns the most granual Wrapped subclass.\n */\nWN.wrap = (raw: Wrappable): Wrapped => {\n if (isStr(raw)) {\n return WT.from(document.createTextNode(raw))\n }\n if (!isObj(raw)) {\n throw new TypeError(`Expected an object to wrap. Got ${raw} (${typeof raw})`)\n }\n if (isA(raw, WN)) {\n return raw\n }\n if (isA(raw, HTMLElement)) {\n return WHE.from(raw)\n }\n if (isA(raw, Element)) {\n return WE.from(raw)\n }\n if (isA(raw, ShadowRoot)) {\n return WSH.from(raw)\n }\n if (isA(raw, DocumentFragment)) {\n return WDF.from(raw)\n }\n if (isA(raw, Text)) {\n return WT.from(raw)\n }\n if (isA(raw, Node)) {\n return WN.from(raw)\n }\n throw new TypeError(`Only Frag or DocumentFragment can be wrapped. Got ${raw} (${typeof raw})`)\n}\n\n/**\n * @returns the original DOM node wrapped in the appropriate class\n */\nWN.unwrap = (obj: Wrappable): Unwrapped => {\n if (isStr(obj)) {\n return document.createTextNode(obj)\n }\n if (!isObj(obj)) {\n throw new TypeError(`Expected an object. Got ${obj} (${typeof obj})`)\n }\n if (isA(obj, Node)) {\n return obj\n }\n if (isA(obj, WN)) {\n return obj.ref\n }\n throw new TypeError(`Could not unwrap ${obj} (${typeof obj})`)\n}\n", "import { WHE } from './WHE.js'\nimport { Wrappable } from './WN-mixin.js'\n\nexport function h(tagName: string, attributes: Record<string, string>, ...children: Wrappable[]): WHE {\n const ret = WHE.fromTag(tagName).append(...children)\n if (attributes) {\n ret.setAttrs(attributes)\n }\n return ret\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["hasOwnProperty", "isArray", "style"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
function G(){return new Promise(e=>requestAnimationFrame(e))}function A(e,t,r){e.addEventListener(t,r)}function W(e,t,r){e.removeEventListener(t,r)}async function H(e,t){return customElements.get(e)||(customElements.define(e,t),await customElements.whenDefined(e)),t}function D(e){if(typeof e!="string")throw new TypeError(`Expected a string. Got ${e} (${typeof e})`);if(/[^a-zA-Z0-9_]/.test(e))throw new TypeError(`Invalid characters in string. Only alphanumeric and underscores are allowed. Got: ${e}`);return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/([A-Z])([A-Z][a-z])/g,"$1-$2").replace(/_/g,"-").toLowerCase()}function N(e){if(typeof e!="string")throw new TypeError(`Expected a string. Got ${e} (${typeof e})`);return e.split("-").filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")||(e.length>0?e.charAt(0).toUpperCase()+e.slice(1):"")}function j(e){if(typeof e!="string")throw new TypeError(`Expected a string. Got ${e} (${typeof e})`);return e.replace(/^-+|-+$/g,"").replace(/-+([a-z])/g,(t,r)=>r.toUpperCase())}function g(e){return e!==void 0}function C(e){return typeof e=="function"}var{isNaN:v,isFinite:I,isInteger:q}=Number;function y(e){return typeof e=="number"&&!v(e)}function S(e,t,r){if(!y(e))throw new TypeError(`inRange(): "x" must be a number. Got ${e} (${typeof e})`);if(g(t)){if(!y(t))throw new TypeError(`inRange(): "min" must be a number. Got ${t} (${typeof t})`);if(g(r)){if(!y(r))throw new TypeError(`inRange(): "max" must be a number. Got ${r} (${typeof r})`);return t>r?r<=e&&e<=t:t<=e&&e<=r}return e>=t}else if(g(r)){if(!y(r))throw new TypeError(`inRange(): "max" must be a number. Got ${r} (${typeof r})`);return e<=r}throw new TypeError(`inRange(): expected at least min or max to be defined. Got min=${t} and max=${r}`)}var{isArray:R}=Array;function w(e,t=0,r){return R(e)&&S(e.length,t,r)}var{hasOwnProperty:J}=Object;function c(e){return!!e&&typeof e=="object"}function o(e,t){if(!C(t))throw new TypeError(`Expected a constructor function. Got ${t} (${typeof t})`);return e instanceof t}function f(e,...t){if(!c(e))return!1;for(let r of t)if(!(r in e))return!1;return!0}function i(e){return typeof e=="string"}var{hasOwnProperty:ot}=Object,{isArray:st}=Array;function E(e){return o(e,Element)||o(e,DocumentFragment)}var s=class e{static from(t){return new e(t)}static wrapAll(t){return Array.from(t,e.wrap)}static unwrapAll(t){return Array.from(t,e.unwrap)}static byId(t,r=!0){let n=document.getElementById(t);if(n)return e.wrap(n);if(r)throw new TypeError(`Element with id ${t} not found`);return null}static byClass(t){return e.wrapAll(document.getElementsByClassName(t))}static query(t,r=!0){let n=document.querySelector(t);if(n)return e.wrap(n);if(r)throw new TypeError(`Element with selector ${t} not found`);return null}query(t,r=!0){if(!E(this.ref))throw new TypeError(`Expected an Element or DocumentFragment. Got ${this.ref} (${typeof this.ref})`);let n=this.ref.querySelector(t);if(n)return e.wrap(n);if(r)throw new TypeError(`Element with selector ${t} not found`);return null}static queryAll(t){return e.wrapAll(document.querySelectorAll(t))}queryAll(t){if(!E(this.ref))throw new TypeError(`Expected an Element or DocumentFragment. Got ${this.ref} (${typeof this.ref})`);return e.wrapAll(this.ref.querySelectorAll(t))}#t;constructor(t){if(!o(t,Node))throw new TypeError(`Expected a Node. Got ${t} (${typeof t})`);this.#t=t}get ref(){return this.#t}clone(t){return e.wrap(this.ref.cloneNode(t))}append(...t){let r=e.unwrapAll(t);if(E(this.ref))this.ref.append(...r);else for(let n of r)this.ref.appendChild(n);return this}mapAppend(t,r){return this.append(...t.map(r))}prepend(...t){let r=e.unwrapAll(t);if(E(this.ref))this.ref.prepend(...r);else{let n=this.ref.firstChild;for(let a of r)this.ref.insertBefore(a,n)}return this}mapPrepend(t,r){return this.prepend(...t.map(r))}on(t,r){return A(this.ref,t,r),this}off(t,r){return W(this.ref,t,r),this}rm(){return this.ref.parentNode?.removeChild(this.ref),this}};var m=class e extends s{static from(t){if(!o(t,Text))throw new TypeError(`Expected a Text object. Got: ${t} (${typeof t})`);return new e(t)}constructor(t){throw i(t)?super(document.createTextNode(t)):o(t,Text)&&super(t),new TypeError(`Expected a Text. Got: ${t} (${typeof t})`)}getText(){return this.ref.textContent}setText(t){if(!i(t))throw new TypeError(`Expected a string. Got: ${t} (${typeof t})`);return this.ref.textContent=t,this}empty(){return this.setText("")}addLines(...t){return this.setText(t.join(`
|
|
2
|
+
`))}};var h=class e extends s{static from(t){return new e(t)}constructor(t){if(!o(t,DocumentFragment))throw new TypeError(`Expected a DocumentFragment. Got ${t} (${typeof t})`);super(t)}byId(t,r=!0){let n=this.ref.getElementById(t);if(n)return s.wrap(n);if(r)throw new TypeError(`Element with id ${t} not found`);return null}empty(){return this.ref.replaceChildren(),this}};var l=class extends h{constructor(t){if(!o(t,ShadowRoot))throw new TypeError(`Expected a ShadowRoot. Got ${t} (${typeof t})`);super(t)}getHtml(){return this.ref.innerHTML}setHtml(t,r){return this.ref.innerHTML=t,this}addStyleSheets(...t){return this.ref.adoptedStyleSheets.push(...t),this}};var u=class e extends s{static from(t){return new e(t)}constructor(t){if(!o(t,Element))throw new TypeError(`Expected a Element. Got: ${t} (${typeof t})`);super(t)}getAttr(t){return this.ref.getAttribute(t)}hasAttr(t){return this.ref.hasAttribute(t)}setAttr(t,r){return this.ref.setAttribute(t,r),this}setAttrs(t){for(let[r,n]of Object.entries(t))this.setAttr(r,n);return this}rmAttr(t){return this.rmAttrs(t)}rmAttrs(...t){for(let r of t)this.ref.removeAttribute(r);return this}getAria(t){return this.ref.getAttribute(`aria-${t}`)}hasAria(t){return this.ref.hasAttribute(`aria-${t}`)}setAria(t,r){return this.ref.setAttribute(`aria-${t}`,r),this}rmAria(t){return this.ref.removeAttribute(`aria-${t}`),this}addClass(...t){return this.ref.classList.add(...t),this}rmClasses(...t){return this.ref.classList.remove(...t),this}rmClass(t){return this.rmClasses(t)}hasClass(t){return this.ref.classList.contains(t)}toggleClass(t){return this.ref.classList.toggle(t),this}onClick(t){return this.on("click",t)}hide(){return this.setAttr("hidden","").setAttr("aria-hidden","true")}show(){return this.rmAttrs("hidden","aria-hidden")}disable(){return this.setAttr("disabled","").setAttr("aria-disabled","true")}enable(){return this.rmAttrs("disabled","aria-disabled")}getTitle(){return this.getAttr("title")}setTitle(t){return this.setAttr("title",t)}getHtml(){return this.ref.innerHTML}setHtml(t){return this.ref.innerHTML=t,this}setShadow(t="open",r,...n){let a=this.ref.shadowRoot??this.ref.attachShadow({mode:t});return r&&(a.innerHTML=r),n.length&&a.adoptedStyleSheets.push(...n),this}getShadow(){if(!this.ref.shadowRoot)throw new Error("No shadow root");return new l(this.ref.shadowRoot)}};var p=class e extends u{static from(t){return new e(t)}static fromTag(t,r){if(!i(t))throw new TypeError(`Expected a string for tagName. Got: ${t} (${typeof t})`);return new u(document.createElement(t,r))}constructor(t){if(!o(t,HTMLElement))throw new TypeError(`Expected a HTMLElement. Got ${t} (${typeof t})`);super(t)}getValue(){if(!f(this.ref,"value"))throw new Error("Element does not have a value property");return this.ref.value}setValue(t){if(!f(this.ref,"value"))throw new Error("Element does not have a value property");return this.ref.value=t,this}getData(t){return this.ref.dataset[t]}hasData(t){return f(this.ref.dataset,t)}setData(t,r){return this.ref.dataset[t]=r,this}setDataObj(t){for(let[r,n]of Object.entries(t))this.setData(r,n);return this}rmData(t){return delete this.ref.dataset[t],this}focus(){return this.ref.focus(),this}click(){return this.ref.click(),this}empty(){return this.ref.innerText="",this}getText(){return this.ref.innerText}setText(t){return this.ref.innerText=t,this}};var T=class{constructor(t,r,n="lazy"){this.href=t;this.as=r;if(!i(t))throw new TypeError(`Expected a string href. Got ${t} (${typeof t})`);if(!["fetch","style"].includes(r))throw new TypeError(`Expected a valid 'as'. Got: ${r} (${typeof r})`);switch(n){case"eager":this.promise;break;case"prefetch":case"preload":this.addLinkPre(n);break;case"lazy":break;default:throw new RangeError(`Expected a valid loading strategy. Got: ${n} (${typeof n})`)}}#t;addLinkPre(t){let r=p.fromTag("link").setAttr("rel",t).setAttr("href",this.href).setAttr("as",this.as);return document.head.append(r.ref),this}get promise(){return this.#t===void 0&&(this.#t=this.fetch()),this.#t}async fetch(){let t=this.as==="fetch"?"html":"css",r=await fetch(this.href,{headers:{Accept:`text/${t}`}});if(!r.ok)throw new Error(`GET ${this.href} failed: ${r.status} ${r.statusText}`);let n=await r.text();return this.as==="fetch"?n:await new CSSStyleSheet().replace(`${n}
|
|
3
|
+
/*# sourceURL=${this.href} */`)}},b=class{constructor(t){this.promise=Promise.resolve(t)}},$=class{constructor(t){if(o(t,HTMLElement)&&(t=p.from(t)),!o(t,p))throw new TypeError(`Expected a HTMLElement or WHE. Got ${t} (${typeof t})`);this.promise=Promise.resolve(t.getHtml())}},x=class{constructor(t){let r=new CSSStyleSheet;this.promise=r.replace(t)}},L=class extends HTMLElement{static setTemplateFile(t,r){return this.jjHtml=new T(t,"fetch",options?.loading),i(options?.shadowMode)&&["open","closed"].includes(options.shadowMode)&&(this.jjShMode=options.shadowMode),this}static setTemplateHtml(t,r){return this.jjHtml=new b(t),i(options?.shadowMode)&&["open","closed"].includes(options.shadowMode)&&(this.jjShMode=options.shadowMode),this}static setTemplateElement(t,r){return this.jjHtml=new $(p.from(t)),i(options?.shadowMode)&&["open","closed"].includes(options.shadowMode)&&(this.jjShMode=options.shadowMode),this}static addStyleFile(t,r){return w(this.jjCss)||(this.jjCss=[]),this.jjCss.push(new T(t,"style",r)),this}static addStyleCss(t){return w(this.jjCss)||(this.jjCss=[]),this.jjCss.push(new x(t)),this}async connectedCallback(){let{jjHtml:t,jjCss:r=[],jjShMode:n="open"}=this.constructor,[a,...d]=await Promise.all([t?.promise,...r.map(M=>M.promise)]);p.from(this).setShadow(n,a,...d)}attributeChangedCallback(t,r,n){if(r!==n){let a=this.constructor.observedAttributes;if(w(a)&&a.includes(t)){let d=j(t);if(f(this,d))return this[d]=n,!0}}return!1}};s.wrap=e=>{if(i(e))return m.from(document.createTextNode(e));if(!c(e))throw new TypeError(`Expected an object to wrap. Got ${e} (${typeof e})`);if(o(e,s))return e;if(o(e,HTMLElement))return p.from(e);if(o(e,Element))return u.from(e);if(o(e,ShadowRoot))return l.from(e);if(o(e,DocumentFragment))return h.from(e);if(o(e,Text))return m.from(e);if(o(e,Node))return s.from(e);throw new TypeError(`Only Frag or DocumentFragment can be wrapped. Got ${e} (${typeof e})`)};s.unwrap=e=>{if(i(e))return document.createTextNode(e);if(!c(e))throw new TypeError(`Expected an object. Got ${e} (${typeof e})`);if(o(e,Node))return e;if(o(e,s))return e.ref;throw new TypeError(`Could not unwrap ${e} (${typeof e})`)};export{L as WC,u as WE,h as WF,p as WHE,s as WN,l as WS,m as WT,H as ensureComponent,j as keb2cam,N as keb2pas,G as nextAnimationFrame,W as off,A as on,D as pas2keb};
|
package/lib/case.d.ts
ADDED
package/lib/case.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export function pas2keb(str) {
|
|
2
|
+
if (typeof str !== 'string') {
|
|
3
|
+
throw new TypeError(`Expected a string. Got ${str} (${typeof str})`);
|
|
4
|
+
}
|
|
5
|
+
if (/[^a-zA-Z0-9_]/.test(str)) {
|
|
6
|
+
throw new TypeError(`Invalid characters in string. Only alphanumeric and underscores are allowed. Got: ${str}`);
|
|
7
|
+
}
|
|
8
|
+
return str
|
|
9
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
10
|
+
.replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
|
|
11
|
+
.replace(/_/g, '-')
|
|
12
|
+
.toLowerCase();
|
|
13
|
+
}
|
|
14
|
+
export function keb2pas(str) {
|
|
15
|
+
if (typeof str !== 'string') {
|
|
16
|
+
throw new TypeError(`Expected a string. Got ${str} (${typeof str})`);
|
|
17
|
+
}
|
|
18
|
+
return (str
|
|
19
|
+
.split('-')
|
|
20
|
+
.filter(Boolean) // Remove empty strings from leading/trailing/multiple hyphens
|
|
21
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
22
|
+
.join('') ||
|
|
23
|
+
// Handle strings that were not kebab-case to begin with (e.g. 'single', 'camelCase')
|
|
24
|
+
(str.length > 0 ? str.charAt(0).toUpperCase() + str.slice(1) : ''));
|
|
25
|
+
}
|
|
26
|
+
export function keb2cam(str) {
|
|
27
|
+
if (typeof str !== 'string') {
|
|
28
|
+
throw new TypeError(`Expected a string. Got ${str} (${typeof str})`);
|
|
29
|
+
}
|
|
30
|
+
return str
|
|
31
|
+
.replace(/^-+|-+$/g, '') // Remove any leading or trailing hyphens
|
|
32
|
+
.replace(/-+([a-z])/g, (g, c) => c.toUpperCase());
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=case.js.map
|
package/lib/case.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"case.js","sourceRoot":"","sources":["../src/case.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,GAAW;IAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,0BAA0B,GAAG,KAAK,OAAO,GAAG,GAAG,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CAAC,qFAAqF,GAAG,EAAE,CAAC,CAAA;IACnH,CAAC;IACD,OAAO,GAAG;SACL,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;SACxC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,WAAW,EAAE,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,0BAA0B,GAAG,KAAK,OAAO,GAAG,GAAG,CAAC,CAAA;IACxE,CAAC;IACD,OAAO,CACH,GAAG;SACE,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC,CAAC,8DAA8D;SAC9E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC;QACb,qFAAqF;QACrF,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACrE,CAAA;AACL,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,0BAA0B,GAAG,KAAK,OAAO,GAAG,GAAG,CAAC,CAAA;IACxE,CAAC;IACD,OAAO,GAAG;SACL,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,yCAAyC;SACjE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;AACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/lib/case.test.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert';
|
|
3
|
+
import { pas2keb, keb2pas, keb2cam } from './case.js';
|
|
4
|
+
describe('pas2keb()', () => {
|
|
5
|
+
it('throws for non-string input', () => {
|
|
6
|
+
assert.throws(() => pas2keb(123), TypeError, 'Should throw for a number');
|
|
7
|
+
assert.throws(() => pas2keb(true), TypeError, 'Should throw for a boolean');
|
|
8
|
+
assert.throws(() => pas2keb(null), TypeError, 'Should throw for null');
|
|
9
|
+
assert.throws(() => pas2keb(undefined), TypeError, 'Should throw for undefined');
|
|
10
|
+
});
|
|
11
|
+
it('converts PascalCase or camelCase to kebab-case', () => {
|
|
12
|
+
assert.strictEqual(pas2keb('PascalCase'), 'pascal-case');
|
|
13
|
+
assert.strictEqual(pas2keb('camelCase'), 'camel-case');
|
|
14
|
+
assert.strictEqual(pas2keb('Hello'), 'hello');
|
|
15
|
+
});
|
|
16
|
+
it('handles consecutive uppercase letters', () => {
|
|
17
|
+
assert.strictEqual(pas2keb('MyHTMLElement'), 'my-html-element');
|
|
18
|
+
assert.strictEqual(pas2keb('isURL'), 'is-url');
|
|
19
|
+
assert.strictEqual(pas2keb('isURLShortener'), 'is-url-shortener');
|
|
20
|
+
});
|
|
21
|
+
it('handles edge cases', () => {
|
|
22
|
+
assert.strictEqual(pas2keb(''), '', 'Should handle empty string');
|
|
23
|
+
assert.strictEqual(pas2keb('A'), 'a');
|
|
24
|
+
assert.strictEqual(pas2keb('I'), 'i');
|
|
25
|
+
});
|
|
26
|
+
it('converts snake_case to kebab-case', () => {
|
|
27
|
+
assert.strictEqual(pas2keb('snake_case'), 'snake-case');
|
|
28
|
+
assert.strictEqual(pas2keb('Snake_Case'), 'snake-case');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('keb2pas()', () => {
|
|
32
|
+
it('throws for non-string input', () => {
|
|
33
|
+
assert.throws(() => keb2pas(123), TypeError, 'Should throw for a number');
|
|
34
|
+
assert.throws(() => keb2pas(true), TypeError, 'Should throw for a boolean');
|
|
35
|
+
assert.throws(() => keb2pas(null), TypeError, 'Should throw for null');
|
|
36
|
+
assert.throws(() => keb2pas(undefined), TypeError, 'Should throw for undefined');
|
|
37
|
+
});
|
|
38
|
+
it('converts kebab-case to PascalCase', () => {
|
|
39
|
+
assert.strictEqual(keb2pas('kebab-case'), 'KebabCase');
|
|
40
|
+
assert.strictEqual(keb2pas('a-b-c'), 'ABC');
|
|
41
|
+
assert.strictEqual(keb2pas('single'), 'Single');
|
|
42
|
+
assert.strictEqual(keb2pas('a'), 'A');
|
|
43
|
+
});
|
|
44
|
+
it('handles edge cases correctly', () => {
|
|
45
|
+
assert.strictEqual(keb2pas(''), '', 'Should handle empty string');
|
|
46
|
+
assert.strictEqual(keb2pas('foo--bar'), 'FooBar', 'Should handle multiple hyphens');
|
|
47
|
+
assert.strictEqual(keb2pas('-foo-bar'), 'FooBar', 'Should handle leading hyphen');
|
|
48
|
+
assert.strictEqual(keb2pas('foo-bar-'), 'FooBar', 'Should handle trailing hyphen');
|
|
49
|
+
});
|
|
50
|
+
it('does not convert other cases', () => {
|
|
51
|
+
assert.strictEqual(keb2pas('camelCase'), 'CamelCase', 'Should only capitalize first letter for camelCase');
|
|
52
|
+
assert.strictEqual(keb2pas('snake_case'), 'Snake_case', 'Should not convert snake_case');
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('keb2cam()', () => {
|
|
56
|
+
it('throws for non-string input', () => {
|
|
57
|
+
assert.throws(() => keb2cam(123), TypeError, 'Should throw for a number');
|
|
58
|
+
assert.throws(() => keb2cam(true), TypeError, 'Should throw for a boolean');
|
|
59
|
+
assert.throws(() => keb2cam(null), TypeError, 'Should throw for null');
|
|
60
|
+
assert.throws(() => keb2cam(undefined), TypeError, 'Should throw for undefined');
|
|
61
|
+
});
|
|
62
|
+
it('converts kebab-case to camelCase', () => {
|
|
63
|
+
assert.strictEqual(keb2cam('kebab-case'), 'kebabCase');
|
|
64
|
+
assert.strictEqual(keb2cam('a-b-c'), 'aBC');
|
|
65
|
+
assert.strictEqual(keb2cam('background-color'), 'backgroundColor');
|
|
66
|
+
});
|
|
67
|
+
it('handles edge cases correctly', () => {
|
|
68
|
+
assert.strictEqual(keb2cam(''), '', 'Should handle empty string');
|
|
69
|
+
assert.strictEqual(keb2cam('single'), 'single', 'Should handle a single word');
|
|
70
|
+
assert.strictEqual(keb2cam('-foo-bar'), 'fooBar', 'Should handle leading hyphen');
|
|
71
|
+
assert.strictEqual(keb2cam('baz-quux-'), 'bazQuux', 'Should handle trailing hyphen');
|
|
72
|
+
assert.strictEqual(keb2cam('car--tux'), 'carTux', 'Should handle multiple hyphens');
|
|
73
|
+
});
|
|
74
|
+
it('does not convert other cases', () => {
|
|
75
|
+
assert.strictEqual(keb2cam('camelCase'), 'camelCase', 'Should not change camelCase');
|
|
76
|
+
assert.strictEqual(keb2cam('snake_case'), 'snake_case', 'Should not convert snake_case');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=case.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"case.test.js","sourceRoot":"","sources":["../src/case.test.ts"],"names":[],"mappings":"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"}
|
package/lib/h.d.ts
ADDED
package/lib/h.js
ADDED
package/lib/h.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h.js","sourceRoot":"","sources":["../src/h.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG9B,MAAM,UAAU,CAAC,CAAC,OAAe,EAAE,UAAkC,EAAE,GAAG,QAAqB;IAC3F,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAA;IACpD,IAAI,UAAU,EAAE,CAAC;QACb,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,GAAG,CAAA;AACd,CAAC"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './util.js';
|
|
2
|
+
export * from './case.js';
|
|
3
|
+
export * from './WN.js';
|
|
4
|
+
export * from './WT.js';
|
|
5
|
+
export * from './WE.js';
|
|
6
|
+
export * from './WHE.js';
|
|
7
|
+
export * from './WDF.js';
|
|
8
|
+
export * from './WSH.js';
|
|
9
|
+
export * from './WC.js';
|
|
10
|
+
import './WN-mixin.js';
|
|
11
|
+
export * from './h.js';
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './util.js';
|
|
2
|
+
export * from './case.js';
|
|
3
|
+
export * from './WN.js';
|
|
4
|
+
export * from './WT.js';
|
|
5
|
+
export * from './WE.js';
|
|
6
|
+
export * from './WHE.js';
|
|
7
|
+
export * from './WDF.js';
|
|
8
|
+
export * from './WSH.js';
|
|
9
|
+
export * from './WC.js';
|
|
10
|
+
import './WN-mixin.js';
|
|
11
|
+
export * from './h.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,OAAO,eAAe,CAAA;AACtB,cAAc,QAAQ,CAAA"}
|
package/lib/util.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Used to Give the UI a moment to update */
|
|
2
|
+
export declare function nextAnimationFrame(): Promise<number>;
|
|
3
|
+
export declare function on(target: EventTarget, eventName: string, handler: EventListenerOrEventListenerObject): void;
|
|
4
|
+
export declare function off(target: EventTarget, eventName: string, handler: EventListenerOrEventListenerObject): void;
|
|
5
|
+
export declare function ensureComponent(name: string, constructor: CustomElementConstructor): Promise<CustomElementConstructor>;
|
package/lib/util.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Used to Give the UI a moment to update */
|
|
2
|
+
export function nextAnimationFrame() {
|
|
3
|
+
return new Promise((resolve) => requestAnimationFrame(resolve));
|
|
4
|
+
}
|
|
5
|
+
export function on(target, eventName, handler) {
|
|
6
|
+
target.addEventListener(eventName, handler);
|
|
7
|
+
}
|
|
8
|
+
export function off(target, eventName, handler) {
|
|
9
|
+
target.removeEventListener(eventName, handler);
|
|
10
|
+
}
|
|
11
|
+
export async function ensureComponent(name, constructor) {
|
|
12
|
+
if (!customElements.get(name)) {
|
|
13
|
+
customElements.define(name, constructor);
|
|
14
|
+
await customElements.whenDefined(name);
|
|
15
|
+
return constructor;
|
|
16
|
+
}
|
|
17
|
+
return constructor;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=util.js.map
|
package/lib/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,UAAU,kBAAkB;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,MAAmB,EAAE,SAAiB,EAAE,OAA2C;IAClG,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,MAAmB,EAAE,SAAiB,EAAE,OAA2C;IACnG,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,IAAY,EACZ,WAAqC;IAErC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QACxC,MAAM,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACtC,OAAO,WAAW,CAAA;IACtB,CAAC;IACD,OAAO,WAAW,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { WF } from './WF.js';
|
|
2
|
+
import { WE } from './WE.js';
|
|
3
|
+
import { WN } from './WN.js';
|
|
4
|
+
import { WHE } from './WHE.js';
|
|
5
|
+
import { WS } from './WS.js';
|
|
6
|
+
import { WT } from './WT.js';
|
|
7
|
+
export type Wrappable = WN | Node | string;
|
|
8
|
+
export type Wrapped = WHE | WE | WF | WF | WS | WT | WN;
|
|
9
|
+
/**
|
|
10
|
+
* @returns the most granual Wrapped subclass.
|
|
11
|
+
*/
|
|
12
|
+
export declare function wrap(raw: Wrappable): Wrapped;
|
|
13
|
+
export declare function wrapAll(iterable: Iterable<Wrappable>): Wrapped[];
|
|
14
|
+
export type Unwrapped = HTMLElement | Element | ShadowRoot | DocumentFragment | Text | Node;
|
|
15
|
+
/**
|
|
16
|
+
* @returns the original DOM node wrapped in the appropriate class
|
|
17
|
+
*/
|
|
18
|
+
export declare function unwrap(obj: Wrappable): Unwrapped;
|
|
19
|
+
/**
|
|
20
|
+
* unwraps an iteratable object (e.g. an array of HTMLCollection)
|
|
21
|
+
*/
|
|
22
|
+
export declare function unwrapAll(iterable: Iterable<Wrappable>): Unwrapped[];
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { WF } from './WF.js';
|
|
2
|
+
import { WE } from './WE.js';
|
|
3
|
+
import { isA, isObj, isStr } from 'jty';
|
|
4
|
+
import { WN } from './WN.js';
|
|
5
|
+
import { WHE } from './WHE.js';
|
|
6
|
+
import { WS } from './WS.js';
|
|
7
|
+
import { WT } from './WT.js';
|
|
8
|
+
/**
|
|
9
|
+
* @returns the most granual Wrapped subclass.
|
|
10
|
+
*/
|
|
11
|
+
export function wrap(raw) {
|
|
12
|
+
if (isStr(raw)) {
|
|
13
|
+
return new WT(raw);
|
|
14
|
+
}
|
|
15
|
+
if (!isObj(raw)) {
|
|
16
|
+
throw new TypeError(`Expected an object to wrap. Got ${raw} (${typeof raw})`);
|
|
17
|
+
}
|
|
18
|
+
if (isA(raw, WN)) {
|
|
19
|
+
return raw;
|
|
20
|
+
}
|
|
21
|
+
if (isA(raw, HTMLElement)) {
|
|
22
|
+
return new WHE(raw);
|
|
23
|
+
}
|
|
24
|
+
if (isA(raw, Element)) {
|
|
25
|
+
return new WE(raw);
|
|
26
|
+
}
|
|
27
|
+
if (isA(raw, ShadowRoot)) {
|
|
28
|
+
return new WS(raw);
|
|
29
|
+
}
|
|
30
|
+
if (isA(raw, DocumentFragment)) {
|
|
31
|
+
return new WF(raw);
|
|
32
|
+
}
|
|
33
|
+
if (isA(raw, Text)) {
|
|
34
|
+
return new WT(raw);
|
|
35
|
+
}
|
|
36
|
+
if (isA(raw, Node)) {
|
|
37
|
+
return new WN(raw);
|
|
38
|
+
}
|
|
39
|
+
throw new TypeError(`Only Frag or DocumentFragment can be wrapped. Got ${raw} (${typeof raw})`);
|
|
40
|
+
}
|
|
41
|
+
export function wrapAll(iterable) {
|
|
42
|
+
return Array.from(iterable, wrap);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @returns the original DOM node wrapped in the appropriate class
|
|
46
|
+
*/
|
|
47
|
+
export function unwrap(obj) {
|
|
48
|
+
if (isStr(obj)) {
|
|
49
|
+
return document.createTextNode(obj);
|
|
50
|
+
}
|
|
51
|
+
if (!isObj(obj)) {
|
|
52
|
+
throw new TypeError(`Expected an object. Got ${obj} (${typeof obj})`);
|
|
53
|
+
}
|
|
54
|
+
if (obj instanceof Node) {
|
|
55
|
+
return obj;
|
|
56
|
+
}
|
|
57
|
+
if (obj instanceof WN) {
|
|
58
|
+
return obj.ref;
|
|
59
|
+
}
|
|
60
|
+
throw new TypeError(`Could not unwrap ${obj} (${typeof obj})`);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* unwraps an iteratable object (e.g. an array of HTMLCollection)
|
|
64
|
+
*/
|
|
65
|
+
export function unwrapAll(iterable) {
|
|
66
|
+
return Array.from(iterable, unwrap);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=wrap-unwrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap-unwrap.js","sourceRoot":"","sources":["../src/wrap-unwrap.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,28 +1,58 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
2
|
+
"name": "jj",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "A minimal DOM manipulation library with web components",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"javascript",
|
|
7
|
+
"language",
|
|
8
|
+
"DOM",
|
|
9
|
+
"typescript",
|
|
10
|
+
"imperative programming"
|
|
11
|
+
],
|
|
12
|
+
"type": "module",
|
|
13
|
+
"main": "./lib/index.js",
|
|
14
|
+
"unpkg": "./lib/bundle.js",
|
|
15
|
+
"exports": {
|
|
16
|
+
"types": "./lib/index.d.ts",
|
|
17
|
+
"import": "./lib/index.js"
|
|
18
|
+
},
|
|
19
|
+
"directories": {
|
|
20
|
+
"lib": "lib",
|
|
21
|
+
"doc": "doc",
|
|
22
|
+
"test": "test"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"lib"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"doc": "typedoc src/index.ts",
|
|
29
|
+
"build": "tsc",
|
|
30
|
+
"bundle": "esbuild src/index.ts --bundle --outfile=lib/bundle.js --format=esm --sourcemap",
|
|
31
|
+
"bundle:min": "esbuild src/index.ts --bundle --outfile=lib/bundle.min.js --format=esm --minify",
|
|
32
|
+
"typecheck": "tsc --noEmit",
|
|
33
|
+
"fmt": "prettier --write .",
|
|
34
|
+
"test": "npm run typecheck && node --import tsx --test",
|
|
35
|
+
"test:watch": "npm run typecheck && node --import tsx --test --watch",
|
|
36
|
+
"test:coverage": "npm run typecheck && node --import tsx --test --experimental-test-coverage",
|
|
37
|
+
"preversion": "npm run fmt && npm t",
|
|
38
|
+
"prepublishOnly": "npm run build && npm run bundle",
|
|
39
|
+
"postversion": "git push && git push --tags"
|
|
40
|
+
},
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git+https://github.com/alexewerlof/jj.git"
|
|
44
|
+
},
|
|
45
|
+
"author": "Alex Ewerlöf",
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^24.7.2",
|
|
49
|
+
"esbuild": "^0.27.2",
|
|
50
|
+
"prettier": "^3.6.2",
|
|
51
|
+
"tsx": "^4.20.6",
|
|
52
|
+
"typedoc": "^0.28.14",
|
|
53
|
+
"typescript": "^5.9.3"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"jty": "^4.0.0"
|
|
57
|
+
}
|
|
28
58
|
}
|