@ahriknow/lux 0.0.1
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 +127 -0
- package/README_zh-CN.md +127 -0
- package/dist/components/lux-button/index.iife.min.js +292 -0
- package/dist/components/lux-button/index.min.js +292 -0
- package/dist/components/lux-code/index.iife.min.js +290 -0
- package/dist/components/lux-code/index.min.js +290 -0
- package/dist/components/lux-dropdown/index.iife.min.js +162 -0
- package/dist/components/lux-dropdown/index.min.js +162 -0
- package/dist/components/lux-example/index.iife.min.js +88 -0
- package/dist/components/lux-example/index.min.js +88 -0
- package/dist/components/lux-icon/index.iife.min.js +22 -0
- package/dist/components/lux-icon/index.min.js +22 -0
- package/dist/components/lux-input/index.iife.min.js +238 -0
- package/dist/components/lux-input/index.min.js +238 -0
- package/dist/components/lux-layout/index.iife.min.js +90 -0
- package/dist/components/lux-layout/index.min.js +90 -0
- package/dist/components/lux-menu/index.iife.min.js +193 -0
- package/dist/components/lux-menu/index.min.js +193 -0
- package/dist/components/lux-scroll/index.iife.min.js +137 -0
- package/dist/components/lux-scroll/index.min.js +137 -0
- package/dist/components/lux-switch/index.iife.min.js +116 -0
- package/dist/components/lux-switch/index.min.js +116 -0
- package/dist/components/lux-table/index.iife.min.js +67 -0
- package/dist/components/lux-table/index.min.js +67 -0
- package/dist/lux.core.min.js +1 -0
- package/dist/lux.i18n.min.js +1 -0
- package/dist/lux.iife.js +1822 -0
- package/dist/lux.iife.js.map +1 -0
- package/dist/lux.iife.min.js +1 -0
- package/dist/lux.js +1792 -0
- package/dist/lux.js.map +1 -0
- package/dist/lux.min.js +1 -0
- package/dist/lux.router.min.js +1 -0
- package/dist/lux.template.min.js +1 -0
- package/dist/lux.theme.min.js +1 -0
- package/dist/themes/dark.css +130 -0
- package/dist/themes/light.css +128 -0
- package/package.json +64 -0
- package/src/components/lux-button/index.js +319 -0
- package/src/components/lux-code/index.js +382 -0
- package/src/components/lux-dropdown/index.js +256 -0
- package/src/components/lux-example/index.js +117 -0
- package/src/components/lux-icon/index.js +180 -0
- package/src/components/lux-input/index.js +363 -0
- package/src/components/lux-layout/index.js +222 -0
- package/src/components/lux-menu/index.js +283 -0
- package/src/components/lux-scroll/index.js +349 -0
- package/src/components/lux-switch/index.js +203 -0
- package/src/components/lux-table/index.js +105 -0
- package/src/core.js +7 -0
- package/src/element.js +477 -0
- package/src/i18n/format.js +108 -0
- package/src/i18n/index.js +102 -0
- package/src/i18n/locale.js +26 -0
- package/src/index.js +22 -0
- package/src/router.js +330 -0
- package/src/template.js +402 -0
- package/src/theme/color.js +148 -0
- package/src/theme/create.js +97 -0
- package/src/theme/index.js +2 -0
- package/src/theme/tokens.js +128 -0
- package/src/themes/dark.css +130 -0
- package/src/themes/light.css +128 -0
package/dist/lux.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lux.js","sources":["../src/template.js","../src/element.js","../src/router.js","../src/i18n/format.js","../src/i18n/locale.js","../src/i18n/index.js","../src/theme/color.js","../src/theme/tokens.js","../src/theme/create.js","../src/index.js"],"sourcesContent":["/**\n * Lux Template System\n *\n * Supports:\n * - html/svg tagged templates with template caching\n * - Child text interpolation: <div>${value}</div>\n * - Event binding: <button @click=${handler}>\n * - Property binding: <input .value=${val}>\n * - Boolean attribute: <div ?hidden=${cond}>\n * - Plain attribute: <div id=${val}>\n * - Class binding: <div class=${classMap({...})}>\n * - Style binding: <div style=${styleMap({...})}>\n * - Ref binding: <input ref=${el => ...}>\n * - Directives: repeat, when, classMap, styleMap, guard, show\n * - Template caching, incremental DOM updates\n * - nothing sentinel for clearing content\n */\n\n// ─── Template type markers ───\nexport const HTML_RESULT = 1;\nexport const SVG_RESULT = 2;\n\n// ─── Sentinels ───\nexport const nothing = Symbol.for('lux-nothing');\n\n// ─── Template cache ───\nconst templateCache = new WeakMap();\n\n// ─── html / svg tagged template functions ───\nexport function html(strings, ...values) {\n return { _$luxType$: HTML_RESULT, strings, values };\n}\n\nexport function svg(strings, ...values) {\n return { _$luxType$: SVG_RESULT, strings, values };\n}\n\nexport function css(strings, ...values) {\n return { _$luxType$: 3, strings, values };\n}\n\nexport function isTemplateResult(value) {\n return value && value._$luxType$ !== undefined;\n}\n\n// ─── HTML escaping ──\nexport function escapeHtml(value) {\n if (value == null) return '';\n const str = String(value);\n if (str.indexOf('<') === -1 && str.indexOf('>') === -1 && str.indexOf('&') === -1) return str;\n return str.replace(\n /[<>&\"']/g,\n (c) => ({ '<': '<', '>': '>', '&': '&', '\"': '"', \"'\": ''' })[c]\n );\n}\n\n// ─── Part marker regex ──\nconst ATTR_BINDING_RE = /(?:([@.?][\\w-]+)|(ref)|(class))=\\s*$/;\n\n// ─── Template parsing ──\nfunction parseTemplate(strings) {\n const parts = [];\n let html = '';\n for (let i = 0; i < strings.length; i++) {\n html += strings[i];\n if (i < strings.length - 1) {\n const attrMatch = html.match(ATTR_BINDING_RE);\n if (attrMatch) {\n const prefixed = attrMatch[1];\n const isRef = !!attrMatch[2];\n const isClass = !!attrMatch[3];\n let prefix = '';\n let name = '';\n if (prefixed) {\n prefix = prefixed[0];\n name = prefixed.slice(1);\n } else if (isRef) {\n prefix = 'ref';\n name = 'ref';\n } else if (isClass) {\n prefix = 'class';\n name = 'class';\n }\n const marker = `lux-attr-${i}`;\n html = html.slice(0, -attrMatch[0].length) + `${marker}=\"${name}\" `;\n parts.push({ type: 'attr', name, prefix, marker, index: i });\n } else {\n const marker = `lux-${i}`;\n html += `<!--${marker}-->`;\n parts.push({ type: 'child', marker, index: i });\n }\n }\n }\n return { html, parts };\n}\n\n// ─── Commit functions ──\n\nfunction commitValue(container, value, context) {\n if (value === nothing || value == null) {\n clearContainer(container);\n return;\n }\n\n if (isRepeatResult(value)) {\n commitRepeat(container, value, context);\n return;\n }\n\n if (isTemplateResult(value)) {\n render(value, container, context);\n return;\n }\n\n if (Array.isArray(value)) {\n clearContainer(container);\n for (const item of value) {\n if (isTemplateResult(item)) {\n const span = document.createElement('span');\n span.style.display = 'contents';\n render(item, span, context);\n container.appendChild(span);\n } else if (item instanceof Node) {\n container.appendChild(item);\n } else if (item != null && item !== false) {\n container.appendChild(document.createTextNode(String(item)));\n }\n }\n return;\n }\n\n if (value instanceof Node) {\n clearContainer(container);\n container.appendChild(value);\n return;\n }\n\n // Primitive — replace content (don't append)\n if (container.childNodes.length === 1 && container.firstChild.nodeType === Node.TEXT_NODE) {\n container.firstChild.textContent = String(value);\n } else {\n clearContainer(container);\n container.appendChild(document.createTextNode(String(value)));\n }\n}\n\nfunction clearContainer(container) {\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n}\n\nfunction commitAttrPart(part, value) {\n const { element, name, prefix } = part;\n\n switch (prefix) {\n case '@': {\n // Event binding\n const oldHandler = part.committedValue;\n\n // Determine if we should remove/add based on value changes\n const isNothing = value == null || value === nothing;\n const shouldRemoveListener =\n (isNothing && oldHandler != null) ||\n value?.capture !== oldHandler?.capture ||\n value?.once !== oldHandler?.once ||\n value?.passive !== oldHandler?.passive;\n\n const shouldAddListener = !isNothing && (oldHandler == null || shouldRemoveListener);\n\n if (shouldRemoveListener) {\n element.removeEventListener(name, part._handler || oldHandler, oldHandler);\n }\n\n if (shouldAddListener) {\n if (typeof value === 'function') {\n // Wrap handler to preserve `this` as the host element\n const host =\n part._host ||\n (part._host = {\n handleEvent(e) {\n const fn = part.committedValue;\n if (typeof fn === 'function') {\n // Use host element (custom element instance) as `this`\n const hostEl = element.getRootNode().host || element;\n fn.call(hostEl, e);\n }\n },\n });\n part._handler = host;\n element.addEventListener(name, host);\n } else if (typeof value === 'object' && value?.handleEvent) {\n // EventListenerObject: { handleEvent(event) }\n const host = { handleEvent: (e) => value.handleEvent.call(value, e) };\n part._handler = host;\n element.addEventListener(name, host, {\n capture: value.capture,\n once: value.once,\n passive: value.passive,\n });\n }\n }\n\n part.committedValue = value;\n break;\n }\n case '.': {\n // Property binding\n element[name] = value === nothing ? undefined : value;\n break;\n }\n case '?': {\n // Boolean attribute binding\n element.toggleAttribute(name, !!value);\n break;\n }\n case 'ref': {\n // Ref binding\n if (typeof value === 'function') {\n value(element);\n }\n break;\n }\n case 'class': {\n // Class binding\n if (typeof value === 'string') {\n element.className = value;\n } else if (typeof value === 'object' && value != null) {\n const existing = element.className || '';\n const names = existing ? existing.split(/\\s+/) : [];\n for (const [cls, active] of Object.entries(value)) {\n if (active) {\n if (!names.includes(cls)) names.push(cls);\n } else {\n const idx = names.indexOf(cls);\n if (idx !== -1) names.splice(idx, 1);\n }\n }\n element.className = names.filter(Boolean).join(' ');\n }\n break;\n }\n default: {\n // Plain attribute\n if (value == null || value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : String(value));\n }\n }\n }\n}\n\n// ─── render() function ──\n\nexport function render(result, container, context) {\n if (!isTemplateResult(result)) {\n container.textContent = result ?? '';\n return;\n }\n\n const { strings, values } = result;\n\n // Incremental update\n if (container._luxActiveParts && container._luxStrings === strings) {\n for (const part of container._luxActiveParts) {\n if (part.index < values.length) {\n if (part.type === 'child') {\n commitValue(part.span, values[part.index], context);\n } else {\n commitAttrPart(part, values[part.index]);\n }\n }\n }\n return;\n }\n\n // First render — build part list\n const tpl = document.createElement('template');\n const parsed = parseTemplate(strings);\n tpl.innerHTML = parsed.html;\n const fragment = tpl.content.cloneNode(true);\n const activeParts = [];\n\n for (const part of parsed.parts) {\n if (part.type === 'child') {\n const walker = document.createTreeWalker(fragment, NodeFilter.SHOW_COMMENT);\n let node;\n while ((node = walker.nextNode())) {\n if (node.data === part.marker) {\n const span = document.createElement('span');\n span.style.display = 'contents';\n node.parentNode.replaceChild(span, node);\n commitValue(span, values[part.index], context);\n activeParts.push({ type: 'child', span, index: part.index });\n break;\n }\n }\n } else {\n const element = fragment.querySelector(`[${part.marker}]`);\n if (element) {\n element.removeAttribute(part.marker);\n const ap = {\n type: 'attr',\n element,\n name: part.name,\n prefix: part.prefix,\n index: part.index,\n committedValue: undefined,\n };\n commitAttrPart(ap, values[part.index]);\n activeParts.push(ap);\n }\n }\n }\n\n container.textContent = '';\n container.appendChild(fragment);\n container._luxActiveParts = activeParts;\n container._luxStrings = strings;\n}\n\n// ─── Directives ──\n\n/**\n * repeat(items, keyFn, renderFn) — keyed list rendering\n */\nexport function repeat(items, keyFn, renderFn) {\n return { _type: 'repeat', items, keyFn, renderFn };\n}\n\nfunction isRepeatResult(value) {\n return value && value._type === 'repeat';\n}\n\nfunction commitRepeat(container, value, context) {\n const { items, keyFn, renderFn } = value;\n const state = container._repeatState;\n\n // Clear old content\n if (state) {\n for (const entry of state.entries) {\n if (entry.span && entry.span.parentNode) {\n entry.span.parentNode.removeChild(entry.span);\n }\n }\n }\n\n // Build new content\n const frag = document.createDocumentFragment();\n const entries = [];\n for (const item of items) {\n const key = keyFn(item);\n const result = renderFn(item);\n const span = document.createElement('span');\n span.style.display = 'contents';\n if (isTemplateResult(result)) {\n render(result, span, context);\n } else if (result != null && result !== false) {\n span.appendChild(document.createTextNode(String(result)));\n }\n frag.appendChild(span);\n entries.push({ key, result, span });\n }\n container.appendChild(frag);\n container._repeatState = { entries };\n}\n\n/**\n * when(condition, trueFn, falseFn) — conditional rendering\n */\nexport function when(condition, trueFn, falseFn = () => '') {\n return condition ? trueFn() : falseFn();\n}\n\n/**\n * show(condition, content) — show/hide element\n */\nexport function show(condition, content = '') {\n return condition ? content : '';\n}\n\n/**\n * classMap(classes) — dynamic class binding helper\n */\nexport function classMap(classes) {\n return classes;\n}\n\n/**\n * styleMap(styles) — dynamic style binding helper\n */\nexport function styleMap(styles) {\n return styles;\n}\n\n/**\n * guard(dependencies, fn) — re-render only when dependencies change\n */\nexport function guard(dependencies, fn) {\n return fn();\n}\n","/**\n * LuxElement — Base class for Web Components.\n *\n * Inherits: HTMLElement → LuxElement\n * Features: reactive properties, Shadow DOM, lifecycle, controllers, update batching\n */\n\nimport { html, render, isTemplateResult } from './template.js';\n\n// ─── Update scheduling ───\nconst pendingUpdates = new Set();\nlet updateScheduled = false;\n\nfunction scheduleMicroTask(fn) {\n Promise.resolve().then(fn);\n}\n\nfunction enqueueUpdate(element) {\n pendingUpdates.add(element);\n if (!updateScheduled) {\n updateScheduled = true;\n scheduleMicroTask(() => {\n updateScheduled = false;\n const elements = [...pendingUpdates];\n pendingUpdates.clear();\n for (const el of elements) {\n el._$performUpdate();\n }\n });\n }\n}\n\n// ─── Default converter (attribute ↔ property) ───\nconst defaultConverter = {\n toAttribute(value, type) {\n switch (type) {\n case Boolean:\n return value ? '' : null;\n case Object:\n case Array:\n return value == null ? null : JSON.stringify(value);\n default:\n return value;\n }\n },\n fromAttribute(value, type) {\n switch (type) {\n case Boolean:\n return value !== null;\n case Number:\n return Number(value);\n case Object:\n case Array:\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n default:\n return value;\n }\n },\n};\n\n// ─── LuxElement ───\nexport class LuxElement extends HTMLElement {\n // ─── Static: properties declaration ───\n static properties = {};\n static styles = undefined;\n\n // ─── Static: finalization ───\n static finalized = false;\n static elementProperties = new Map();\n\n // ─── Static: __prepare() — subclass isolation ───\n static __prepare() {\n if (this.hasOwnProperty('elementProperties')) {\n return;\n }\n // Finalize any superclasses first\n const superCtor = Object.getPrototypeOf(this);\n if (superCtor.finalize) {\n superCtor.finalize();\n }\n // Copy superclass elementProperties into own Map\n this.elementProperties = new Map(superCtor.elementProperties);\n }\n\n static get observedAttributes() {\n this.finalize();\n return this.__attributeToPropertyMap ? [...this.__attributeToPropertyMap.keys()] : [];\n }\n\n static finalize() {\n if (this.hasOwnProperty('finalized')) {\n return;\n }\n this.finalized = true;\n this.__prepare();\n\n // Create properties from the static properties block\n if (this.hasOwnProperty('properties')) {\n const props = this.properties;\n const propKeys = [\n ...Object.getOwnPropertyNames(props),\n ...Object.getOwnPropertySymbols(props),\n ];\n for (const p of propKeys) {\n this.createProperty(p, props[p]);\n }\n }\n\n // Create the attribute-to-property map\n this.__attributeToPropertyMap = new Map();\n for (const [p, options] of this.elementProperties) {\n const attr = this.__attributeNameForProperty(p, options);\n if (attr !== undefined) {\n this.__attributeToPropertyMap.set(attr, p);\n }\n }\n\n this.elementStyles = this.styles;\n }\n\n static __attributeNameForProperty(name, options) {\n const attribute = options.attribute;\n return attribute === false\n ? undefined\n : typeof attribute === 'string'\n ? attribute\n : typeof name === 'string'\n ? name.replace(/([A-Z])/g, '-$1').toLowerCase()\n : undefined;\n }\n\n // ─── Static: createProperty ───\n static createProperty(name, options = {}) {\n this.__prepare();\n if (this.elementProperties.has(name)) return;\n\n if (options.state) {\n options = { ...options, attribute: false };\n }\n\n this.elementProperties.set(name, options);\n\n if (!options.noAccessor) {\n const key = Symbol();\n const descriptor = this.getPropertyDescriptor(name, key, options);\n if (descriptor !== undefined) {\n Object.defineProperty(this.prototype, name, descriptor);\n }\n }\n }\n\n static getPropertyDescriptor(name, key, options) {\n const { type, reflect, converter } = options;\n const toAttribute = converter?.toAttribute ?? defaultConverter.toAttribute;\n\n return {\n get() {\n return this[key];\n },\n set(value) {\n const oldValue = this[key];\n this[key] = value;\n this.requestUpdate(name, oldValue, options);\n },\n configurable: true,\n enumerable: true,\n };\n }\n\n // ─── Static: addInitializer ───\n static _initializers = [];\n\n static addInitializer(fn) {\n this._initializers = [...(this._initializers || []), fn];\n }\n\n // ─── Static: shadowRootOptions ───\n static shadowRootOptions = { mode: 'open' };\n\n // ─── Constructor ───\n constructor() {\n super();\n\n this.__updatePending = false;\n this.__hasUpdated = false;\n this.__controllers = new Set();\n this.__reflectingProperty = null;\n\n // Ensure finalized\n if (!this.constructor.hasOwnProperty('finalized')) {\n this.constructor.finalize();\n }\n\n // CloneNode support: save any properties set before upgrade\n this.__saveInstanceProperties();\n\n this.requestUpdate();\n\n for (const fn of this.constructor._initializers || []) {\n fn(this);\n }\n }\n\n // ─── Instance properties save/replay (cloneNode support) ───\n __saveInstanceProperties() {\n const elementProperties = this.constructor.elementProperties;\n if (!elementProperties) return;\n\n for (const [name, options] of elementProperties) {\n if (options.noAccessor) continue;\n\n if (this.hasOwnProperty(name)) {\n // Plain property set before setter was defined (cloneNode)\n const value = this[name];\n delete this[name];\n // Store via the Symbol key\n this.__instancePropertyValues = this.__instancePropertyValues || new Map();\n this.__instancePropertyValues.set(name, value);\n }\n }\n }\n\n // ─── Lifecycle callbacks ───\n connectedCallback() {\n this.__controllers.forEach((c) => c.hostConnected?.());\n\n // Ensure finalized\n if (!this.constructor.hasOwnProperty('finalized')) {\n this.constructor.finalize();\n }\n\n // Sync existing attributes to properties (upgrade scenario)\n // attributeChangedCallback doesn't fire for pre-existing attributes\n const attrMap = this.constructor.__attributeToPropertyMap;\n if (attrMap) {\n for (const [attrName, propName] of attrMap) {\n const value = this.getAttribute(attrName);\n if (value !== null) {\n const options = this.constructor.elementProperties.get(propName);\n if (options) {\n const fromAttr =\n options.converter?.fromAttribute ?? defaultConverter.fromAttribute;\n this[propName] = fromAttr(value, options.type);\n }\n }\n }\n }\n\n // Replay instance properties saved by __saveInstanceProperties (cloneNode)\n if (this.__instancePropertyValues) {\n for (const [name, value] of this.__instancePropertyValues) {\n this[name] = value;\n }\n this.__instancePropertyValues = undefined;\n }\n\n // Ensure renderRoot is created\n this.renderRoot;\n\n // Trigger first update if not yet done\n if (!this.__hasUpdated) {\n this.requestUpdate();\n }\n }\n\n disconnectedCallback() {\n this.__controllers.forEach((c) => c.hostDisconnected?.());\n }\n\n attributeChangedCallback(name, _old, value) {\n const propName = this.constructor.__attributeToPropertyMap?.get(name);\n if (propName !== undefined && this.__reflectingProperty !== propName) {\n const options = this.constructor.elementProperties.get(propName);\n if (options) {\n const converter =\n typeof options.converter === 'function'\n ? { fromAttribute: options.converter }\n : options.converter?.fromAttribute !== undefined\n ? options.converter\n : defaultConverter;\n this.__reflectingProperty = propName;\n const convertedValue = converter.fromAttribute(value, options.type);\n this[propName] = convertedValue;\n this.__reflectingProperty = null;\n }\n }\n }\n\n // ─── RenderRoot & Styles ───\n get renderRoot() {\n if (!this._renderRoot) {\n this._renderRoot = this.createRenderRoot();\n this.__adoptStyles();\n }\n return this._renderRoot;\n }\n\n createRenderRoot() {\n return this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);\n }\n\n __adoptStyles() {\n const styles = this.constructor.elementStyles;\n if (!styles) return;\n\n const items = Array.isArray(styles) ? styles : [styles];\n const parts = [];\n for (const item of items) {\n if (typeof item === 'string') {\n parts.push(item);\n } else if (isTemplateResult(item)) {\n parts.push(item.strings.join(''));\n }\n }\n if (parts.length === 0) return;\n\n if (this._renderRoot.adoptedStyleSheets !== undefined) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(parts.join('\\n'));\n this._renderRoot.adoptedStyleSheets = [...this._renderRoot.adoptedStyleSheets, sheet];\n } else {\n const tag = document.createElement('style');\n tag.textContent = parts.join('\\n');\n this._renderRoot.appendChild(tag);\n }\n }\n\n // ─── Update lifecycle ───\n enableUpdating(_requestedUpdate) {}\n\n get updateComplete() {\n return this.__updateCompletePromise ?? Promise.resolve();\n }\n\n get hasUpdated() {\n return this.__hasUpdated;\n }\n\n get isUpdatePending() {\n return this.__updatePending;\n }\n\n requestUpdate(name, oldValue, options) {\n if (name !== undefined) {\n const hasChanged = options?.hasChanged ?? ((v, o) => !Object.is(v, o));\n if (!hasChanged(this[name], oldValue)) return;\n }\n\n if (!this.__updatePending) {\n this.__updatePending = true;\n enqueueUpdate(this);\n }\n }\n\n async performUpdate() {\n if (!this.isUpdatePending) return;\n\n this.__updatePending = false;\n\n this.willUpdate(new Map());\n\n this.__controllers.forEach((c) => c.hostUpdate?.());\n\n this.update(new Map());\n\n this.__hasUpdated = true;\n\n // Reflect properties to attributes after update\n for (const [name, options] of this.constructor.elementProperties) {\n if (options.reflect) {\n const value = this[name];\n const toAttribute = options.converter?.toAttribute ?? defaultConverter.toAttribute;\n const attr = this.constructor.__attributeNameForProperty(name, options);\n if (attr !== undefined) {\n this.__reflectingProperty = name;\n const attrValue = toAttribute(value, options.type);\n if (attrValue === null || attrValue === undefined) {\n this.removeAttribute(attr);\n } else {\n this.setAttribute(attr, String(attrValue));\n }\n this.__reflectingProperty = null;\n }\n }\n }\n\n this.__controllers.forEach((c) => c.hostUpdated?.());\n this.firstUpdated(new Map());\n this.updated(new Map());\n }\n\n _$performUpdate() {\n this.performUpdate();\n }\n\n // ─── Lifecycle hooks ───\n shouldUpdate(_changedProperties) {\n return true;\n }\n\n willUpdate(_changedProperties) {}\n\n update(_changedProperties) {\n const result = this.render();\n if (result) {\n render(result, this.renderRoot, { host: this });\n }\n }\n\n render() {\n return html``;\n }\n\n firstUpdated(_changedProperties) {}\n updated(_changedProperties) {}\n propertyChangedCallback(_name, _oldValue, _newValue) {}\n\n // ─── Controller API ───\n addController(controller) {\n this.__controllers.add(controller);\n if (this.isConnected) {\n controller.hostConnected?.();\n }\n }\n\n removeController(controller) {\n this.__controllers.delete(controller);\n }\n\n // ─── Utilities ───\n emit(type, detail, options = {}) {\n return this.dispatchEvent(\n new CustomEvent(type, {\n detail,\n bubbles: true,\n composed: true,\n ...options,\n })\n );\n }\n\n $(selector) {\n return this.renderRoot.querySelector(selector);\n }\n\n $$(selector) {\n return this.renderRoot.querySelectorAll(selector);\n }\n}\n\n// ─── Register component ───\nexport function registerComponent(name, component) {\n if (!name.includes('-')) {\n throw new Error(`Component name must contain a hyphen: ${name}`);\n }\n if (!customElements.get(name)) {\n customElements.define(name, component);\n }\n}\n\n// ─── createComponent (function-based components) ───\nexport function createComponent(renderFn, options = {}) {\n const { properties = {} } = options;\n\n class DynamicComponent extends LuxElement {\n static properties = properties;\n render() {\n return renderFn.call(this, this);\n }\n }\n\n return DynamicComponent;\n}\n","/**\n * Lux Router - Hash-based SPA routing\n *\n * Usage:\n * const router = createRouter({ routes: [...] });\n * router.push('/users/123');\n *\n * Routes accept component classes or lazy loaders:\n * { path: '/', component: HomePage } // direct class\n * { path: '/admin', component: () => import('./admin.js') } // lazy\n */\n\nfunction registerComponent(name, component) {\n if (!name.includes('-')) throw new Error(`Component name must contain a hyphen: ${name}`);\n if (!customElements.get(name)) customElements.define(name, component);\n}\n\n// ─── Route matching ───\n\nfunction pathToRegex(pattern) {\n let seg = pattern.replace(/\\/+$/, '') || '/';\n if (seg === '/') return /^\\/?$/;\n const re = '^' + seg.replace(/:(\\w+)/g, '([^/]+)').replace(/\\(\\.\\*\\)/g, '(.*)') + '$';\n return new RegExp(re);\n}\n\nfunction extractParamNames(pattern) {\n const names = [];\n const re = /:(\\w+)/g;\n let m;\n while ((m = re.exec(pattern))) names.push(m[1]);\n return names;\n}\n\nfunction parseQuery(hash) {\n const idx = hash.indexOf('?');\n if (idx === -1) return {};\n const params = {};\n for (const pair of hash.slice(idx + 1).split('&')) {\n const [k, v] = pair.split('=');\n if (k) params[decodeURIComponent(k)] = v ? decodeURIComponent(v) : '';\n }\n return params;\n}\n\nfunction getPathFromHash(hash) {\n return hash.replace(/^#/, '').split('?')[0] || '/';\n}\n\n// ─── Component registry ───\n\nconst componentRegistry = new Map(); // tagName → class\n\nfunction resolveComponent(componentOrLoader) {\n if (typeof componentOrLoader === 'string') {\n return Promise.resolve(componentOrLoader);\n }\n if (\n typeof componentOrLoader === 'function' &&\n componentOrLoader.prototype instanceof HTMLElement\n ) {\n return ensureRegistered(componentOrLoader);\n }\n if (typeof componentOrLoader === 'function') {\n // Assume lazy loader: () => import(...)\n return componentOrLoader().then((mod) => {\n const Comp = mod.default || mod[Object.keys(mod)[0]];\n return ensureRegistered(Comp);\n });\n }\n return Promise.resolve(null);\n}\n\nfunction ensureRegistered(ComponentClass) {\n if (!ComponentClass || !ComponentClass.prototype) return Promise.resolve(null);\n\n const tagName = ComponentClass.tagName || classToTag(ComponentClass.name);\n\n // Already registered?\n if (customElements.get(tagName)) {\n return Promise.resolve(tagName);\n }\n\n registerComponent(tagName, ComponentClass);\n return Promise.resolve(tagName);\n}\n\nfunction classToTag(name) {\n // HomePage → home-page, UserProfile → user-profile\n return name\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()\n .replace(/^-/, '');\n}\n\n// ─── Router class ───\n\nclass Router {\n constructor(options = {}) {\n this.routes = (options.routes || []).map((r) => ({\n ...r,\n _regex: pathToRegex(r.path),\n _paramNames: extractParamNames(r.path),\n _children: (r.children || []).map((c) => ({\n ...c,\n _regex: pathToRegex(c.path),\n _paramNames: extractParamNames(c.path),\n })),\n }));\n\n this._guards = [];\n this._listeners = [];\n this.current = null;\n this._prev = null;\n this._onHashChange = this._onHashChange.bind(this);\n }\n\n start() {\n window.addEventListener('hashchange', this._onHashChange);\n this._resolve();\n }\n\n stop() {\n window.removeEventListener('hashchange', this._onHashChange);\n }\n\n push(path) {\n location.hash = path;\n }\n\n replace(path) {\n const url = new URL(location.href);\n url.hash = path;\n history.replaceState(null, '', url.toString());\n this._onHashChange();\n }\n\n back() {\n history.back();\n }\n forward() {\n history.forward();\n }\n\n beforeEach(fn) {\n this._guards.push(fn);\n return () => {\n const i = this._guards.indexOf(fn);\n if (i >= 0) this._guards.splice(i, 1);\n };\n }\n\n _subscribe(fn) {\n this._listeners.push(fn);\n return () => {\n const i = this._listeners.indexOf(fn);\n if (i >= 0) this._listeners.splice(i, 1);\n };\n }\n\n _onHashChange() {\n this._resolve();\n }\n\n _resolve() {\n const hash = location.hash || '#/';\n const path = getPathFromHash(hash);\n const query = parseQuery(hash);\n\n let matched = null;\n for (const route of this.routes) {\n const hasChildren = route._children.length > 0;\n\n // For routes with children, use prefix matching\n // For leaf routes, use exact matching\n let m;\n if (hasChildren) {\n // Prefix match: path must start with route path\n const prefix = route.path === '/' ? '' : route.path.replace(/\\/+$/, '');\n if (\n path === prefix ||\n path.startsWith(prefix + '/') ||\n (prefix === '' && path.startsWith('/'))\n ) {\n m = [path]; // fake match for prefix\n }\n } else {\n m = path.match(route._regex);\n }\n\n if (m) {\n const params = {};\n route._paramNames.forEach((name, i) => {\n if (m[i + 1] !== undefined) params[name] = decodeURIComponent(m[i + 1]);\n });\n matched = { route, params: { ...params }, query, path };\n\n // Child matching (check BEFORE redirect)\n if (hasChildren) {\n const prefix = route.path === '/' ? '' : route.path.replace(/\\/+$/, '');\n const childPath = path.slice(prefix.length) || '/';\n let childMatched = false;\n for (const child of route._children) {\n const cm = childPath.match(child._regex);\n if (cm) {\n const childParams = {};\n child._paramNames.forEach((name, i) => {\n childParams[name] = decodeURIComponent(cm[i + 1]);\n });\n matched.child = {\n route: child,\n params: { ...params, ...childParams },\n query,\n path,\n };\n childMatched = true;\n break;\n }\n }\n // No child matched — redirect only if path equals parent path\n if (\n !childMatched &&\n route.redirect &&\n path === (route.path === '/' ? '/' : route.path)\n ) {\n this.replace(route.redirect);\n return;\n }\n // No child matched and no redirect — skip this parent, try other routes\n if (!childMatched) {\n matched = null;\n continue;\n }\n } else if (route.redirect) {\n this.replace(route.redirect);\n return;\n }\n break;\n }\n }\n\n if (!matched) {\n this.current = { route: null, params: {}, query, path };\n } else {\n this.current = matched;\n }\n\n for (const guard of this._guards) {\n if (guard(this.current, this._prev) === false) {\n if (this._prev) history.replaceState(null, '', '#' + this._prev.path);\n return;\n }\n }\n\n this._prev = { ...this.current };\n for (const fn of this._listeners) fn(this.current);\n }\n}\n\n// ─── Create router + register <router-outlet> ───\n\nexport function createRouter(options) {\n const router = new Router(options);\n\n if (!customElements.get('router-outlet')) {\n class RouterOutlet extends HTMLElement {\n connectedCallback() {\n this.style.display = 'contents';\n this._unsub = router._subscribe(() => this._update());\n this._update();\n }\n\n disconnectedCallback() {\n this._unsub?.();\n this._loadingAbort?.abort();\n }\n\n async _update() {\n const match = this._getMatch();\n this._loadingAbort?.abort();\n\n if (!match || !match.route || !match.route.component) {\n this.textContent = '';\n return;\n }\n\n // Skip re-render if the same route is already rendered\n if (this._lastRoute === match.route) {\n return;\n }\n\n const controller = new AbortController();\n this._loadingAbort = controller;\n\n try {\n const tagName = await resolveComponent(match.route.component);\n if (controller.signal.aborted) return;\n\n this.textContent = '';\n if (tagName) {\n const el = document.createElement(tagName);\n if (match.params) el.params = match.params;\n if (match.query) el.query = match.query;\n this.appendChild(el);\n this._lastRoute = match.route;\n }\n } catch (e) {\n if (!controller.signal.aborted) {\n console.error('[Lux Router] Failed to load component:', e);\n this.textContent = '';\n }\n }\n }\n\n _getMatch() {\n const level = parseInt(this.getAttribute('level')) || 0;\n let match = router.current;\n for (let i = 0; i < level; i++) {\n if (!match || !match.child) return null;\n match = match.child;\n }\n return match;\n }\n }\n registerComponent('router-outlet', RouterOutlet);\n }\n\n router.start();\n return router;\n}\n","/**\n * ICU MessageFormat subset parser\n *\n * Supports:\n * - Simple interpolation: \"Hello, {name}\"\n * - Plural: \"{count, plural, =0{No items} =1{# item} other{# items}}\"\n * - Select: \"{gender, select, male{He} female{She} other{They}}\"\n */\n\n/**\n * Find the matching closing brace for an opening brace at position `start`.\n */\nfunction findMatchingBrace(str, start) {\n let depth = 1;\n for (let i = start + 1; i < str.length; i++) {\n if (str[i] === '{') depth++;\n else if (str[i] === '}') {\n depth--;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\n/**\n * Extract all top-level {...} expressions from the template.\n */\nfunction extractExpressions(template) {\n const parts = [];\n let i = 0;\n while (i < template.length) {\n if (template[i] === '{') {\n const end = findMatchingBrace(template, i);\n if (end !== -1) {\n parts.push({ start: i, end, expr: template.slice(i + 1, end) });\n i = end + 1;\n continue;\n }\n }\n i++;\n }\n return parts;\n}\n\nexport function formatMessage(template, values = {}) {\n if (!template || typeof template !== 'string') return '';\n\n const exprs = extractExpressions(template);\n let result = '';\n let lastIdx = 0;\n\n for (const { start, end, expr } of exprs) {\n result += template.slice(lastIdx, start);\n const trimmed = expr.trim();\n\n // Plural: {key, plural, =N{...} other{...}}\n const pluralMatch = trimmed.match(/^(\\w+),\\s*plural\\s*,\\s*(.+)$/);\n if (pluralMatch) {\n const [, key, rules] = pluralMatch;\n const count = Number(values[key]) || 0;\n result += formatPlural(count, rules);\n lastIdx = end + 1;\n continue;\n }\n\n // Select: {key, select, val1{...} val2{...}}\n const selectMatch = trimmed.match(/^(\\w+),\\s*select\\s*,\\s*(.+)$/);\n if (selectMatch) {\n const [, key, rules] = selectMatch;\n const value = String(values[key] || '');\n result += formatSelect(value, rules);\n lastIdx = end + 1;\n continue;\n }\n\n // Simple interpolation: {key}\n result += values[trimmed] ?? template.slice(start, end + 1);\n lastIdx = end + 1;\n }\n\n result += template.slice(lastIdx);\n return result;\n}\n\nfunction formatPlural(count, rulesStr) {\n const rules = parseRules(rulesStr);\n const exact = rules[`=${count}`];\n if (exact !== undefined) return exact.replace(/#/g, String(count));\n\n const key = count === 1 ? 'one' : 'other';\n const rule = rules[key] || rules['other'] || '';\n return rule.replace(/#/g, String(count));\n}\n\nfunction formatSelect(value, rulesStr) {\n const rules = parseRules(rulesStr);\n return rules[value] || rules['other'] || '';\n}\n\nfunction parseRules(rulesStr) {\n const rules = {};\n const re = /(\\w+|=\\d+)\\{([^}]*)\\}/g;\n let m;\n while ((m = re.exec(rulesStr))) {\n rules[m[1]] = m[2];\n }\n return rules;\n}\n","/**\n * Locale detection\n */\n\nexport function getDefaultLocale() {\n if (typeof navigator !== 'undefined' && navigator.language) {\n return navigator.language;\n }\n return 'en';\n}\n\nexport function formatNumber(value, options = {}, locale) {\n try {\n return new Intl.NumberFormat(locale, options).format(value);\n } catch {\n return String(value);\n }\n}\n\nexport function formatDate(value, options = {}, locale) {\n try {\n return new Intl.DateTimeFormat(locale, options).format(value);\n } catch {\n return String(value);\n }\n}\n","/**\n * Lux i18n — Lightweight internationalization\n *\n * Usage:\n * import { createI18n, msg, number, date } from 'lux/i18n';\n *\n * const i18n = createI18n({\n * locale: 'zh-CN',\n * messages: {\n * 'zh-CN': { hello: '你好', welcome: '欢迎, {name}' },\n * 'en': { hello: 'Hello', welcome: 'Welcome, {name}' },\n * }\n * });\n *\n * // In templates\n * html`<h1>${msg('hello')}</h1>`\n * html`<p>${msg('welcome', { name: 'Alice' })}</p>`\n * html`<span>${msg('items', { count: 5 })}</span>`\n *\n * // Number/date formatting\n * html`<span>${number(1234567)}</span>`\n * html`<span>${date(new Date())}</span>`\n */\n\nimport { formatMessage } from './format.js';\nimport { getDefaultLocale, formatNumber, formatDate } from './locale.js';\n\nlet currentLocale = '';\nlet currentMessages = {};\nlet listeners = [];\n\n/**\n * Get the current translation for a key.\n */\nexport function msg(key, values = {}) {\n const dict = currentMessages[currentLocale] || currentMessages;\n const template = dict[key] ?? key;\n return formatMessage(template, values);\n}\n\n/**\n * Format a number using Intl.NumberFormat.\n */\nexport function number(value, options) {\n return formatNumber(\n value,\n typeof options === 'string' ? { style: options } : options,\n currentLocale\n );\n}\n\n/**\n * Format a date using Intl.DateTimeFormat.\n */\nexport function date(value, options) {\n return formatDate(value, options, currentLocale);\n}\n\n/**\n * Get the current locale string.\n */\nexport function getLocale() {\n return currentLocale;\n}\n\n/**\n * Create an i18n instance.\n *\n * @param {Object} options\n * @param {string} options.locale - Initial locale (default: navigator.language)\n * @param {Object} messages - { 'zh-CN': {...}, 'en': {...} }\n * @returns {Object} i18n instance\n */\nexport function createI18n(options = {}) {\n currentLocale = options.locale || getDefaultLocale();\n currentMessages = options.messages || {};\n\n function setLocale(locale) {\n currentLocale = locale;\n for (const fn of listeners) fn(locale);\n }\n\n function onLocaleChange(fn) {\n listeners.push(fn);\n return () => {\n const i = listeners.indexOf(fn);\n if (i >= 0) listeners.splice(i, 1);\n };\n }\n\n return {\n get locale() {\n return currentLocale;\n },\n setLocale,\n onLocaleChange,\n msg,\n number,\n date,\n getLocale,\n };\n}\n","/**\n * Color utilities — HSL-based color generation from a seed color\n */\n\n// ─── Conversion ───\n\nexport function hexToRgb(hex) {\n hex = hex.replace('#', '');\n if (hex.length === 3) hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n return {\n r: parseInt(hex.slice(0, 2), 16),\n g: parseInt(hex.slice(2, 4), 16),\n b: parseInt(hex.slice(4, 6), 16),\n };\n}\n\nexport function rgbToHsl(r, g, b) {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n let h,\n s,\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n break;\n case g:\n h = ((b - r) / d + 2) / 6;\n break;\n case b:\n h = ((r - g) / d + 4) / 6;\n break;\n }\n }\n return { h: Math.round(h * 360), s: Math.round(s * 100), l: Math.round(l * 100) };\n}\n\nexport function hslToRgb(h, s, l) {\n h /= 360;\n s /= 100;\n l /= 100;\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n };\n}\n\nexport function hexToHsl(hex) {\n const { r, g, b } = hexToRgb(hex);\n return rgbToHsl(r, g, b);\n}\n\nexport function hslToHex(h, s, l) {\n const { r, g, b } = hslToRgb(h, s, l);\n return '#' + [r, g, b].map((x) => x.toString(16).padStart(2, '0')).join('');\n}\n\nexport function rgbString(r, g, b) {\n return `${r} ${g} ${b}`;\n}\n\n// ─── Palette generation ───\n\n/**\n * Generate a 10-step palette (50-900) from a seed HSL.\n * Lightness curve: 50→97%, 100→93%, 200→86%, 300→76%, 400→64%,\n * 500→seed%, 600→45%, 700→38%, 800→28%, 900→18%\n */\nexport function generatePalette(h, s, l) {\n const steps = [\n [50, 97, 90],\n [100, 93, 85],\n [200, 86, 78],\n [300, 76, 68],\n [400, 64, 58],\n [500, s, l], // seed\n [600, s, 45],\n [700, s, 38],\n [800, s, 28],\n [900, s, 18],\n ];\n\n const palette = {};\n for (const [step, sat, light] of steps) {\n palette[step] = hslToHex(h, sat, light);\n }\n return palette;\n}\n\n/**\n * Generate semantic colors by shifting hue from seed.\n * success: +120°, warning: +40°, error: -20° (or +340°), info: +200°\n */\nexport function generateSemantic(h, s, l) {\n const shift = (hue, sat, light) => {\n const h2 = ((hue % 360) + 360) % 360;\n return hslToHex(h2, sat, light);\n };\n\n return {\n success: {\n 500: shift(h + 120, 72, 45),\n light: shift(h + 120, 60, 92),\n },\n warning: {\n 500: shift(h + 40, 85, 55),\n light: shift(h + 40, 80, 93),\n },\n error: {\n 500: shift(h - 20, 78, 55),\n light: shift(h - 20, 70, 93),\n },\n info: {\n 500: shift(h + 200, 72, 55),\n light: shift(h + 200, 65, 93),\n },\n };\n}\n","/**\n * Generate CSS custom properties (tokens) from a palette.\n */\n\nimport { hexToRgb, rgbString } from './color.js';\n\nfunction rgb(hex) {\n const { r, g, b } = hexToRgb(hex);\n return rgbString(r, g, b);\n}\n\n/**\n * Generate light theme tokens from palette + semantic colors.\n */\nexport function generateLightTokens(palette, semantic) {\n return {\n // Primary palette\n 'lux-primary-50': rgb(palette[50]),\n 'lux-primary-100': rgb(palette[100]),\n 'lux-primary-200': rgb(palette[200]),\n 'lux-primary-300': rgb(palette[300]),\n 'lux-primary-400': rgb(palette[400]),\n 'lux-primary-500': rgb(palette[500]),\n 'lux-primary-600': rgb(palette[600]),\n 'lux-primary-700': rgb(palette[700]),\n 'lux-primary-800': rgb(palette[800]),\n 'lux-primary-900': rgb(palette[900]),\n\n // Semantic\n 'lux-success': rgb(semantic.success[500]),\n 'lux-warning': rgb(semantic.warning[500]),\n 'lux-error': rgb(semantic.error[500]),\n 'lux-info': rgb(semantic.info[500]),\n\n // Surface / background (light mode)\n 'lux-bg': '15 23 42',\n 'lux-bg-alt': '30 41 59',\n 'lux-surface': '15 23 42',\n 'lux-card': '30 41 59',\n 'lux-overlay': '0 0 0 / 50%',\n\n // Text\n 'lux-text': '241 245 249',\n 'lux-text-dim': '148 163 184',\n 'lux-text-muted': '100 116 139',\n\n // Border\n 'lux-border': '51 65 85',\n 'lux-border-light': '71 85 105',\n\n // Interactive\n 'lux-hover': '255 255 255 / 5%',\n 'lux-active': '255 255 255 / 10%',\n 'lux-focus': '0 0 0 / 40%',\n\n // Radius\n 'lux-radius-sm': '6px',\n 'lux-radius': '8px',\n 'lux-radius-lg': '12px',\n 'lux-radius-xl': '16px',\n 'lux-radius-full': '9999px',\n };\n}\n\n/**\n * Generate dark theme tokens.\n */\nexport function generateDarkTokens(palette, semantic) {\n return {\n // Primary — use lighter variants for dark mode\n 'lux-primary-50': rgb(palette[900]),\n 'lux-primary-100': rgb(palette[800]),\n 'lux-primary-200': rgb(palette[700]),\n 'lux-primary-300': rgb(palette[600]),\n 'lux-primary-400': rgb(palette[400]),\n 'lux-primary-500': rgb(palette[500]),\n 'lux-primary-600': rgb(palette[300]),\n 'lux-primary-700': rgb(palette[200]),\n 'lux-primary-800': rgb(palette[100]),\n 'lux-primary-900': rgb(palette[50]),\n\n // Semantic\n 'lux-success': rgb(semantic.success[500]),\n 'lux-warning': rgb(semantic.warning[500]),\n 'lux-error': rgb(semantic.error[500]),\n 'lux-info': rgb(semantic.info[500]),\n\n // Surface (dark mode)\n 'lux-bg': '15 23 42',\n 'lux-bg-alt': '30 41 59',\n 'lux-surface': '15 23 42',\n 'lux-card': '30 41 59',\n 'lux-overlay': '0 0 0 / 70%',\n\n // Text\n 'lux-text': '241 245 249',\n 'lux-text-dim': '148 163 184',\n 'lux-text-muted': '100 116 139',\n\n // Border\n 'lux-border': '51 65 85',\n 'lux-border-light': '71 85 105',\n\n // Interactive\n 'lux-hover': '255 255 255 / 8%',\n 'lux-active': '255 255 255 / 12%',\n 'lux-focus': '0 0 0 / 50%',\n\n // Radius (same as light)\n 'lux-radius-sm': '6px',\n 'lux-radius': '8px',\n 'lux-radius-lg': '12px',\n 'lux-radius-xl': '16px',\n 'lux-radius-full': '9999px',\n };\n}\n\n/**\n * Convert token map to CSS string.\n */\nexport function tokensToCSS(tokens, indent = ' ') {\n let css = ':root {\\n';\n for (const [key, value] of Object.entries(tokens)) {\n css += `${indent}--${key}: ${value};\\n`;\n }\n css += '}';\n return css;\n}\n","/**\n * createTheme — generate a complete theme from colors.\n *\n * Usage:\n * const theme = createTheme({ primary: '#6c5ce7' });\n * const theme = createTheme({\n * primary: '#6c5ce7', success: '#10b981',\n * warning: '#f59e0b', error: '#ef4444', info: '#3b82f6'\n * });\n * theme.setColors({ success: '#22c55e' });\n * theme.apply();\n */\n\nimport { hexToHsl, hslToHex } from './color.js';\nimport { generatePalette } from './color.js';\nimport { generateLightTokens, generateDarkTokens, tokensToCSS } from './tokens.js';\n\nconst defaultColors = {\n primary: '#6c5ce7',\n success: '#10b981',\n warning: '#f59e0b',\n error: '#ef4444',\n info: '#3b82f6',\n};\n\nexport function createTheme(options = {}) {\n if (typeof options === 'string') options = { primary: options };\n\n const _colors = { ...defaultColors, ...options.colors };\n let _dark = options.dark ?? false;\n let _radius = options.radius ?? '8px';\n let _font =\n options.font ?? '-apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif';\n\n function _build() {\n const { h, s, l } = hexToHsl(_colors.primary);\n const palette = generatePalette(h, s, l);\n\n const semantic = {};\n for (const [name, hex] of Object.entries(_colors)) {\n if (name === 'primary') continue;\n const { h: sh, s: ss } = hexToHsl(hex);\n semantic[name] = { 500: hex, light: hslToHex(sh, 60, 93) };\n }\n\n const tokens = _dark\n ? generateDarkTokens(palette, semantic)\n : generateLightTokens(palette, semantic);\n\n tokens['lux-radius'] = _radius;\n tokens['lux-font'] = _font;\n\n return tokens;\n }\n\n function _inject(tokens) {\n let el = document.getElementById('lux-theme');\n if (!el) {\n el = document.createElement('style');\n el.id = 'lux-theme';\n document.head.appendChild(el);\n }\n el.textContent = tokensToCSS(tokens);\n }\n\n return {\n apply() {\n _inject(_build());\n },\n\n setColors(patch) {\n Object.assign(_colors, patch);\n this.apply();\n },\n\n setDark(dark) {\n _dark = dark;\n this.apply();\n },\n getCSS() {\n return tokensToCSS(_build());\n },\n getTokens() {\n return _build();\n },\n getColors() {\n return { ..._colors };\n },\n\n get primary() {\n return _colors.primary;\n },\n get dark() {\n return _dark;\n },\n };\n}\n","/**\n * Lux — Lightweight Web Components Framework\n */\n\n// ─── Core exports ───\n\n// Template engine\nexport { html, svg, css, render, isTemplateResult, nothing, escapeHtml } from './template.js';\n\n// Directives\nexport { repeat, when, show, classMap, styleMap, guard } from './template.js';\n\n// Element base class\nexport { LuxElement, registerComponent, createComponent } from './element.js';\n\nexport { createRouter } from './router.js';\n\nexport { createI18n, msg, number, date, getLocale } from './i18n/index.js';\n\nexport { createTheme } from './theme/index.js';\n\nexport const version = '0.1.0';\n"],"names":["registerComponent"],"mappings":"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"}
|
package/dist/lux.min.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const t=Symbol.for("lux-nothing");function e(t,...e){return{_$luxType$:1,strings:t,values:e}}function r(t,...e){return{_$luxType$:2,strings:t,values:e}}function n(t,...e){return{_$luxType$:3,strings:t,values:e}}function s(t){return t&&void 0!==t._$luxType$}function o(t){if(null==t)return"";const e=String(t);return-1===e.indexOf("<")&&-1===e.indexOf(">")&&-1===e.indexOf("&")?e:e.replace(/[<>&"']/g,t=>({"<":"<",">":">","&":"&",'"':""","'":"'"}[t]))}const i=/(?:([@.?][\w-]+)|(ref)|(class))=\s*$/;function a(e,r,n){if(r!==t&&null!=r)if(function(t){return t&&"repeat"===t._type}(r))!function(t,e){const{items:r,keyFn:n,renderFn:o}=e,i=t._repeatState;if(i)for(const t of i.entries)t.span&&t.span.parentNode&&t.span.parentNode.removeChild(t.span);const a=document.createDocumentFragment(),c=[];for(const t of r){const e=n(t),r=o(t),i=document.createElement("span");i.style.display="contents",s(r)?u(r,i):null!=r&&!1!==r&&i.appendChild(document.createTextNode(String(r))),a.appendChild(i),c.push({key:e,result:r,span:i})}t.appendChild(a),t._repeatState={entries:c}}(e,r);else if(s(r))u(r,e);else if(Array.isArray(r)){c(e);for(const t of r)if(s(t)){const r=document.createElement("span");r.style.display="contents",u(t,r),e.appendChild(r)}else t instanceof Node?e.appendChild(t):null!=t&&!1!==t&&e.appendChild(document.createTextNode(String(t)))}else{if(r instanceof Node)return c(e),void e.appendChild(r);1===e.childNodes.length&&e.firstChild.nodeType===Node.TEXT_NODE?e.firstChild.textContent=String(r):(c(e),e.appendChild(document.createTextNode(String(r))))}else c(e)}function c(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function l(e,r){const{element:n,name:s,prefix:o}=e;switch(o){case"@":{const o=e.committedValue,i=null==r||r===t,a=i&&null!=o||r?.capture!==o?.capture||r?.once!==o?.once||r?.passive!==o?.passive,c=!i&&(null==o||a);if(a&&n.removeEventListener(s,e._handler||o,o),c)if("function"==typeof r){const t=e._host||(e._host={handleEvent(t){const r=e.committedValue;if("function"==typeof r){const e=n.getRootNode().host||n;r.call(e,t)}}});e._handler=t,n.addEventListener(s,t)}else if("object"==typeof r&&r?.handleEvent){const t={handleEvent:t=>r.handleEvent.call(r,t)};e._handler=t,n.addEventListener(s,t,{capture:r.capture,once:r.once,passive:r.passive})}e.committedValue=r;break}case".":n[s]=r===t?void 0:r;break;case"?":n.toggleAttribute(s,!!r);break;case"ref":"function"==typeof r&&r(n);break;case"class":if("string"==typeof r)n.className=r;else if("object"==typeof r&&null!=r){const t=n.className||"",e=t?t.split(/\s+/):[];for(const[t,n]of Object.entries(r))if(n)e.includes(t)||e.push(t);else{const r=e.indexOf(t);-1!==r&&e.splice(r,1)}n.className=e.filter(Boolean).join(" ")}break;default:null==r||!1===r?n.removeAttribute(s):n.setAttribute(s,!0===r?"":String(r))}}function u(t,e,r){if(!s(t))return void(e.textContent=t??"");const{strings:n,values:o}=t;if(e._luxActiveParts&&e._luxStrings===n){for(const t of e._luxActiveParts)t.index<o.length&&("child"===t.type?a(t.span,o[t.index]):l(t,o[t.index]));return}const c=document.createElement("template"),u=function(t){const e=[];let r="";for(let n=0;n<t.length;n++)if(r+=t[n],n<t.length-1){const t=r.match(i);if(t){const s=t[1],o=!!t[2],i=!!t[3];let a="",c="";s?(a=s[0],c=s.slice(1)):o?(a="ref",c="ref"):i&&(a="class",c="class");const l=`lux-attr-${n}`;r=r.slice(0,-t[0].length)+`${l}="${c}" `,e.push({type:"attr",name:c,prefix:a,marker:l,index:n})}else{const t=`lux-${n}`;r+=`\x3c!--${t}--\x3e`,e.push({type:"child",marker:t,index:n})}}return{html:r,parts:e}}(n);c.innerHTML=u.html;const p=c.content.cloneNode(!0),h=[];for(const t of u.parts)if("child"===t.type){const e=document.createTreeWalker(p,NodeFilter.SHOW_COMMENT);let r;for(;r=e.nextNode();)if(r.data===t.marker){const e=document.createElement("span");e.style.display="contents",r.parentNode.replaceChild(e,r),a(e,o[t.index]),h.push({type:"child",span:e,index:t.index});break}}else{const e=p.querySelector(`[${t.marker}]`);if(e){e.removeAttribute(t.marker);const r={type:"attr",element:e,name:t.name,prefix:t.prefix,index:t.index,committedValue:void 0};l(r,o[t.index]),h.push(r)}}e.textContent="",e.appendChild(p),e._luxActiveParts=h,e._luxStrings=n}function p(t,e,r){return{_type:"repeat",items:t,keyFn:e,renderFn:r}}function h(t,e,r=()=>""){return t?e():r()}function d(t,e=""){return t?e:""}function f(t){return t}function m(t){return t}function _(t,e){return e()}const y=new Set;let g=!1;function x(t){var e;y.add(t),g||(g=!0,e=()=>{g=!1;const t=[...y];y.clear();for(const e of t)e._$performUpdate()},Promise.resolve().then(e))}const b={toAttribute(t,e){switch(e){case Boolean:return t?"":null;case Object:case Array:return null==t?null:JSON.stringify(t);default:return t}},fromAttribute(t,e){switch(e){case Boolean:return null!==t;case Number:return Number(t);case Object:case Array:try{return JSON.parse(t)}catch{return null}default:return t}}};class v extends HTMLElement{static properties={};static styles=void 0;static finalized=!1;static elementProperties=new Map;static __prepare(){if(this.hasOwnProperty("elementProperties"))return;const t=Object.getPrototypeOf(this);t.finalize&&t.finalize(),this.elementProperties=new Map(t.elementProperties)}static get observedAttributes(){return this.finalize(),this.__attributeToPropertyMap?[...this.__attributeToPropertyMap.keys()]:[]}static finalize(){if(!this.hasOwnProperty("finalized")){if(this.finalized=!0,this.__prepare(),this.hasOwnProperty("properties")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const r of e)this.createProperty(r,t[r])}this.__attributeToPropertyMap=new Map;for(const[t,e]of this.elementProperties){const r=this.__attributeNameForProperty(t,e);void 0!==r&&this.__attributeToPropertyMap.set(r,t)}this.elementStyles=this.styles}}static __attributeNameForProperty(t,e){const r=e.attribute;return!1===r?void 0:"string"==typeof r?r:"string"==typeof t?t.replace(/([A-Z])/g,"-$1").toLowerCase():void 0}static createProperty(t,e={}){if(this.__prepare(),!this.elementProperties.has(t)&&(e.state&&(e={...e,attribute:!1}),this.elementProperties.set(t,e),!e.noAccessor)){const r=Symbol(),n=this.getPropertyDescriptor(t,r,e);void 0!==n&&Object.defineProperty(this.prototype,t,n)}}static getPropertyDescriptor(t,e,r){const{type:n,reflect:s,converter:o}=r;return{get(){return this[e]},set(n){const s=this[e];this[e]=n,this.requestUpdate(t,s,r)},configurable:!0,enumerable:!0}}static _initializers=[];static addInitializer(t){this._initializers=[...this._initializers||[],t]}static shadowRootOptions={mode:"open"};constructor(){super(),this.__updatePending=!1,this.__hasUpdated=!1,this.__controllers=new Set,this.__reflectingProperty=null,this.constructor.hasOwnProperty("finalized")||this.constructor.finalize(),this.__saveInstanceProperties(),this.requestUpdate();for(const t of this.constructor._initializers||[])t(this)}__saveInstanceProperties(){const t=this.constructor.elementProperties;if(t)for(const[e,r]of t)if(!r.noAccessor&&this.hasOwnProperty(e)){const t=this[e];delete this[e],this.__instancePropertyValues=this.__instancePropertyValues||new Map,this.__instancePropertyValues.set(e,t)}}connectedCallback(){this.__controllers.forEach(t=>t.hostConnected?.()),this.constructor.hasOwnProperty("finalized")||this.constructor.finalize();const t=this.constructor.__attributeToPropertyMap;if(t)for(const[e,r]of t){const t=this.getAttribute(e);if(null!==t){const e=this.constructor.elementProperties.get(r);if(e){const n=e.converter?.fromAttribute??b.fromAttribute;this[r]=n(t,e.type)}}}if(this.__instancePropertyValues){for(const[t,e]of this.__instancePropertyValues)this[t]=e;this.__instancePropertyValues=void 0}this.renderRoot,this.__hasUpdated||this.requestUpdate()}disconnectedCallback(){this.__controllers.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,r){const n=this.constructor.__attributeToPropertyMap?.get(t);if(void 0!==n&&this.__reflectingProperty!==n){const t=this.constructor.elementProperties.get(n);if(t){const e="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:b;this.__reflectingProperty=n;const s=e.fromAttribute(r,t.type);this[n]=s,this.__reflectingProperty=null}}}get renderRoot(){return this._renderRoot||(this._renderRoot=this.createRenderRoot(),this.__adoptStyles()),this._renderRoot}createRenderRoot(){return this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions)}__adoptStyles(){const t=this.constructor.elementStyles;if(!t)return;const e=Array.isArray(t)?t:[t],r=[];for(const t of e)"string"==typeof t?r.push(t):s(t)&&r.push(t.strings.join(""));if(0!==r.length)if(void 0!==this._renderRoot.adoptedStyleSheets){const t=new CSSStyleSheet;t.replaceSync(r.join("\n")),this._renderRoot.adoptedStyleSheets=[...this._renderRoot.adoptedStyleSheets,t]}else{const t=document.createElement("style");t.textContent=r.join("\n"),this._renderRoot.appendChild(t)}}enableUpdating(t){}get updateComplete(){return this.__updateCompletePromise??Promise.resolve()}get hasUpdated(){return this.__hasUpdated}get isUpdatePending(){return this.__updatePending}requestUpdate(t,e,r){if(void 0!==t){if(!(r?.hasChanged??((t,e)=>!Object.is(t,e)))(this[t],e))return}this.__updatePending||(this.__updatePending=!0,x(this))}async performUpdate(){if(this.isUpdatePending){this.__updatePending=!1,this.willUpdate(new Map),this.__controllers.forEach(t=>t.hostUpdate?.()),this.update(new Map),this.__hasUpdated=!0;for(const[t,e]of this.constructor.elementProperties)if(e.reflect){const r=this[t],n=e.converter?.toAttribute??b.toAttribute,s=this.constructor.__attributeNameForProperty(t,e);if(void 0!==s){this.__reflectingProperty=t;const o=n(r,e.type);null==o?this.removeAttribute(s):this.setAttribute(s,String(o)),this.__reflectingProperty=null}}this.__controllers.forEach(t=>t.hostUpdated?.()),this.firstUpdated(new Map),this.updated(new Map)}}_$performUpdate(){this.performUpdate()}shouldUpdate(t){return!0}willUpdate(t){}update(t){const e=this.render();e&&u(e,this.renderRoot)}render(){return e``}firstUpdated(t){}updated(t){}propertyChangedCallback(t,e,r){}addController(t){this.__controllers.add(t),this.isConnected&&t.hostConnected?.()}removeController(t){this.__controllers.delete(t)}emit(t,e,r={}){return this.dispatchEvent(new CustomEvent(t,{detail:e,bubbles:!0,composed:!0,...r}))}$(t){return this.renderRoot.querySelector(t)}$$(t){return this.renderRoot.querySelectorAll(t)}}function C(t,e){if(!t.includes("-"))throw new Error(`Component name must contain a hyphen: ${t}`);customElements.get(t)||customElements.define(t,e)}function P(t,e={}){const{properties:r={}}=e;return class extends v{static properties=r;render(){return t.call(this,this)}}}function w(t,e){if(!t.includes("-"))throw new Error(`Component name must contain a hyphen: ${t}`);customElements.get(t)||customElements.define(t,e)}function S(t){let e=t.replace(/\/+$/,"")||"/";if("/"===e)return/^\/?$/;const r="^"+e.replace(/:(\w+)/g,"([^/]+)").replace(/\(\.\*\)/g,"(.*)")+"$";return new RegExp(r)}function E(t){const e=[],r=/:(\w+)/g;let n;for(;n=r.exec(t);)e.push(n[1]);return e}function $(t){if(!t||!t.prototype)return Promise.resolve(null);const e=t.tagName||t.name.replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"");return customElements.get(e)||w(e,t),Promise.resolve(e)}class A{constructor(t={}){this.routes=(t.routes||[]).map(t=>({...t,_regex:S(t.path),_paramNames:E(t.path),_children:(t.children||[]).map(t=>({...t,_regex:S(t.path),_paramNames:E(t.path)}))})),this._guards=[],this._listeners=[],this.current=null,this._prev=null,this._onHashChange=this._onHashChange.bind(this)}start(){window.addEventListener("hashchange",this._onHashChange),this._resolve()}stop(){window.removeEventListener("hashchange",this._onHashChange)}push(t){location.hash=t}replace(t){const e=new URL(location.href);e.hash=t,history.replaceState(null,"",e.toString()),this._onHashChange()}back(){history.back()}forward(){history.forward()}beforeEach(t){return this._guards.push(t),()=>{const e=this._guards.indexOf(t);e>=0&&this._guards.splice(e,1)}}_subscribe(t){return this._listeners.push(t),()=>{const e=this._listeners.indexOf(t);e>=0&&this._listeners.splice(e,1)}}_onHashChange(){this._resolve()}_resolve(){const t=location.hash||"#/",e=function(t){return t.replace(/^#/,"").split("?")[0]||"/"}(t),r=function(t){const e=t.indexOf("?");if(-1===e)return{};const r={};for(const n of t.slice(e+1).split("&")){const[t,e]=n.split("=");t&&(r[decodeURIComponent(t)]=e?decodeURIComponent(e):"")}return r}(t);let n=null;for(const t of this.routes){const s=t._children.length>0;let o;if(s){const r="/"===t.path?"":t.path.replace(/\/+$/,"");(e===r||e.startsWith(r+"/")||""===r&&e.startsWith("/"))&&(o=[e])}else o=e.match(t._regex);if(o){const i={};if(t._paramNames.forEach((t,e)=>{void 0!==o[e+1]&&(i[t]=decodeURIComponent(o[e+1]))}),n={route:t,params:{...i},query:r,path:e},s){const s="/"===t.path?"":t.path.replace(/\/+$/,""),o=e.slice(s.length)||"/";let a=!1;for(const s of t._children){const t=o.match(s._regex);if(t){const o={};s._paramNames.forEach((e,r)=>{o[e]=decodeURIComponent(t[r+1])}),n.child={route:s,params:{...i,...o},query:r,path:e},a=!0;break}}if(!a&&t.redirect&&e===("/"===t.path?"/":t.path))return void this.replace(t.redirect);if(!a){n=null;continue}}else if(t.redirect)return void this.replace(t.redirect);break}}this.current=n||{route:null,params:{},query:r,path:e};for(const t of this._guards)if(!1===t(this.current,this._prev))return void(this._prev&&history.replaceState(null,"","#"+this._prev.path));this._prev={...this.current};for(const t of this._listeners)t(this.current)}}function O(t){const e=new A(t);if(!customElements.get("router-outlet")){class t extends HTMLElement{connectedCallback(){this.style.display="contents",this._unsub=e._subscribe(()=>this._update()),this._update()}disconnectedCallback(){this._unsub?.(),this._loadingAbort?.abort()}async _update(){const t=this._getMatch();if(this._loadingAbort?.abort(),!t||!t.route||!t.route.component)return void(this.textContent="");if(this._lastRoute===t.route)return;const e=new AbortController;this._loadingAbort=e;try{const n=await(r=t.route.component,"string"==typeof r?Promise.resolve(r):"function"==typeof r&&r.prototype instanceof HTMLElement?$(r):"function"==typeof r?r().then(t=>$(t.default||t[Object.keys(t)[0]])):Promise.resolve(null));if(e.signal.aborted)return;if(this.textContent="",n){const e=document.createElement(n);t.params&&(e.params=t.params),t.query&&(e.query=t.query),this.appendChild(e),this._lastRoute=t.route}}catch(t){e.signal.aborted||(console.error("[Lux Router] Failed to load component:",t),this.textContent="")}var r}_getMatch(){const t=parseInt(this.getAttribute("level"))||0;let r=e.current;for(let e=0;e<t;e++){if(!r||!r.child)return null;r=r.child}return r}}w("router-outlet",t)}return e.start(),e}function k(t,e){let r=1;for(let n=e+1;n<t.length;n++)if("{"===t[n])r++;else if("}"===t[n]&&(r--,0===r))return n;return-1}function N(t,e={}){if(!t||"string"!=typeof t)return"";const r=function(t){const e=[];let r=0;for(;r<t.length;){if("{"===t[r]){const n=k(t,r);if(-1!==n){e.push({start:r,end:n,expr:t.slice(r+1,n)}),r=n+1;continue}}r++}return e}(t);let n="",s=0;for(const{start:o,end:i,expr:a}of r){n+=t.slice(s,o);const r=a.trim(),c=r.match(/^(\w+),\s*plural\s*,\s*(.+)$/);if(c){const[,t,r]=c;n+=M(Number(e[t])||0,r),s=i+1;continue}const l=r.match(/^(\w+),\s*select\s*,\s*(.+)$/);if(l){const[,t,r]=l;n+=R(String(e[t]||""),r),s=i+1;continue}n+=e[r]??t.slice(o,i+1),s=i+1}return n+=t.slice(s),n}function M(t,e){const r=U(e),n=r[`=${t}`];if(void 0!==n)return n.replace(/#/g,String(t));return(r[1===t?"one":"other"]||r.other||"").replace(/#/g,String(t))}function R(t,e){const r=U(e);return r[t]||r.other||""}function U(t){const e={},r=/(\w+|=\d+)\{([^}]*)\}/g;let n;for(;n=r.exec(t);)e[n[1]]=n[2];return e}let T="",j={},z=[];function L(t,e={}){return N((j[T]||j)[t]??t,e)}function I(t,e){return function(t,e={},r){try{return new Intl.NumberFormat(r,e).format(t)}catch{return String(t)}}(t,"string"==typeof e?{style:e}:e,T)}function q(t,e){return function(t,e={},r){try{return new Intl.DateTimeFormat(r,e).format(t)}catch{return String(t)}}(t,e,T)}function F(){return T}function H(t={}){return T=t.locale||("undefined"!=typeof navigator&&navigator.language?navigator.language:"en"),j=t.messages||{},{get locale(){return T},setLocale:function(t){T=t;for(const e of z)e(t)},onLocaleChange:function(t){return z.push(t),()=>{const e=z.indexOf(t);e>=0&&z.splice(e,1)}},msg:L,number:I,date:q,getLocale:F}}function V(t){return 3===(t=t.replace("#","")).length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),{r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16)}}function D(t){const{r:e,g:r,b:n}=V(t);return function(t,e,r){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,i,a=(n+s)/2;if(n===s)o=i=0;else{const c=n-s;switch(i=a>.5?c/(2-n-s):c/(n+s),n){case t:o=((e-r)/c+(e<r?6:0))/6;break;case e:o=((r-t)/c+2)/6;break;case r:o=((t-e)/c+4)/6}}return{h:Math.round(360*o),s:Math.round(100*i),l:Math.round(100*a)}}(e,r,n)}function B(t,e,r){const{r:n,g:s,b:o}=function(t,e,r){let n,s,o;if(t/=360,r/=100,0==(e/=100))n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,c=2*r-a;n=i(c,a,t+1/3),s=i(c,a,t),o=i(c,a,t-1/3)}return{r:Math.round(255*n),g:Math.round(255*s),b:Math.round(255*o)}}(t,e,r);return"#"+[n,s,o].map(t=>t.toString(16).padStart(2,"0")).join("")}function W(t){const{r:e,g:r,b:n}=V(t);return function(t,e,r){return`${t} ${e} ${r}`}(e,r,n)}function J(t,e=" "){let r=":root {\n";for(const[n,s]of Object.entries(t))r+=`${e}--${n}: ${s};\n`;return r+="}",r}const Z={primary:"#6c5ce7",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#3b82f6"};function X(t={}){"string"==typeof t&&(t={primary:t});const e={...Z,...t.colors};let r=t.dark??!1,n=t.radius??"8px",s=t.font??'-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif';function o(){const{h:t,s:o,l:i}=D(e.primary),a=function(t,e,r){const n=[[50,97,90],[100,93,85],[200,86,78],[300,76,68],[400,64,58],[500,e,r],[600,e,45],[700,e,38],[800,e,28],[900,e,18]],s={};for(const[e,r,o]of n)s[e]=B(t,r,o);return s}(t,o,i),c={};for(const[t,r]of Object.entries(e)){if("primary"===t)continue;const{h:e}=D(r);c[t]={500:r,light:B(e,60,93)}}const l=r?function(t,e){return{"lux-primary-50":W(t[900]),"lux-primary-100":W(t[800]),"lux-primary-200":W(t[700]),"lux-primary-300":W(t[600]),"lux-primary-400":W(t[400]),"lux-primary-500":W(t[500]),"lux-primary-600":W(t[300]),"lux-primary-700":W(t[200]),"lux-primary-800":W(t[100]),"lux-primary-900":W(t[50]),"lux-success":W(e.success[500]),"lux-warning":W(e.warning[500]),"lux-error":W(e.error[500]),"lux-info":W(e.info[500]),"lux-bg":"15 23 42","lux-bg-alt":"30 41 59","lux-surface":"15 23 42","lux-card":"30 41 59","lux-overlay":"0 0 0 / 70%","lux-text":"241 245 249","lux-text-dim":"148 163 184","lux-text-muted":"100 116 139","lux-border":"51 65 85","lux-border-light":"71 85 105","lux-hover":"255 255 255 / 8%","lux-active":"255 255 255 / 12%","lux-focus":"0 0 0 / 50%","lux-radius-sm":"6px","lux-radius":"8px","lux-radius-lg":"12px","lux-radius-xl":"16px","lux-radius-full":"9999px"}}(a,c):function(t,e){return{"lux-primary-50":W(t[50]),"lux-primary-100":W(t[100]),"lux-primary-200":W(t[200]),"lux-primary-300":W(t[300]),"lux-primary-400":W(t[400]),"lux-primary-500":W(t[500]),"lux-primary-600":W(t[600]),"lux-primary-700":W(t[700]),"lux-primary-800":W(t[800]),"lux-primary-900":W(t[900]),"lux-success":W(e.success[500]),"lux-warning":W(e.warning[500]),"lux-error":W(e.error[500]),"lux-info":W(e.info[500]),"lux-bg":"15 23 42","lux-bg-alt":"30 41 59","lux-surface":"15 23 42","lux-card":"30 41 59","lux-overlay":"0 0 0 / 50%","lux-text":"241 245 249","lux-text-dim":"148 163 184","lux-text-muted":"100 116 139","lux-border":"51 65 85","lux-border-light":"71 85 105","lux-hover":"255 255 255 / 5%","lux-active":"255 255 255 / 10%","lux-focus":"0 0 0 / 40%","lux-radius-sm":"6px","lux-radius":"8px","lux-radius-lg":"12px","lux-radius-xl":"16px","lux-radius-full":"9999px"}}(a,c);return l["lux-radius"]=n,l["lux-font"]=s,l}return{apply(){!function(t){let e=document.getElementById("lux-theme");e||(e=document.createElement("style"),e.id="lux-theme",document.head.appendChild(e)),e.textContent=J(t)}(o())},setColors(t){Object.assign(e,t),this.apply()},setDark(t){r=t,this.apply()},getCSS:()=>J(o()),getTokens:()=>o(),getColors:()=>({...e}),get primary(){return e.primary},get dark(){return r}}}const G="0.1.0";export{v as LuxElement,f as classMap,P as createComponent,H as createI18n,O as createRouter,X as createTheme,n as css,q as date,o as escapeHtml,F as getLocale,_ as guard,e as html,s as isTemplateResult,L as msg,t as nothing,I as number,C as registerComponent,u as render,p as repeat,d as show,m as styleMap,r as svg,G as version,h as when};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function t(t,e){if(!t.includes("-"))throw new Error(`Component name must contain a hyphen: ${t}`);customElements.get(t)||customElements.define(t,e)}function e(t){let e=t.replace(/\/+$/,"")||"/";if("/"===e)return/^\/?$/;const r="^"+e.replace(/:(\w+)/g,"([^/]+)").replace(/\(\.\*\)/g,"(.*)")+"$";return new RegExp(r)}function r(t){const e=[],r=/:(\w+)/g;let s;for(;s=r.exec(t);)e.push(s[1]);return e}function s(e){if(!e||!e.prototype)return Promise.resolve(null);const r=e.tagName||e.name.replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"");return customElements.get(r)||t(r,e),Promise.resolve(r)}class n{constructor(t={}){this.routes=(t.routes||[]).map(t=>({...t,_regex:e(t.path),_paramNames:r(t.path),_children:(t.children||[]).map(t=>({...t,_regex:e(t.path),_paramNames:r(t.path)}))})),this._guards=[],this._listeners=[],this.current=null,this._prev=null,this._onHashChange=this._onHashChange.bind(this)}start(){window.addEventListener("hashchange",this._onHashChange),this._resolve()}stop(){window.removeEventListener("hashchange",this._onHashChange)}push(t){location.hash=t}replace(t){const e=new URL(location.href);e.hash=t,history.replaceState(null,"",e.toString()),this._onHashChange()}back(){history.back()}forward(){history.forward()}beforeEach(t){return this._guards.push(t),()=>{const e=this._guards.indexOf(t);e>=0&&this._guards.splice(e,1)}}_subscribe(t){return this._listeners.push(t),()=>{const e=this._listeners.indexOf(t);e>=0&&this._listeners.splice(e,1)}}_onHashChange(){this._resolve()}_resolve(){const t=location.hash||"#/",e=function(t){return t.replace(/^#/,"").split("?")[0]||"/"}(t),r=function(t){const e=t.indexOf("?");if(-1===e)return{};const r={};for(const s of t.slice(e+1).split("&")){const[t,e]=s.split("=");t&&(r[decodeURIComponent(t)]=e?decodeURIComponent(e):"")}return r}(t);let s=null;for(const t of this.routes){const n=t._children.length>0;let o;if(n){const r="/"===t.path?"":t.path.replace(/\/+$/,"");(e===r||e.startsWith(r+"/")||""===r&&e.startsWith("/"))&&(o=[e])}else o=e.match(t._regex);if(o){const i={};if(t._paramNames.forEach((t,e)=>{void 0!==o[e+1]&&(i[t]=decodeURIComponent(o[e+1]))}),s={route:t,params:{...i},query:r,path:e},n){const n="/"===t.path?"":t.path.replace(/\/+$/,""),o=e.slice(n.length)||"/";let a=!1;for(const n of t._children){const t=o.match(n._regex);if(t){const o={};n._paramNames.forEach((e,r)=>{o[e]=decodeURIComponent(t[r+1])}),s.child={route:n,params:{...i,...o},query:r,path:e},a=!0;break}}if(!a&&t.redirect&&e===("/"===t.path?"/":t.path))return void this.replace(t.redirect);if(!a){s=null;continue}}else if(t.redirect)return void this.replace(t.redirect);break}}this.current=s||{route:null,params:{},query:r,path:e};for(const t of this._guards)if(!1===t(this.current,this._prev))return void(this._prev&&history.replaceState(null,"","#"+this._prev.path));this._prev={...this.current};for(const t of this._listeners)t(this.current)}}function o(e){const r=new n(e);if(!customElements.get("router-outlet")){class e extends HTMLElement{connectedCallback(){this.style.display="contents",this._unsub=r._subscribe(()=>this._update()),this._update()}disconnectedCallback(){this._unsub?.(),this._loadingAbort?.abort()}async _update(){const t=this._getMatch();if(this._loadingAbort?.abort(),!t||!t.route||!t.route.component)return void(this.textContent="");if(this._lastRoute===t.route)return;const e=new AbortController;this._loadingAbort=e;try{const n=await(r=t.route.component,"string"==typeof r?Promise.resolve(r):"function"==typeof r&&r.prototype instanceof HTMLElement?s(r):"function"==typeof r?r().then(t=>s(t.default||t[Object.keys(t)[0]])):Promise.resolve(null));if(e.signal.aborted)return;if(this.textContent="",n){const e=document.createElement(n);t.params&&(e.params=t.params),t.query&&(e.query=t.query),this.appendChild(e),this._lastRoute=t.route}}catch(t){e.signal.aborted||(console.error("[Lux Router] Failed to load component:",t),this.textContent="")}var r}_getMatch(){const t=parseInt(this.getAttribute("level"))||0;let e=r.current;for(let r=0;r<t;r++){if(!e||!e.child)return null;e=e.child}return e}}t("router-outlet",e)}return r.start(),r}export{o as createRouter};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=1,t=2,n=Symbol.for("lux-nothing");function r(e,...t){return{_$luxType$:1,strings:e,values:t}}function i(e,...t){return{_$luxType$:2,strings:e,values:t}}function o(e,...t){return{_$luxType$:3,strings:e,values:t}}function s(e){return e&&void 0!==e._$luxType$}function l(e){if(null==e)return"";const t=String(e);return-1===t.indexOf("<")&&-1===t.indexOf(">")&&-1===t.indexOf("&")?t:t.replace(/[<>&"']/g,e=>({"<":"<",">":">","&":"&",'"':""","'":"'"}[e]))}const c=/(?:([@.?][\w-]+)|(ref)|(class))=\s*$/;function a(e,t,r){if(t!==n&&null!=t)if(function(e){return e&&"repeat"===e._type}(t))!function(e,t){const{items:n,keyFn:r,renderFn:i}=t,o=e._repeatState;if(o)for(const e of o.entries)e.span&&e.span.parentNode&&e.span.parentNode.removeChild(e.span);const l=document.createDocumentFragment(),c=[];for(const e of n){const t=r(e),n=i(e),o=document.createElement("span");o.style.display="contents",s(n)?f(n,o):null!=n&&!1!==n&&o.appendChild(document.createTextNode(String(n))),l.appendChild(o),c.push({key:t,result:n,span:o})}e.appendChild(l),e._repeatState={entries:c}}(e,t);else if(s(t))f(t,e);else if(Array.isArray(t)){d(e);for(const n of t)if(s(n)){const t=document.createElement("span");t.style.display="contents",f(n,t),e.appendChild(t)}else n instanceof Node?e.appendChild(n):null!=n&&!1!==n&&e.appendChild(document.createTextNode(String(n)))}else{if(t instanceof Node)return d(e),void e.appendChild(t);1===e.childNodes.length&&e.firstChild.nodeType===Node.TEXT_NODE?e.firstChild.textContent=String(t):(d(e),e.appendChild(document.createTextNode(String(t))))}else d(e)}function d(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function u(e,t){const{element:r,name:i,prefix:o}=e;switch(o){case"@":{const o=e.committedValue,s=null==t||t===n,l=s&&null!=o||t?.capture!==o?.capture||t?.once!==o?.once||t?.passive!==o?.passive,c=!s&&(null==o||l);if(l&&r.removeEventListener(i,e._handler||o,o),c)if("function"==typeof t){const t=e._host||(e._host={handleEvent(t){const n=e.committedValue;if("function"==typeof n){const e=r.getRootNode().host||r;n.call(e,t)}}});e._handler=t,r.addEventListener(i,t)}else if("object"==typeof t&&t?.handleEvent){const n={handleEvent:e=>t.handleEvent.call(t,e)};e._handler=n,r.addEventListener(i,n,{capture:t.capture,once:t.once,passive:t.passive})}e.committedValue=t;break}case".":r[i]=t===n?void 0:t;break;case"?":r.toggleAttribute(i,!!t);break;case"ref":"function"==typeof t&&t(r);break;case"class":if("string"==typeof t)r.className=t;else if("object"==typeof t&&null!=t){const e=r.className||"",n=e?e.split(/\s+/):[];for(const[e,r]of Object.entries(t))if(r)n.includes(e)||n.push(e);else{const t=n.indexOf(e);-1!==t&&n.splice(t,1)}r.className=n.filter(Boolean).join(" ")}break;default:null==t||!1===t?r.removeAttribute(i):r.setAttribute(i,!0===t?"":String(t))}}function f(e,t,n){if(!s(e))return void(t.textContent=e??"");const{strings:r,values:i}=e;if(t._luxActiveParts&&t._luxStrings===r){for(const e of t._luxActiveParts)e.index<i.length&&("child"===e.type?a(e.span,i[e.index]):u(e,i[e.index]));return}const o=document.createElement("template"),l=function(e){const t=[];let n="";for(let r=0;r<e.length;r++)if(n+=e[r],r<e.length-1){const e=n.match(c);if(e){const i=e[1],o=!!e[2],s=!!e[3];let l="",c="";i?(l=i[0],c=i.slice(1)):o?(l="ref",c="ref"):s&&(l="class",c="class");const a=`lux-attr-${r}`;n=n.slice(0,-e[0].length)+`${a}="${c}" `,t.push({type:"attr",name:c,prefix:l,marker:a,index:r})}else{const e=`lux-${r}`;n+=`\x3c!--${e}--\x3e`,t.push({type:"child",marker:e,index:r})}}return{html:n,parts:t}}(r);o.innerHTML=l.html;const d=o.content.cloneNode(!0),f=[];for(const e of l.parts)if("child"===e.type){const t=document.createTreeWalker(d,NodeFilter.SHOW_COMMENT);let n;for(;n=t.nextNode();)if(n.data===e.marker){const t=document.createElement("span");t.style.display="contents",n.parentNode.replaceChild(t,n),a(t,i[e.index]),f.push({type:"child",span:t,index:e.index});break}}else{const t=d.querySelector(`[${e.marker}]`);if(t){t.removeAttribute(e.marker);const n={type:"attr",element:t,name:e.name,prefix:e.prefix,index:e.index,committedValue:void 0};u(n,i[e.index]),f.push(n)}}t.textContent="",t.appendChild(d),t._luxActiveParts=f,t._luxStrings=r}function p(e,t,n){return{_type:"repeat",items:e,keyFn:t,renderFn:n}}function m(e,t,n=()=>""){return e?t():n()}function h(e,t=""){return e?t:""}function x(e){return e}function y(e){return e}function v(e,t){return t()}export{e as HTML_RESULT,t as SVG_RESULT,x as classMap,o as css,l as escapeHtml,v as guard,r as html,s as isTemplateResult,n as nothing,f as render,p as repeat,h as show,y as styleMap,i as svg,m as when};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function r(r){return 3===(r=r.replace("#","")).length&&(r=r[0]+r[0]+r[1]+r[1]+r[2]+r[2]),{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16)}}function u(r,u,t){r/=255,u/=255,t/=255;const e=Math.max(r,u,t),l=Math.min(r,u,t);let n,i,x=(e+l)/2;if(e===l)n=i=0;else{const a=e-l;switch(i=x>.5?a/(2-e-l):a/(e+l),e){case r:n=((u-t)/a+(u<t?6:0))/6;break;case u:n=((t-r)/a+2)/6;break;case t:n=((r-u)/a+4)/6}}return{h:Math.round(360*n),s:Math.round(100*i),l:Math.round(100*x)}}function t(t){const{r:e,g:l,b:n}=r(t);return u(e,l,n)}function e(r,u,t){const{r:e,g:l,b:n}=function(r,u,t){let e,l,n;if(r/=360,t/=100,0==(u/=100))e=l=n=t;else{const i=(r,u,t)=>(t<0&&(t+=1),t>1&&(t-=1),t<1/6?r+6*(u-r)*t:t<.5?u:t<2/3?r+(u-r)*(2/3-t)*6:r),x=t<.5?t*(1+u):t+u-t*u,a=2*t-x;e=i(a,x,r+1/3),l=i(a,x,r),n=i(a,x,r-1/3)}return{r:Math.round(255*e),g:Math.round(255*l),b:Math.round(255*n)}}(r,u,t);return"#"+[e,l,n].map(r=>r.toString(16).padStart(2,"0")).join("")}function l(u){const{r:t,g:e,b:l}=r(u);return function(r,u,t){return`${r} ${u} ${t}`}(t,e,l)}function n(r,u=" "){let t=":root {\n";for(const[e,l]of Object.entries(r))t+=`${u}--${e}: ${l};\n`;return t+="}",t}const i={primary:"#6c5ce7",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#3b82f6"};function x(r={}){"string"==typeof r&&(r={primary:r});const u={...i,...r.colors};let x=r.dark??!1,a=r.radius??"8px",s=r.font??'-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif';function o(){const{h:r,s:n,l:i}=t(u.primary),o=function(r,u,t){const l=[[50,97,90],[100,93,85],[200,86,78],[300,76,68],[400,64,58],[500,u,t],[600,u,45],[700,u,38],[800,u,28],[900,u,18]],n={};for(const[u,t,i]of l)n[u]=e(r,t,i);return n}(r,n,i),c={};for(const[r,l]of Object.entries(u)){if("primary"===r)continue;const{h:u,s:n}=t(l);c[r]={500:l,light:e(u,60,93)}}const p=x?function(r,u){return{"lux-primary-50":l(r[900]),"lux-primary-100":l(r[800]),"lux-primary-200":l(r[700]),"lux-primary-300":l(r[600]),"lux-primary-400":l(r[400]),"lux-primary-500":l(r[500]),"lux-primary-600":l(r[300]),"lux-primary-700":l(r[200]),"lux-primary-800":l(r[100]),"lux-primary-900":l(r[50]),"lux-success":l(u.success[500]),"lux-warning":l(u.warning[500]),"lux-error":l(u.error[500]),"lux-info":l(u.info[500]),"lux-bg":"15 23 42","lux-bg-alt":"30 41 59","lux-surface":"15 23 42","lux-card":"30 41 59","lux-overlay":"0 0 0 / 70%","lux-text":"241 245 249","lux-text-dim":"148 163 184","lux-text-muted":"100 116 139","lux-border":"51 65 85","lux-border-light":"71 85 105","lux-hover":"255 255 255 / 8%","lux-active":"255 255 255 / 12%","lux-focus":"0 0 0 / 50%","lux-radius-sm":"6px","lux-radius":"8px","lux-radius-lg":"12px","lux-radius-xl":"16px","lux-radius-full":"9999px"}}(o,c):function(r,u){return{"lux-primary-50":l(r[50]),"lux-primary-100":l(r[100]),"lux-primary-200":l(r[200]),"lux-primary-300":l(r[300]),"lux-primary-400":l(r[400]),"lux-primary-500":l(r[500]),"lux-primary-600":l(r[600]),"lux-primary-700":l(r[700]),"lux-primary-800":l(r[800]),"lux-primary-900":l(r[900]),"lux-success":l(u.success[500]),"lux-warning":l(u.warning[500]),"lux-error":l(u.error[500]),"lux-info":l(u.info[500]),"lux-bg":"15 23 42","lux-bg-alt":"30 41 59","lux-surface":"15 23 42","lux-card":"30 41 59","lux-overlay":"0 0 0 / 50%","lux-text":"241 245 249","lux-text-dim":"148 163 184","lux-text-muted":"100 116 139","lux-border":"51 65 85","lux-border-light":"71 85 105","lux-hover":"255 255 255 / 5%","lux-active":"255 255 255 / 10%","lux-focus":"0 0 0 / 40%","lux-radius-sm":"6px","lux-radius":"8px","lux-radius-lg":"12px","lux-radius-xl":"16px","lux-radius-full":"9999px"}}(o,c);return p["lux-radius"]=a,p["lux-font"]=s,p}return{apply(){!function(r){let u=document.getElementById("lux-theme");u||(u=document.createElement("style"),u.id="lux-theme",document.head.appendChild(u)),u.textContent=n(r)}(o())},setColors(r){Object.assign(u,r),this.apply()},setDark(r){x=r,this.apply()},getCSS:()=>n(o()),getTokens:()=>o(),getColors:()=>({...u}),get primary(){return u.primary},get dark(){return x}}}export{x as createTheme,t as hexToHsl,r as hexToRgb,e as hslToHex,u as rgbToHsl};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lux Dark Theme
|
|
3
|
+
* Import this file to apply the dark theme:
|
|
4
|
+
* import '@ahriknow/lux/themes/dark.css';
|
|
5
|
+
*/
|
|
6
|
+
:root {
|
|
7
|
+
/* ── Primary (lighter for dark bg) ── */
|
|
8
|
+
--lux-primary-50: 35 30 100;
|
|
9
|
+
--lux-primary-100: 52 45 136;
|
|
10
|
+
--lux-primary-200: 67 58 168;
|
|
11
|
+
--lux-primary-300: 82 73 195;
|
|
12
|
+
--lux-primary-400: 129 120 247;
|
|
13
|
+
--lux-primary-500: 139 92 246;
|
|
14
|
+
--lux-primary-600: 147 100 255;
|
|
15
|
+
--lux-primary-700: 186 200 255;
|
|
16
|
+
--lux-primary-800: 219 228 255;
|
|
17
|
+
--lux-primary-900: 238 242 255;
|
|
18
|
+
|
|
19
|
+
/* ── Semantic ── */
|
|
20
|
+
--lux-success: 152 195 121;
|
|
21
|
+
--lux-warning: 209 154 102;
|
|
22
|
+
--lux-error: 224 108 117;
|
|
23
|
+
--lux-info: 86 182 194;
|
|
24
|
+
|
|
25
|
+
--lux-success-light: 20 83 45;
|
|
26
|
+
--lux-warning-light: 113 63 18;
|
|
27
|
+
--lux-error-light: 127 29 29;
|
|
28
|
+
--lux-info-light: 23 37 84;
|
|
29
|
+
|
|
30
|
+
/* ── Background ── */
|
|
31
|
+
--lux-bg: 40 44 52;
|
|
32
|
+
--lux-bg-alt: 50 54 64;
|
|
33
|
+
--lux-surface: 40 44 52;
|
|
34
|
+
--lux-card: 50 54 64;
|
|
35
|
+
--lux-overlay: 0 0 0 / 60%;
|
|
36
|
+
|
|
37
|
+
/* ── Nav ── */
|
|
38
|
+
--lux-nav-bg: rgba(40, 44, 52, 0.92);
|
|
39
|
+
|
|
40
|
+
/* ── Text ── */
|
|
41
|
+
--lux-text: 171 178 191;
|
|
42
|
+
--lux-text-secondary: 148 155 172;
|
|
43
|
+
--lux-text-muted: 92 99 112;
|
|
44
|
+
|
|
45
|
+
/* ── Scrollbar ── */
|
|
46
|
+
--lux-scrollbar: 92 99 112;
|
|
47
|
+
|
|
48
|
+
/* ── Border ── */
|
|
49
|
+
--lux-border: 62 68 81;
|
|
50
|
+
--lux-border-hover: 76 82 96;
|
|
51
|
+
--lux-border-focus: 198 120 221;
|
|
52
|
+
|
|
53
|
+
/* ── Interactive ── */
|
|
54
|
+
--lux-hover: 255 255 255 / 5%;
|
|
55
|
+
--lux-active: 255 255 255 / 8%;
|
|
56
|
+
--lux-focus: 0 0 0 / 50%;
|
|
57
|
+
--lux-disabled: 50 54 64;
|
|
58
|
+
|
|
59
|
+
/* ── Shadow ── */
|
|
60
|
+
--lux-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 30%);
|
|
61
|
+
--lux-shadow: 0 1px 3px 0 rgb(0 0 0 / 40%), 0 1px 2px -1px rgb(0 0 0 / 40%);
|
|
62
|
+
--lux-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 40%), 0 2px 4px -2px rgb(0 0 0 / 40%);
|
|
63
|
+
--lux-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 40%), 0 4px 6px -4px rgb(0 0 0 / 40%);
|
|
64
|
+
|
|
65
|
+
/* ── Radius (same as light) ── */
|
|
66
|
+
--lux-radius-sm: 4px;
|
|
67
|
+
--lux-radius: 6px;
|
|
68
|
+
--lux-radius-md: 8px;
|
|
69
|
+
--lux-radius-lg: 12px;
|
|
70
|
+
--lux-radius-xl: 16px;
|
|
71
|
+
--lux-radius-full: 9999px;
|
|
72
|
+
|
|
73
|
+
/* ── Typography ── */
|
|
74
|
+
--lux-font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
|
|
75
|
+
--lux-font-mono: 'SF Mono', 'Fira Code', 'Cascadia Code', Consolas, monospace;
|
|
76
|
+
--lux-font-xs: 0.75rem;
|
|
77
|
+
--lux-font-sm: 0.875rem;
|
|
78
|
+
--lux-font-base: 1rem;
|
|
79
|
+
--lux-font-lg: 1.125rem;
|
|
80
|
+
--lux-font-xl: 1.25rem;
|
|
81
|
+
--lux-font-2xl: 1.5rem;
|
|
82
|
+
--lux-font-3xl: 1.875rem;
|
|
83
|
+
|
|
84
|
+
/* ── Spacing ── */
|
|
85
|
+
--lux-space-1: 0.25rem;
|
|
86
|
+
--lux-space-2: 0.5rem;
|
|
87
|
+
--lux-space-3: 0.75rem;
|
|
88
|
+
--lux-space-4: 1rem;
|
|
89
|
+
--lux-space-5: 1.25rem;
|
|
90
|
+
--lux-space-6: 1.5rem;
|
|
91
|
+
--lux-space-8: 2rem;
|
|
92
|
+
--lux-space-10: 2.5rem;
|
|
93
|
+
--lux-space-12: 3rem;
|
|
94
|
+
|
|
95
|
+
/* ── Transition ── */
|
|
96
|
+
--lux-transition: 150ms ease;
|
|
97
|
+
--lux-transition-slow: 300ms ease;
|
|
98
|
+
|
|
99
|
+
/* ── Code ── */
|
|
100
|
+
--lux-code-bg: 40 44 52;
|
|
101
|
+
--lux-code-header: 50 54 64;
|
|
102
|
+
--lux-code-border: 62 68 81;
|
|
103
|
+
--lux-code-text: 171 178 191;
|
|
104
|
+
--lux-code-keyword: 198 120 221;
|
|
105
|
+
--lux-code-string: 152 195 121;
|
|
106
|
+
--lux-code-number: 209 154 102;
|
|
107
|
+
--lux-code-comment: 92 99 112;
|
|
108
|
+
--lux-code-function: 97 174 238;
|
|
109
|
+
--lux-code-class: 230 192 123;
|
|
110
|
+
--lux-code-variable: 224 108 117;
|
|
111
|
+
--lux-code-tag: 224 108 117;
|
|
112
|
+
--lux-code-attr: 209 154 102;
|
|
113
|
+
--lux-code-selector: 152 195 121;
|
|
114
|
+
--lux-code-literal: 86 182 194;
|
|
115
|
+
--lux-code-symbol: 97 174 238;
|
|
116
|
+
--lux-code-built-in: 230 192 123;
|
|
117
|
+
--lux-code-meta: 97 174 238;
|
|
118
|
+
--lux-code-section: 224 108 117;
|
|
119
|
+
--lux-code-bullet: 97 174 238;
|
|
120
|
+
--lux-code-operator: 171 178 191;
|
|
121
|
+
--lux-code-punctuation: 171 178 191;
|
|
122
|
+
--lux-code-type: 209 154 102;
|
|
123
|
+
--lux-code-name: 224 108 117;
|
|
124
|
+
--lux-code-addition: 152 195 121;
|
|
125
|
+
--lux-code-deletion: 224 108 117;
|
|
126
|
+
--lux-code-emphasis: 171 178 191;
|
|
127
|
+
--lux-code-strong: 171 178 191;
|
|
128
|
+
|
|
129
|
+
color-scheme: dark;
|
|
130
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lux Light Theme
|
|
3
|
+
* Import this file to apply the light theme:
|
|
4
|
+
* import '@ahriknow/lux/themes/light.css';
|
|
5
|
+
*/
|
|
6
|
+
:root {
|
|
7
|
+
/* ── Primary ── */
|
|
8
|
+
--lux-primary-50: 238 242 255;
|
|
9
|
+
--lux-primary-100: 219 228 255;
|
|
10
|
+
--lux-primary-200: 186 200 255;
|
|
11
|
+
--lux-primary-300: 147 165 255;
|
|
12
|
+
--lux-primary-400: 108 92 231;
|
|
13
|
+
--lux-primary-500: 99 91 218;
|
|
14
|
+
--lux-primary-600: 82 73 195;
|
|
15
|
+
--lux-primary-700: 67 58 168;
|
|
16
|
+
--lux-primary-800: 52 45 136;
|
|
17
|
+
--lux-primary-900: 35 30 100;
|
|
18
|
+
|
|
19
|
+
/* ── Semantic ── */
|
|
20
|
+
--lux-success: 34 197 94;
|
|
21
|
+
--lux-warning: 245 158 11;
|
|
22
|
+
--lux-error: 239 68 68;
|
|
23
|
+
--lux-info: 59 130 246;
|
|
24
|
+
|
|
25
|
+
--lux-success-light: 220 252 231;
|
|
26
|
+
--lux-warning-light: 254 243 199;
|
|
27
|
+
--lux-error-light: 254 226 226;
|
|
28
|
+
--lux-info-light: 219 234 254;
|
|
29
|
+
|
|
30
|
+
/* ── Background ── */
|
|
31
|
+
--lux-bg: 248 250 252;
|
|
32
|
+
--lux-bg-alt: 241 245 249;
|
|
33
|
+
--lux-surface: 255 255 255;
|
|
34
|
+
--lux-card: 255 255 255;
|
|
35
|
+
--lux-overlay: 0 0 0 / 40%;
|
|
36
|
+
|
|
37
|
+
/* ── Nav ── */
|
|
38
|
+
--lux-nav-bg: rgba(255, 255, 255, 0.88);
|
|
39
|
+
|
|
40
|
+
/* ── Text ── */
|
|
41
|
+
--lux-text: 15 23 42;
|
|
42
|
+
--lux-text-secondary: 51 65 85;
|
|
43
|
+
--lux-text-muted: 100 116 139;
|
|
44
|
+
|
|
45
|
+
/* ── Scrollbar ── */
|
|
46
|
+
--lux-scrollbar: 180 196 214;
|
|
47
|
+
|
|
48
|
+
/* ── Border ── */
|
|
49
|
+
--lux-border: 226 232 240;
|
|
50
|
+
--lux-border-hover: 203 213 225;
|
|
51
|
+
--lux-border-focus: 99 91 218;
|
|
52
|
+
|
|
53
|
+
/* ── Interactive ── */
|
|
54
|
+
--lux-hover: 0 0 0 / 5%;
|
|
55
|
+
--lux-active: 0 0 0 / 8%;
|
|
56
|
+
--lux-focus: 0 0 0 / 30%;
|
|
57
|
+
--lux-disabled: 248 250 252;
|
|
58
|
+
|
|
59
|
+
/* ── Shadow ── */
|
|
60
|
+
--lux-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 5%);
|
|
61
|
+
--lux-shadow: 0 1px 3px 0 rgb(0 0 0 / 10%), 0 1px 2px -1px rgb(0 0 0 / 10%);
|
|
62
|
+
--lux-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 10%), 0 2px 4px -2px rgb(0 0 0 / 10%);
|
|
63
|
+
--lux-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 10%), 0 4px 6px -4px rgb(0 0 0 / 10%);
|
|
64
|
+
|
|
65
|
+
/* ── Radius ── */
|
|
66
|
+
--lux-radius-sm: 4px;
|
|
67
|
+
--lux-radius: 6px;
|
|
68
|
+
--lux-radius-md: 8px;
|
|
69
|
+
--lux-radius-lg: 12px;
|
|
70
|
+
--lux-radius-xl: 16px;
|
|
71
|
+
--lux-radius-full: 9999px;
|
|
72
|
+
|
|
73
|
+
/* ── Typography ── */
|
|
74
|
+
--lux-font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
|
|
75
|
+
--lux-font-mono: 'SF Mono', 'Fira Code', 'Cascadia Code', Consolas, monospace;
|
|
76
|
+
--lux-font-xs: 0.75rem;
|
|
77
|
+
--lux-font-sm: 0.875rem;
|
|
78
|
+
--lux-font-base: 1rem;
|
|
79
|
+
--lux-font-lg: 1.125rem;
|
|
80
|
+
--lux-font-xl: 1.25rem;
|
|
81
|
+
--lux-font-2xl: 1.5rem;
|
|
82
|
+
--lux-font-3xl: 1.875rem;
|
|
83
|
+
|
|
84
|
+
/* ── Spacing ── */
|
|
85
|
+
--lux-space-1: 0.25rem;
|
|
86
|
+
--lux-space-2: 0.5rem;
|
|
87
|
+
--lux-space-3: 0.75rem;
|
|
88
|
+
--lux-space-4: 1rem;
|
|
89
|
+
--lux-space-5: 1.25rem;
|
|
90
|
+
--lux-space-6: 1.5rem;
|
|
91
|
+
--lux-space-8: 2rem;
|
|
92
|
+
--lux-space-10: 2.5rem;
|
|
93
|
+
--lux-space-12: 3rem;
|
|
94
|
+
|
|
95
|
+
/* ── Transition ── */
|
|
96
|
+
--lux-transition: 150ms ease;
|
|
97
|
+
--lux-transition-slow: 300ms ease;
|
|
98
|
+
|
|
99
|
+
/* ── Code ── */
|
|
100
|
+
--lux-code-bg: 250 250 250;
|
|
101
|
+
--lux-code-header: 241 245 249;
|
|
102
|
+
--lux-code-border: 226 232 240;
|
|
103
|
+
--lux-code-text: 56 58 66;
|
|
104
|
+
--lux-code-keyword: 166 38 164;
|
|
105
|
+
--lux-code-string: 80 161 79;
|
|
106
|
+
--lux-code-number: 152 104 1;
|
|
107
|
+
--lux-code-comment: 160 161 167;
|
|
108
|
+
--lux-code-function: 64 120 242;
|
|
109
|
+
--lux-code-class: 193 132 1;
|
|
110
|
+
--lux-code-variable: 228 86 73;
|
|
111
|
+
--lux-code-tag: 228 86 73;
|
|
112
|
+
--lux-code-attr: 152 104 1;
|
|
113
|
+
--lux-code-selector: 80 161 79;
|
|
114
|
+
--lux-code-literal: 1 132 188;
|
|
115
|
+
--lux-code-symbol: 64 120 242;
|
|
116
|
+
--lux-code-built-in: 193 132 1;
|
|
117
|
+
--lux-code-meta: 64 120 242;
|
|
118
|
+
--lux-code-section: 228 86 73;
|
|
119
|
+
--lux-code-bullet: 64 120 242;
|
|
120
|
+
--lux-code-operator: 56 58 66;
|
|
121
|
+
--lux-code-punctuation: 56 58 66;
|
|
122
|
+
--lux-code-type: 152 104 1;
|
|
123
|
+
--lux-code-name: 228 86 73;
|
|
124
|
+
--lux-code-addition: 80 161 79;
|
|
125
|
+
--lux-code-deletion: 228 86 73;
|
|
126
|
+
--lux-code-emphasis: 56 58 66;
|
|
127
|
+
--lux-code-strong: 56 58 66;
|
|
128
|
+
}
|