UNPKG

baked-recipe-admin

Version:

Baked is an opinionated framework for .NET in backend and Nuxt in frontend. This is a recipe package that brings together all the components one needs for an Admin UI.

1 lines 68 kB
{"version":3,"sources":["../src/actions/definePreset.ts","../src/actions/updatePreset.ts","../src/service/index.ts","../src/utils/sharedUtils.ts","../src/utils/themeUtils.ts","../src/helpers/color/mix.ts","../src/helpers/color/palette.ts","../src/helpers/color/shade.ts","../src/helpers/color/tint.ts","../src/helpers/css.ts","../src/helpers/dt.ts","../src/helpers/t.ts","../src/helpers/toVariables.ts","../src/config/index.ts","../src/actions/updatePrimaryPalette.ts","../src/actions/updateSurfacePalette.ts","../src/actions/usePreset.ts","../src/actions/useTheme.ts","../src/stylesheet/index.ts"],"sourcesContent":["import { deepMerge } from '@primeuix/utils/object';\n\nexport default function definePreset<T extends Record<string, unknown>>(...presets: T[]): T {\n return deepMerge(...presets) as T;\n}\n","import { deepMerge } from '@primeuix/utils/object';\nimport Theme from '../config/index';\n\nexport default function updatePreset<T extends Record<string, unknown>>(...presets: T[]): T {\n const newPreset = deepMerge(Theme.getPreset(), ...presets);\n\n Theme.setPreset(newPreset);\n\n return newPreset as T;\n}\n","import { EventBus } from '@primeuix/utils/eventbus';\n\nconst ThemeService = EventBus();\n\nexport default ThemeService;\n","import { getKeyValue, isArray, isNotEmpty, isNumber, isObject, isString, matchRegex, toKebabCase } from '@primeuix/utils/object';\n\nexport const EXPR_REGEX = /{([^}]*)}/g; // Exp: '{a}', '{a.b}', '{a.b.c}' etc.\nexport const CALC_REGEX = /(\\d+\\s+[\\+\\-\\*\\/]\\s+\\d+)/g;\nexport const VAR_REGEX = /var\\([^)]+\\)/g;\n\nexport function toTokenKey(str: string): string {\n return isString(str) ? str.replace(/[A-Z]/g, (c: string, i: number) => (i === 0 ? c : '.' + c.toLowerCase())).toLowerCase() : str;\n}\n\nexport function merge(value1: any, value2: any): void {\n if (isArray(value1)) {\n value1.push(...(value2 || []));\n } else if (isObject(value1)) {\n Object.assign(value1, value2);\n }\n}\n\nexport function toValue(value: any): any {\n // Check for Figma ($value-$type)\n return isObject(value) && value.hasOwnProperty('$value') && value.hasOwnProperty('$type') ? (value as any).$value : value;\n}\n\nexport function toUnit(value: string, variable: string = ''): string {\n const excludedProperties = ['opacity', 'z-index', 'line-height', 'font-weight', 'flex', 'flex-grow', 'flex-shrink', 'order'];\n\n if (!excludedProperties.some((property) => variable.endsWith(property))) {\n const val = `${value}`.trim();\n const valArr = val.split(' ');\n\n return valArr.map((v) => (isNumber(v) ? `${v}px` : v)).join(' ');\n }\n\n return value;\n}\n\nexport function toNormalizePrefix(prefix: string): string {\n return prefix.replaceAll(/ /g, '').replace(/[^\\w]/g, '-');\n}\n\nexport function toNormalizeVariable(prefix: string = '', variable: string = ''): string {\n return toNormalizePrefix(`${isString(prefix, false) && isString(variable, false) ? `${prefix}-` : prefix}${variable}`);\n}\n\nexport function getVariableName(prefix: string = '', variable: string = ''): string {\n return `--${toNormalizeVariable(prefix, variable)}`;\n}\n\nexport function hasOddBraces(str: string = ''): boolean {\n const openBraces = (str.match(/{/g) || []).length;\n const closeBraces = (str.match(/}/g) || []).length;\n\n return (openBraces + closeBraces) % 2 !== 0;\n}\n\nexport function getVariableValue(value: any, variable: string = '', prefix: string = '', excludedKeyRegexes: RegExp[] = [], fallback?: string): string | undefined {\n if (isString(value)) {\n const val = value.trim();\n\n if (hasOddBraces(val)) {\n return undefined;\n } else if (matchRegex(val, EXPR_REGEX)) {\n const _val = val.replaceAll(EXPR_REGEX, (v: string) => {\n const path = v.replace(/{|}/g, '');\n const keys = path.split('.').filter((_v: string) => !excludedKeyRegexes.some((_r) => matchRegex(_v, _r)));\n\n return `var(${getVariableName(prefix, toKebabCase(keys.join('-')))}${isNotEmpty(fallback) ? `, ${fallback}` : ''})`;\n });\n\n return matchRegex(_val.replace(VAR_REGEX, '0'), CALC_REGEX) ? `calc(${_val})` : _val;\n }\n\n return val; //toUnit(val, variable);\n } else if (isNumber(value)) {\n return value; //toUnit(value, variable);\n }\n\n return undefined;\n}\n\nexport function getComputedValue(obj = {}, value: any): any {\n if (isString(value)) {\n const val = value.trim();\n\n return matchRegex(val, EXPR_REGEX) ? val.replaceAll(EXPR_REGEX, (v: string) => getKeyValue(obj, v.replace(/{|}/g, '')) as string) : val;\n } else if (isNumber(value)) {\n return value;\n }\n\n return undefined;\n}\n\nexport function setProperty(properties: string[], key: string, value?: string) {\n if (isString(key, false)) {\n properties.push(`${key}:${value};`);\n }\n}\n\nexport function getRule(selector: string, properties: string): string {\n if (selector) {\n return `${selector}{${properties}}`;\n }\n\n return '';\n}\n\nexport function evaluateDtExpressions(input: string, fn: (...args: any[]) => string): string {\n if (input.indexOf('dt(') === -1) return input;\n\n function fastParseArgs(str: string, fn: (...args: (string | number)[]) => string): (string | number)[] {\n const args: (string | number)[] = [];\n let i = 0;\n let current = '';\n let quote: string | null = null;\n let depth = 0;\n\n while (i <= str.length) {\n const c = str[i];\n\n if ((c === '\"' || c === \"'\" || c === '`') && str[i - 1] !== '\\\\') {\n quote = quote === c ? null : c;\n }\n\n if (!quote) {\n if (c === '(') depth++;\n if (c === ')') depth--;\n\n if ((c === ',' || i === str.length) && depth === 0) {\n const arg = current.trim();\n\n if (arg.startsWith('dt(')) {\n args.push(evaluateDtExpressions(arg, fn));\n } else {\n args.push(parseArg(arg));\n }\n\n current = '';\n i++;\n continue;\n }\n }\n\n if (c !== undefined) current += c;\n i++;\n }\n\n return args;\n }\n\n function parseArg(arg: string): string | number {\n const q = arg[0];\n\n if ((q === '\"' || q === \"'\" || q === '`') && arg[arg.length - 1] === q) {\n return arg.slice(1, -1);\n }\n\n const num = Number(arg);\n\n return isNaN(num) ? arg : num;\n }\n\n const indices: [number, number][] = [];\n const stack: number[] = [];\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === 'd' && input.slice(i, i + 3) === 'dt(') {\n stack.push(i);\n i += 2;\n } else if (input[i] === ')' && stack.length > 0) {\n const start = stack.pop()!;\n\n if (stack.length === 0) {\n indices.push([start, i]);\n }\n }\n }\n\n if (!indices.length) return input;\n\n for (let i = indices.length - 1; i >= 0; i--) {\n const [start, end] = indices[i];\n const inner = input.slice(start + 3, end);\n const args = fastParseArgs(inner, fn);\n const resolved = fn(...args);\n\n input = input.slice(0, start) + resolved + input.slice(end + 1);\n }\n\n return input;\n}\n","import { isNotEmpty, isObject, matchRegex, minifyCSS, resolve } from '@primeuix/utils/object';\nimport { dt, toVariables } from '../helpers/index';\nimport { getRule } from './sharedUtils';\n\nexport default {\n regex: {\n rules: {\n class: {\n pattern: /^\\.([a-zA-Z][\\w-]*)$/,\n resolve(value: string) {\n return { type: 'class', selector: value, matched: this.pattern.test(value.trim()) };\n }\n },\n attr: {\n pattern: /^\\[(.*)\\]$/,\n resolve(value: string) {\n return { type: 'attr', selector: `:root${value}`, matched: this.pattern.test(value.trim()) };\n }\n },\n media: {\n pattern: /^@media (.*)$/,\n resolve(value: string) {\n return { type: 'media', selector: value, matched: this.pattern.test(value.trim()) };\n }\n },\n system: {\n pattern: /^system$/,\n resolve(value: string) {\n return { type: 'system', selector: '@media (prefers-color-scheme: dark)', matched: this.pattern.test(value.trim()) };\n }\n },\n custom: {\n resolve(value: string) {\n return { type: 'custom', selector: value, matched: true };\n }\n }\n },\n resolve(value: any) {\n const rules = Object.keys(this.rules)\n .filter((k) => k !== 'custom')\n .map((r) => (this.rules as any)[r]);\n\n return [value].flat().map((v) => rules.map((r) => r.resolve(v)).find((rr) => rr.matched) ?? this.rules.custom.resolve(v));\n }\n },\n _toVariables(theme: any, options: any) {\n return toVariables(theme, { prefix: options?.prefix });\n },\n getCommon({ name = '', theme = {}, params, set, defaults }: any) {\n const { preset, options } = theme;\n let primitive_css, primitive_tokens, semantic_css, semantic_tokens, global_css, global_tokens, style;\n\n // @todo - check if options is not empty\n if (isNotEmpty(preset) && options.transform !== 'strict') {\n const { primitive, semantic, extend } = preset;\n const { colorScheme, ...sRest } = semantic || {};\n const { colorScheme: eColorScheme, ...eRest } = extend || {};\n const { dark, ...csRest } = colorScheme || {};\n const { dark: eDark, ...ecsRest } = eColorScheme || {};\n const prim_var: any = isNotEmpty(primitive) ? this._toVariables({ primitive }, options) : {};\n const sRest_var: any = isNotEmpty(sRest) ? this._toVariables({ semantic: sRest }, options) : {};\n const csRest_var: any = isNotEmpty(csRest) ? this._toVariables({ light: csRest }, options) : {};\n const csDark_var: any = isNotEmpty(dark) ? this._toVariables({ dark }, options) : {};\n const eRest_var: any = isNotEmpty(eRest) ? this._toVariables({ semantic: eRest }, options) : {};\n const ecsRest_var: any = isNotEmpty(ecsRest) ? this._toVariables({ light: ecsRest }, options) : {};\n const ecsDark_var: any = isNotEmpty(eDark) ? this._toVariables({ dark: eDark }, options) : {};\n\n const [prim_css, prim_tokens] = [prim_var.declarations ?? '', prim_var.tokens];\n const [sRest_css, sRest_tokens] = [sRest_var.declarations ?? '', sRest_var.tokens || []];\n const [csRest_css, csRest_tokens] = [csRest_var.declarations ?? '', csRest_var.tokens || []];\n const [csDark_css, csDark_tokens] = [csDark_var.declarations ?? '', csDark_var.tokens || []];\n const [eRest_css, eRest_tokens] = [eRest_var.declarations ?? '', eRest_var.tokens || []];\n const [ecsRest_css, ecsRest_tokens] = [ecsRest_var.declarations ?? '', ecsRest_var.tokens || []];\n const [ecsDark_css, ecsDark_tokens] = [ecsDark_var.declarations ?? '', ecsDark_var.tokens || []];\n\n primitive_css = this.transformCSS(name, prim_css, 'light', 'variable', options, set, defaults);\n primitive_tokens = prim_tokens;\n\n const semantic_light_css = this.transformCSS(name, `${sRest_css}${csRest_css}`, 'light', 'variable', options, set, defaults);\n const semantic_dark_css = this.transformCSS(name, `${csDark_css}`, 'dark', 'variable', options, set, defaults);\n\n semantic_css = `${semantic_light_css}${semantic_dark_css}`;\n semantic_tokens = [...new Set([...sRest_tokens, ...csRest_tokens, ...csDark_tokens])];\n\n const global_light_css = this.transformCSS(name, `${eRest_css}${ecsRest_css}color-scheme:light`, 'light', 'variable', options, set, defaults);\n const global_dark_css = this.transformCSS(name, `${ecsDark_css}color-scheme:dark`, 'dark', 'variable', options, set, defaults);\n\n global_css = `${global_light_css}${global_dark_css}`;\n global_tokens = [...new Set([...eRest_tokens, ...ecsRest_tokens, ...ecsDark_tokens])];\n\n style = resolve(preset.css, { dt }) as string;\n }\n\n return {\n primitive: {\n css: primitive_css,\n tokens: primitive_tokens\n },\n semantic: {\n css: semantic_css,\n tokens: semantic_tokens\n },\n global: {\n css: global_css,\n tokens: global_tokens\n },\n style\n };\n },\n getPreset({ name = '', preset = {}, options, params, set, defaults, selector }: any) {\n let p_css, p_tokens, p_style;\n\n if (isNotEmpty(preset) && options.transform !== 'strict') {\n const _name = name.replace('-directive', '');\n const { colorScheme, extend, css, ...vRest } = preset;\n const { colorScheme: eColorScheme, ...evRest } = extend || {};\n const { dark, ...csRest } = colorScheme || {};\n const { dark: ecsDark, ...ecsRest } = eColorScheme || {};\n const vRest_var: any = isNotEmpty(vRest) ? this._toVariables({ [_name]: { ...vRest, ...evRest } }, options) : {};\n const csRest_var: any = isNotEmpty(csRest) ? this._toVariables({ [_name]: { ...csRest, ...ecsRest } }, options) : {};\n const csDark_var: any = isNotEmpty(dark) ? this._toVariables({ [_name]: { ...dark, ...ecsDark } }, options) : {};\n\n const [vRest_css, vRest_tokens] = [vRest_var.declarations ?? '', vRest_var.tokens || []];\n const [csRest_css, csRest_tokens] = [csRest_var.declarations ?? '', csRest_var.tokens || []];\n const [csDark_css, csDark_tokens] = [csDark_var.declarations ?? '', csDark_var.tokens || []];\n\n const light_variable_css = this.transformCSS(_name, `${vRest_css}${csRest_css}`, 'light', 'variable', options, set, defaults, selector);\n const dark_variable_css = this.transformCSS(_name, csDark_css, 'dark', 'variable', options, set, defaults, selector);\n\n p_css = `${light_variable_css}${dark_variable_css}`;\n p_tokens = [...new Set([...vRest_tokens, ...csRest_tokens, ...csDark_tokens])];\n\n p_style = resolve(css, { dt }) as string;\n }\n\n return {\n css: p_css,\n tokens: p_tokens,\n style: p_style\n };\n },\n getPresetC({ name = '', theme = {}, params, set, defaults }: any) {\n const { preset, options } = theme;\n const cPreset = preset?.components?.[name];\n\n return this.getPreset({ name, preset: cPreset, options, params, set, defaults });\n },\n // @deprecated - use getPresetC instead\n getPresetD({ name = '', theme = {}, params, set, defaults }: any) {\n const dName = name.replace('-directive', '');\n const { preset, options } = theme;\n const dPreset = preset?.components?.[dName] || preset?.directives?.[dName];\n\n return this.getPreset({ name: dName, preset: dPreset, options, params, set, defaults });\n },\n applyDarkColorScheme(options: any) {\n return !(options.darkModeSelector === 'none' || options.darkModeSelector === false);\n },\n getColorSchemeOption(options: any, defaults: any) {\n return this.applyDarkColorScheme(options) ? this.regex.resolve(options.darkModeSelector === true ? defaults.options.darkModeSelector : (options.darkModeSelector ?? defaults.options.darkModeSelector)) : [];\n },\n getLayerOrder(name: string, options: any = {}, params: any, defaults: any) {\n const { cssLayer } = options;\n\n if (cssLayer) {\n const order = resolve(cssLayer.order || cssLayer.name || 'primeui', params);\n\n return `@layer ${order}`;\n }\n\n return '';\n },\n getCommonStyleSheet({ name = '', theme = {}, params, props = {}, set, defaults }: any) {\n const common = this.getCommon({ name, theme, params, set, defaults });\n const _props = Object.entries(props)\n .reduce((acc: any, [k, v]) => acc.push(`${k}=\"${v}\"`) && acc, [])\n .join(' ');\n\n return Object.entries(common || {})\n .reduce((acc: any, [key, value]) => {\n if (isObject(value) && Object.hasOwn(value, 'css')) {\n const _css = minifyCSS((value as any).css);\n const id = `${key}-variables`;\n\n acc.push(`<style type=\"text/css\" data-primevue-style-id=\"${id}\" ${_props}>${_css}</style>`); // @todo data-primevue -> data-primeui check in primevue usestyle\n }\n\n return acc;\n }, [])\n .join('');\n },\n getStyleSheet({ name = '', theme = {}, params, props = {}, set, defaults }: any) {\n const options = { name, theme, params, set, defaults };\n const preset_css = (name.includes('-directive') ? this.getPresetD(options) : this.getPresetC(options))?.css;\n const _props = Object.entries(props)\n .reduce((acc: any, [k, v]) => acc.push(`${k}=\"${v}\"`) && acc, [])\n .join(' ');\n\n return preset_css ? `<style type=\"text/css\" data-primevue-style-id=\"${name}-variables\" ${_props}>${minifyCSS(preset_css)}</style>` : ''; // @todo check\n },\n createTokens(obj: any = {}, defaults: any, parentKey: string = '', parentPath: string = '', tokens: any = {}) {\n /*Object.entries(obj).forEach(([key, value]) => {\n const currentKey = matchRegex(key, defaults.variable.excludedKeyRegex) ? parentKey : parentKey ? `${parentKey}.${toTokenKey(key)}` : toTokenKey(key);\n const currentPath = parentPath ? `${parentPath}.${key}` : key;\n\n if (isObject(value)) {\n this.createTokens(value, defaults, currentKey, currentPath, tokens);\n } else {\n tokens[currentKey] ||= {\n paths: [],\n computed(colorScheme: string, tokenPathMap: any = {}) {\n if (this.paths.length === 1) {\n return this.paths[0]?.computed(this.paths[0].scheme, tokenPathMap['binding']);\n } else if (colorScheme && colorScheme !== 'none') {\n return this.paths.find((p: any) => p.scheme === colorScheme)?.computed(colorScheme, tokenPathMap['binding']);\n }\n\n return this.paths.map((p: any) => p.computed(p.scheme, tokenPathMap[p.scheme]));\n }\n };\n tokens[currentKey].paths.push({\n path: currentPath,\n value,\n scheme: currentPath.includes('colorScheme.light') ? 'light' : currentPath.includes('colorScheme.dark') ? 'dark' : 'none',\n computed(colorScheme: string, tokenPathMap: any = {}) {\n let computedValue: any = value;\n\n tokenPathMap['name'] = this.path;\n tokenPathMap['binding'] ||= {};\n\n if (matchRegex(value as string, EXPR_REGEX)) {\n const val = (value as string).trim();\n const _val = val.replaceAll(EXPR_REGEX, (v) => {\n const path = v.replace(/{|}/g, '');\n const computed = tokens[path]?.computed(colorScheme, tokenPathMap);\n\n return isArray(computed) && computed.length === 2 ? `light-dark(${computed[0].value},${computed[1].value})` : computed?.value;\n });\n\n computedValue = matchRegex(_val.replace(VAR_REGEX, '0'), CALC_REGEX) ? `calc(${_val})` : _val;\n }\n\n isEmpty(tokenPathMap['binding']) && delete tokenPathMap['binding'];\n\n return {\n colorScheme,\n path: this.path,\n paths: tokenPathMap,\n value: computedValue.includes('undefined') ? undefined : computedValue\n };\n }\n });\n }\n });\n\n return tokens;*/\n return {};\n },\n getTokenValue(tokens: any, path: string, defaults: any) {\n const normalizePath = (str: string) => {\n const strArr = str.split('.');\n\n return strArr.filter((s) => !matchRegex(s.toLowerCase(), defaults.variable.excludedKeyRegex)).join('.');\n };\n\n const token = normalizePath(path);\n const colorScheme = path.includes('colorScheme.light') ? 'light' : path.includes('colorScheme.dark') ? 'dark' : undefined;\n const computedValues = [tokens[token as any]?.computed(colorScheme)].flat().filter((computed) => computed);\n\n return computedValues.length === 1\n ? computedValues[0].value\n : computedValues.reduce((acc = {}, computed) => {\n const { colorScheme: cs, ...rest } = computed;\n\n acc[cs] = rest;\n\n return acc;\n }, undefined);\n },\n getSelectorRule(selector1: any, selector2: any, type: string, css: string) {\n return type === 'class' || type === 'attr' ? getRule(isNotEmpty(selector2) ? `${selector1}${selector2},${selector1} ${selector2}` : selector1, css) : getRule(selector1, getRule(selector2 ?? ':root', css));\n },\n transformCSS(name: string, css: string, mode?: string, type?: string, options: any = {}, set?: any, defaults?: any, selector?: string) {\n if (isNotEmpty(css)) {\n const { cssLayer } = options;\n\n if (type !== 'style') {\n const colorSchemeOption = this.getColorSchemeOption(options, defaults);\n\n css =\n mode === 'dark'\n ? colorSchemeOption.reduce((acc, { type, selector: _selector }) => {\n if (isNotEmpty(_selector)) {\n acc += _selector.includes('[CSS]') ? _selector.replace('[CSS]', css) : this.getSelectorRule(_selector, selector, type, css);\n }\n\n return acc;\n }, '')\n : getRule(selector ?? ':root', css);\n }\n\n if (cssLayer) {\n const layerOptions = {\n name: 'primeui',\n order: 'primeui'\n };\n\n isObject(cssLayer) && (layerOptions.name = resolve((cssLayer as any).name, { name, type }));\n\n if (isNotEmpty(layerOptions.name)) {\n css = getRule(`@layer ${layerOptions.name}`, css);\n set?.layerNames(layerOptions.name);\n }\n }\n\n return css;\n }\n\n return '';\n }\n};\n","function normalizeColor(color: string): string {\n if (color.length === 4) {\n return `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}`;\n }\n\n return color;\n}\n\nfunction hexToRgb(hex: string) {\n const bigint = parseInt(hex.substring(1), 16);\n const r = (bigint >> 16) & 255;\n const g = (bigint >> 8) & 255;\n const b = bigint & 255;\n\n return { r, g, b };\n}\n\nfunction rgbToHex(r: number, g: number, b: number) {\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\nexport default (color1: string, color2: string, weight: number): string => {\n color1 = normalizeColor(color1);\n color2 = normalizeColor(color2);\n\n const p = weight / 100;\n const w = p * 2 - 1;\n const w1 = (w + 1) / 2.0;\n const w2 = 1 - w1;\n\n const rgb1 = hexToRgb(color1);\n const rgb2 = hexToRgb(color2);\n\n const r = Math.round(rgb1.r * w1 + rgb2.r * w2);\n const g = Math.round(rgb1.g * w1 + rgb2.g * w2);\n const b = Math.round(rgb1.b * w1 + rgb2.b * w2);\n\n return rgbToHex(r, g, b);\n};\n","import { matchRegex } from '@primeuix/utils';\nimport { EXPR_REGEX } from '../../utils/index';\nimport shade from './shade';\nimport tint from './tint';\n\nconst scales: number[] = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];\n\nexport default (color: string): string | Record<number, string> => {\n if (matchRegex(color, EXPR_REGEX)) {\n const token = color.replace(/{|}/g, '');\n\n return scales.reduce<Record<number, string>>((acc, scale) => ((acc[scale] = `{${token}.${scale}}`), acc), {});\n }\n\n return typeof color === 'string' ? scales.reduce<Record<number, string>>((acc, scale, i) => ((acc[scale] = i <= 5 ? tint(color, (5 - i) * 19) : shade(color, (i - 5) * 15)), acc), {}) : color;\n};\n","import mix from './mix';\n\nexport default (color: string, percent: number) => mix('#000000', color, percent);\n","import mix from './mix';\n\nexport default (color: string, percent: number) => mix('#ffffff', color, percent);\n","import { resolve } from '@primeuix/utils';\nimport { evaluateDtExpressions, type StyleType } from '..';\nimport { dt } from './dt';\n\nexport function css(strings: TemplateStringsArray | StyleType, ...exprs: unknown[]): string | undefined {\n if (strings instanceof Array) {\n const raw = strings.reduce((acc, str, i) => acc + str + (resolve(exprs[i], { dt }) ?? ''), '');\n\n return evaluateDtExpressions(raw, dt);\n }\n\n return resolve(strings as unknown, { dt }) as string | undefined;\n}\n","import { isEmpty, matchRegex } from '@primeuix/utils/object';\nimport Theme from '../config/index';\nimport { EXPR_REGEX, getVariableValue } from '../utils/index';\n\nexport const $dt = (tokenPath: string): { name: string; variable: string; value: any } => {\n const theme = Theme.getTheme();\n\n const variable = dtwt(theme, tokenPath, undefined, 'variable');\n const name = variable?.match(/--[\\w-]+/g)?.[0];\n const value = dtwt(theme, tokenPath, undefined, 'value');\n\n return {\n name,\n variable,\n value\n };\n};\n\nexport const dt = (...args: Parameters<typeof dtwt> extends [unknown, ...infer Rest] ? Rest : never) => {\n return dtwt(Theme.getTheme(), ...args);\n};\n\nexport const dtwt = (theme: any = {}, tokenPath: string, fallback?: string, type?: string) => {\n if (tokenPath) {\n const { variable: VARIABLE, options: OPTIONS } = Theme.defaults || {};\n const { prefix, transform } = theme?.options || OPTIONS || {};\n const token = matchRegex(tokenPath, EXPR_REGEX) ? tokenPath : `{${tokenPath}}`;\n const isStrictTransform = type === 'value' || (isEmpty(type) && transform === 'strict'); // @todo - TRANSFORM: strict | lenient(default)\n\n return isStrictTransform ? Theme.getTokenValue(tokenPath) : getVariableValue(token, undefined, prefix, [VARIABLE.excludedKeyRegex], fallback);\n }\n\n return '';\n};\n","import { mergeKeys } from '@primeuix/utils/object';\nimport Theme from '../config/index';\n\nexport const $t = (theme: any = {}) => {\n let { preset: _preset, options: _options } = theme;\n\n return {\n preset(value: any) {\n _preset = _preset ? mergeKeys(_preset, value) : value;\n\n return this;\n },\n options(value: any) {\n _options = _options ? { ..._options, ...value } : value;\n\n return this;\n },\n // features\n primaryPalette(primary: any) {\n const { semantic } = _preset || {};\n\n _preset = { ..._preset, semantic: { ...semantic, primary } };\n\n return this;\n },\n surfacePalette(surface: any) {\n const { semantic } = _preset || {};\n const lightSurface = surface && Object.hasOwn(surface, 'light') ? surface.light : surface;\n const darkSurface = surface && Object.hasOwn(surface, 'dark') ? surface.dark : surface;\n const newColorScheme = {\n colorScheme: {\n light: { ...semantic?.colorScheme?.light, ...(!!lightSurface && { surface: lightSurface }) },\n dark: { ...semantic?.colorScheme?.dark, ...(!!darkSurface && { surface: darkSurface }) }\n }\n };\n\n _preset = { ..._preset, semantic: { ...semantic, ...newColorScheme } };\n\n return this;\n },\n // actions\n define({ useDefaultPreset = false, useDefaultOptions = false } = {}) {\n return {\n preset: useDefaultPreset ? Theme.getPreset() : _preset,\n options: useDefaultOptions ? Theme.getOptions() : _options\n };\n },\n update({ mergePresets = true, mergeOptions = true } = {}) {\n const newTheme = {\n preset: mergePresets ? mergeKeys(Theme.getPreset(), _preset) : _preset,\n options: mergeOptions ? { ...Theme.getOptions(), ..._options } : _options\n };\n\n Theme.setTheme(newTheme);\n\n return newTheme;\n },\n use(options: any) {\n const newTheme = this.define(options);\n\n Theme.setTheme(newTheme);\n\n return newTheme;\n }\n };\n};\n","import { isObject, matchRegex, toKebabCase } from '@primeuix/utils/object';\nimport Theme from '../config/index';\nimport { getRule, getVariableName, getVariableValue, setProperty, toNormalizeVariable, toValue } from '../utils/index';\n\nexport interface toVariableOptions {\n prefix?: string;\n selector?: string;\n excludedKeyRegex?: RegExp;\n}\n\nexport interface toVariableOutput {\n value: string[];\n tokens: string[];\n declarations: string;\n css: string;\n}\n\nexport default function (theme: any, options: toVariableOptions = {}): toVariableOutput {\n const VARIABLE = Theme.defaults.variable;\n const { prefix = VARIABLE.prefix, selector = VARIABLE.selector, excludedKeyRegex = VARIABLE.excludedKeyRegex } = options;\n\n const tokens: string[] = [];\n const variables: string[] = [];\n\n const stack = [{ node: theme, path: prefix }];\n\n while (stack.length) {\n const { node, path } = stack.pop()!;\n\n for (const key in node) {\n const raw = node[key];\n const val = toValue(raw);\n\n const skipNormalize = matchRegex(key, excludedKeyRegex);\n const variablePath = skipNormalize ? toNormalizeVariable(path) : toNormalizeVariable(path, toKebabCase(key));\n\n if (isObject(val)) {\n stack.push({ node: val, path: variablePath });\n } else {\n const varName = getVariableName(variablePath);\n const varValue = getVariableValue(val, variablePath, prefix, [excludedKeyRegex]);\n\n setProperty(variables, varName, varValue);\n\n let token = variablePath;\n\n if (prefix && token.startsWith(prefix + '-')) {\n token = token.slice(prefix.length + 1);\n }\n\n tokens.push(token.replace(/-/g, '.'));\n }\n }\n }\n\n const declarations = variables.join('');\n\n return {\n value: variables,\n tokens,\n declarations,\n css: getRule(selector, declarations)\n };\n}\n","import ThemeService from '../service/index';\nimport { ThemeUtils } from '../utils/index';\n\nexport default {\n defaults: {\n variable: {\n prefix: 'p',\n selector: ':root',\n excludedKeyRegex: /^(primitive|semantic|components|directives|variables|colorscheme|light|dark|common|root|states|extend|css)$/gi\n },\n options: {\n prefix: 'p',\n darkModeSelector: 'system',\n cssLayer: false\n }\n },\n _theme: undefined,\n _layerNames: new Set(),\n _loadedStyleNames: new Set(),\n _loadingStyles: new Set(),\n _tokens: {},\n update(newValues: any = {}) {\n const { theme } = newValues;\n\n if (theme) {\n this._theme = {\n ...theme,\n options: {\n ...this.defaults.options,\n ...theme.options\n }\n };\n this._tokens = ThemeUtils.createTokens(this.preset, this.defaults);\n this.clearLoadedStyleNames();\n }\n },\n get theme(): any {\n return this._theme;\n },\n get preset() {\n return this.theme?.preset || {};\n },\n get options() {\n return this.theme?.options || {};\n },\n get tokens() {\n return this._tokens;\n },\n getTheme() {\n return this.theme;\n },\n setTheme(newValue: any) {\n this.update({ theme: newValue });\n ThemeService.emit('theme:change', newValue);\n },\n getPreset() {\n return this.preset;\n },\n setPreset(newValue: any) {\n this._theme = { ...this.theme, preset: newValue };\n this._tokens = ThemeUtils.createTokens(newValue, this.defaults);\n\n this.clearLoadedStyleNames();\n ThemeService.emit('preset:change', newValue);\n ThemeService.emit('theme:change', this.theme);\n },\n getOptions() {\n return this.options;\n },\n setOptions(newValue: any) {\n this._theme = { ...this.theme, options: newValue };\n\n this.clearLoadedStyleNames();\n ThemeService.emit('options:change', newValue);\n ThemeService.emit('theme:change', this.theme);\n },\n getLayerNames() {\n return [...this._layerNames];\n },\n setLayerNames(layerName: any) {\n this._layerNames.add(layerName);\n },\n getLoadedStyleNames() {\n return this._loadedStyleNames;\n },\n isStyleNameLoaded(name: string) {\n return this._loadedStyleNames.has(name);\n },\n setLoadedStyleName(name: string) {\n this._loadedStyleNames.add(name);\n },\n deleteLoadedStyleName(name: string) {\n this._loadedStyleNames.delete(name);\n },\n clearLoadedStyleNames() {\n this._loadedStyleNames.clear();\n },\n getTokenValue(tokenPath: string) {\n return ThemeUtils.getTokenValue(this.tokens, tokenPath, this.defaults);\n },\n getCommon(name = '', params: any) {\n return ThemeUtils.getCommon({ name, theme: this.theme, params, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } });\n },\n getComponent(name = '', params: any) {\n const options = { name, theme: this.theme, params, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } };\n\n return ThemeUtils.getPresetC(options);\n },\n // @deprecated - use getComponent instead\n getDirective(name = '', params: any) {\n const options = { name, theme: this.theme, params, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } };\n\n return ThemeUtils.getPresetD(options);\n },\n getCustomPreset(name = '', preset: any, selector: string, params: any) {\n const options = { name, preset, options: this.options, selector, params, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } };\n\n return ThemeUtils.getPreset(options);\n },\n getLayerOrderCSS(name = '') {\n return ThemeUtils.getLayerOrder(name, this.options, { names: this.getLayerNames() }, this.defaults);\n },\n transformCSS(name = '', css: string, type: string = 'style', mode?: string) {\n return ThemeUtils.transformCSS(name, css, mode, type, this.options, { layerNames: this.setLayerNames.bind(this) }, this.defaults);\n },\n getCommonStyleSheet(name = '', params: any, props = {}) {\n return ThemeUtils.getCommonStyleSheet({ name, theme: this.theme, params, props, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } });\n },\n getStyleSheet(name: string, params: any, props = {}) {\n return ThemeUtils.getStyleSheet({ name, theme: this.theme, params, props, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } });\n },\n onStyleMounted(name: string) {\n this._loadingStyles.add(name);\n },\n onStyleUpdated(name: string) {\n this._loadingStyles.add(name);\n },\n onStyleLoaded(event: any, { name }: { name: any }) {\n if (this._loadingStyles.size) {\n this._loadingStyles.delete(name);\n\n ThemeService.emit(`theme:${name}:load`, event); // Exp: ThemeService.emit('theme:panel-style:load', event)\n !this._loadingStyles.size && ThemeService.emit('theme:load');\n }\n }\n};\n","import { $t } from '../helpers/index';\n\nexport default function updatePrimaryPalette<T = unknown, P = unknown>(palette?: T): P {\n return $t().primaryPalette(palette).update().preset as P;\n}\n","import { $t } from '../helpers/index';\n\nexport default function updateSurfacePalette<T = unknown, P = unknown>(palette?: T): P {\n return $t().surfacePalette(palette).update().preset as P;\n}\n","import { deepMerge } from '@primeuix/utils/object';\nimport Theme from '../config/index';\n\nexport default function usePreset<T extends Record<string, unknown>>(...presets: T[]): T {\n const newPreset = deepMerge(...presets);\n\n Theme.setPreset(newPreset);\n\n return newPreset as T;\n}\n","import { $t } from '../helpers/index';\n\nexport default function useTheme<T = unknown>(theme: T): T {\n return $t(theme).update({ mergePresets: false }) as T;\n}\n","import { createStyleMarkup, isNotEmpty } from '@primeuix/utils';\n\nexport interface StyleSheetProps {\n attrs?: Record<string, unknown>;\n}\n\nexport interface StyleMeta<E = HTMLStyleElement> {\n name?: string;\n css?: string;\n attrs?: Record<string, unknown>;\n markup?: string;\n element?: E;\n}\n\nclass StyleSheet<E = HTMLStyleElement> {\n _styles: Map<string, StyleMeta<E>>;\n _attrs: Record<string, unknown>;\n constructor({ attrs }: StyleSheetProps = {}) {\n this._styles = new Map();\n this._attrs = attrs || {};\n }\n get(key: string) {\n return this._styles.get(key);\n }\n has(key: string) {\n return this._styles.has(key);\n }\n delete(key: string) {\n this._styles.delete(key);\n }\n clear() {\n this._styles.clear();\n }\n add(key: string, css?: string) {\n if (isNotEmpty(css)) {\n const meta = {\n name: key,\n css,\n attrs: this._attrs,\n markup: createStyleMarkup(css, this._attrs)\n } satisfies StyleMeta<E>;\n\n this._styles.set(key, {\n ...meta,\n element: this.createStyleElement(meta)\n });\n }\n }\n update() {\n // @todo\n }\n getStyles() {\n return this._styles;\n }\n getAllCSS() {\n return [...this._styles.values()].map((style) => style.css).filter(String);\n }\n getAllMarkup() {\n return [...this._styles.values()].map((style) => style.markup).filter(String);\n }\n getAllElements() {\n return [...this._styles.values()].map((style) => style.element);\n }\n /**\n * Used to create a style element.\n *\n * @param {StyleMeta} meta\n * @returns {HTMLStyleElement | undefined}\n */\n // eslint-disable-next-line\n createStyleElement(meta: StyleMeta = {}): E | undefined {\n return undefined;\n }\n}\n\nexport default StyleSheet;\n"],"mappings":"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