@ui0/theme 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +113 -2
  2. package/dist/backdrop.module.css +1 -0
  3. package/dist/backdrop.scss +7 -0
  4. package/dist/color.inject.module.css +7 -0
  5. package/dist/color.module.css +3 -0
  6. package/dist/color.scss +84 -0
  7. package/dist/components/index.d.ts +4 -0
  8. package/dist/components/index.d.ts.map +1 -0
  9. package/dist/components/index.js +53 -0
  10. package/dist/components/style.css +1 -0
  11. package/dist/components/theme-provider.keys.d.ts +4 -0
  12. package/dist/components/theme-provider.keys.d.ts.map +1 -0
  13. package/dist/components/theme-provider.module.css +1 -0
  14. package/dist/components/theme-provider.types.d.ts +18 -0
  15. package/dist/components/theme-provider.types.d.ts.map +1 -0
  16. package/dist/components/theme-provider.vue.d.ts +19 -0
  17. package/dist/config.default.d.mts +4 -0
  18. package/dist/config.default.d.mts.map +1 -0
  19. package/dist/config.default.mjs +73 -0
  20. package/dist/config.default.mjs.map +1 -0
  21. package/dist/disabled.inject.module.css +5 -0
  22. package/dist/disabled.module.css +1 -0
  23. package/dist/disabled.scss +3 -0
  24. package/dist/display.module.css +2 -0
  25. package/dist/display.scss +63 -0
  26. package/dist/duration.scss +17 -0
  27. package/dist/elevation.module.css +33 -0
  28. package/dist/elevation.scss +46 -0
  29. package/dist/generate-BPYE5ALG.mjs +1037 -0
  30. package/dist/generate-BPYE5ALG.mjs.map +1 -0
  31. package/dist/generator/cli.d.mts +1 -0
  32. package/dist/generator/cli.mjs +103 -0
  33. package/dist/generator/cli.mjs.map +1 -0
  34. package/dist/generator/vite.d.mts +18 -0
  35. package/dist/generator/vite.d.mts.map +1 -0
  36. package/dist/generator/vite.mjs +117 -0
  37. package/dist/generator/vite.mjs.map +1 -0
  38. package/dist/index.d.mts +339 -0
  39. package/dist/index.d.mts.map +1 -0
  40. package/dist/index.mjs +909 -0
  41. package/dist/index.mjs.map +1 -0
  42. package/dist/is.scss +185 -0
  43. package/dist/load-config-64q6nzFy.mjs +48 -0
  44. package/dist/load-config-64q6nzFy.mjs.map +1 -0
  45. package/dist/ripple.scss +57 -0
  46. package/dist/round.inject.module.css +92 -0
  47. package/dist/round.module.css +14 -0
  48. package/dist/round.scss +90 -0
  49. package/dist/size.inject.module.css +50 -0
  50. package/dist/size.module.css +13 -0
  51. package/dist/size.scss +28 -0
  52. package/dist/theme.scss +16 -0
  53. package/dist/typography.inject.module.css +81 -0
  54. package/dist/typography.module.css +32 -0
  55. package/dist/typography.scss +21 -0
  56. package/dist/util.scss +78 -0
  57. package/dist/vars.scss +0 -0
  58. package/package.json +96 -4
  59. package/src/contracts/backdrop/backdrop.contract.ts +44 -0
  60. package/src/contracts/backdrop/backdrop.generator.ts +82 -0
  61. package/src/contracts/backdrop/backdrop.keys.ts +7 -0
  62. package/src/contracts/backdrop/backdrop.module.css +3 -0
  63. package/src/contracts/backdrop/backdrop.scss +7 -0
  64. package/src/contracts/backdrop/backdrop.types.ts +45 -0
  65. package/src/contracts/backdrop/index.ts +21 -0
  66. package/src/contracts/color/color.contract.spec.ts +75 -0
  67. package/src/contracts/color/color.contract.ts +97 -0
  68. package/src/contracts/color/color.generator.spec.ts +73 -0
  69. package/src/contracts/color/color.generator.ts +122 -0
  70. package/src/contracts/color/color.gradient.spec.ts +32 -0
  71. package/src/contracts/color/color.gradient.ts +52 -0
  72. package/src/contracts/color/color.inject.module.css +5 -0
  73. package/src/contracts/color/color.keys.ts +7 -0
  74. package/src/contracts/color/color.module.css +5 -0
  75. package/src/contracts/color/color.scss +84 -0
  76. package/src/contracts/color/color.serialize.spec.ts +57 -0
  77. package/src/contracts/color/color.serialize.ts +35 -0
  78. package/src/contracts/color/color.token.spec.ts +57 -0
  79. package/src/contracts/color/color.token.ts +89 -0
  80. package/src/contracts/color/color.types.ts +82 -0
  81. package/src/contracts/color/index.md +87 -0
  82. package/src/contracts/color/index.ts +25 -0
  83. package/src/contracts/contract.ts +115 -0
  84. package/src/contracts/disabled/disabled.contract.ts +32 -0
  85. package/src/contracts/disabled/disabled.generator.ts +32 -0
  86. package/src/contracts/disabled/disabled.inject.module.css +5 -0
  87. package/src/contracts/disabled/disabled.keys.ts +6 -0
  88. package/src/contracts/disabled/disabled.module.css +3 -0
  89. package/src/contracts/disabled/disabled.scss +3 -0
  90. package/src/contracts/disabled/disabled.types.ts +19 -0
  91. package/src/contracts/disabled/index.ts +21 -0
  92. package/src/contracts/display/display.contract.ts +41 -0
  93. package/src/contracts/display/display.generator.ts +57 -0
  94. package/src/contracts/display/display.instance.ts +173 -0
  95. package/src/contracts/display/display.keys.ts +9 -0
  96. package/src/contracts/display/display.module.css +4 -0
  97. package/src/contracts/display/display.scss +63 -0
  98. package/src/contracts/display/display.types.ts +75 -0
  99. package/src/contracts/display/index.ts +27 -0
  100. package/src/contracts/elevation/elevation.contract.ts +37 -0
  101. package/src/contracts/elevation/elevation.generator.ts +71 -0
  102. package/src/contracts/elevation/elevation.keys.ts +6 -0
  103. package/src/contracts/elevation/elevation.module.css +35 -0
  104. package/src/contracts/elevation/elevation.scss +46 -0
  105. package/src/contracts/elevation/elevation.types.ts +21 -0
  106. package/src/contracts/elevation/index.ts +20 -0
  107. package/src/contracts/generator.ts +38 -0
  108. package/src/contracts/index.md +48 -0
  109. package/src/contracts/index.ts +37 -0
  110. package/src/contracts/round/index.ts +21 -0
  111. package/src/contracts/round/round.contract.ts +75 -0
  112. package/src/contracts/round/round.generator.ts +33 -0
  113. package/src/contracts/round/round.inject.module.scss +36 -0
  114. package/src/contracts/round/round.keys.ts +7 -0
  115. package/src/contracts/round/round.module.css +16 -0
  116. package/src/contracts/round/round.scss +90 -0
  117. package/src/contracts/round/round.types.ts +44 -0
  118. package/src/contracts/size/index.ts +22 -0
  119. package/src/contracts/size/size.contract.ts +98 -0
  120. package/src/contracts/size/size.generator.spec.ts +101 -0
  121. package/src/contracts/size/size.generator.ts +51 -0
  122. package/src/contracts/size/size.inject.module.scss +12 -0
  123. package/src/contracts/size/size.keys.ts +8 -0
  124. package/src/contracts/size/size.module.css +15 -0
  125. package/src/contracts/size/size.scss +28 -0
  126. package/src/contracts/size/size.types.ts +63 -0
  127. package/src/contracts/size/units.scss +17 -0
  128. package/src/contracts/style/index.ts +11 -0
  129. package/src/contracts/style/style.generator.ts +36 -0
  130. package/src/contracts/style/style.key.ts +4 -0
  131. package/src/contracts/style/style.types.ts +16 -0
  132. package/src/contracts/typography/index.ts +26 -0
  133. package/src/contracts/typography/typography.contract.ts +52 -0
  134. package/src/contracts/typography/typography.generator.spec.ts +48 -0
  135. package/src/contracts/typography/typography.generator.ts +44 -0
  136. package/src/contracts/typography/typography.inject.module.css +54 -0
  137. package/src/contracts/typography/typography.keys.ts +12 -0
  138. package/src/contracts/typography/typography.module.css +36 -0
  139. package/src/contracts/typography/typography.scss +21 -0
  140. package/src/contracts/typography/typography.types.ts +90 -0
  141. package/src/generator/theme.default.css +657 -0
  142. package/src/styles/duration.scss +17 -0
  143. package/src/styles/index.md +18 -0
  144. package/src/styles/is.scss +185 -0
  145. package/src/styles/ripple.scss +57 -0
  146. package/src/styles/theme.scss +16 -0
  147. package/src/styles/util.scss +78 -0
  148. package/src/styles/vars.scss +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["$backdrop","$color","$disabled","$display","$elevation","$round","$size","$typography","cfg","config"],"sources":["../src/constants.ts","../src/contracts/backdrop/backdrop.contract.ts","../src/contracts/backdrop/backdrop.keys.ts","../src/contracts/backdrop/index.ts","../src/contracts/color/color.gradient.ts","../src/contracts/color/color.serialize.ts","../src/contracts/color/color.contract.ts","../src/contracts/color/color.keys.ts","../src/contracts/color/index.ts","../src/contracts/disabled/disabled.contract.ts","../src/contracts/disabled/disabled.keys.ts","../src/contracts/disabled/index.ts","../src/contracts/display/display.contract.ts","../src/contracts/display/display.keys.ts","../src/contracts/display/index.ts","../src/contracts/elevation/elevation.contract.ts","../src/contracts/elevation/elevation.keys.ts","../src/contracts/elevation/index.ts","../src/contracts/round/round.contract.ts","../src/contracts/round/round.keys.ts","../src/contracts/round/index.ts","../src/contracts/size/size.types.ts","../src/contracts/size/size.contract.ts","../src/contracts/size/size.keys.ts","../src/contracts/size/index.ts","../src/contracts/style/style.key.ts","../src/contracts/style/index.ts","../src/contracts/typography/typography.contract.ts","../src/contracts/typography/typography.keys.ts","../src/contracts/typography/index.ts","../src/contracts/index.ts","../src/contracts/display/display.instance.ts","../src/persist.ts","../src/instance.ts","../src/keys.ts","../src/plugin.ts","../src/useTheme.ts","../src/useDisplay.ts","../src/contracts/contract.ts","../src/useThemeContext.ts"],"sourcesContent":["export const CONTRACT_GENERATOR = 0\nexport const THEME_SCHEMES = ['dark', 'light', 'default']\n// from @vue/shared\n\nexport const EMPTY_OBJ: { readonly [key: string]: any } = __DEV__\n ? Object.freeze({})\n : {}\nexport enum ThemeContractFlags {\n /**\n * can generate css\n * @type {ContractFlags.generator}\n */\n\n generator = 1 << 0,\n /**\n * can resolve classes\n * @type {ContractFlags.dealer}\n */\n dealer = 1 << 1\n}\n","import { AT_SIGN } from '@ui0/shared'\n// The backdrop contract's processing endpoint: the backdrop prop selects a\n// backdrop-filter function; the deal resolves the prop value to the hashed\n// setter class from the module map (merged with the component's own $style).\nimport type { ClassList, CSSModuleClassList, StyleList } from '@ui0/types'\nimport type { ContractProvider, ThemeContractDeal } from '@ui0/types'\nimport { isArray, isString, mergeCssModulesStyles } from '@ui0/util'\n\nimport type { BackdropProps } from './backdrop.types'\n\nimport $backdrop from './backdrop.module.css'\n\nfunction backdropClasses(p: BackdropProps, s?: CSSModuleClassList): ClassList {\n const $ = mergeCssModulesStyles($backdrop, s)\n console.log('$', $)\n\n if (p.backdrop) return [$['backdrop']]\n return []\n}\n\nexport function backdropDeal(instance: ContractProvider): ThemeContractDeal {\n const props = instance.props\n\n return {\n classes: () => instance.inject(backdropClasses(props, instance.$styles)),\n styles() {\n const out: StyleList = {}\n const val = props.backdrop\n if (val) {\n if (isArray(val)) {\n } else if (isString(val)) {\n const split = val.split(AT_SIGN)\n if (split[1]) {\n out['--0-backdrop-' + split[0]] = split[1]\n out['--0-backdrop'] = `${split[0]}(var(--0-backdrop-${split[0]}))`\n } else {\n out['--0-backdrop'] = `${props.backdrop}(var(--0-backdrop-${props.backdrop}))`\n }\n }\n }\n return instance.inject(out)\n }\n }\n}\n","import type { ThemeContractDeal } from '@ui0/types'\nimport type { InjectionKey, Ref } from 'vue'\n\nimport type { BackdropProps } from './backdrop.types'\n\nexport const BackdropRefKey = Symbol('BackdropRefKey') as InjectionKey<Ref<BackdropProps['backdrop']>>\nexport const BackdropContractKey = Symbol('BackdropContractKey') as InjectionKey<ThemeContractDeal>\n","import type { ThemeContract } from '@ui0/types'\n\nimport { ThemeContractFlags } from '../../constants'\nimport { backdropDeal } from './backdrop.contract'\nimport { BackdropContractKey, BackdropRefKey } from './backdrop.keys'\nimport type { BackdropProps } from './backdrop.types'\n\nexport { default as $style } from './backdrop.module.css'\nexport type * from './backdrop.types'\nexport * from './backdrop.keys'\n\nexport const BackdropPropsKeys: ReadonlyArray<keyof BackdropProps> = ['backdrop']\n\nexport const backdrop: ThemeContract = {\n name: 'backdrop',\n key: BackdropContractKey,\n ref: BackdropRefKey,\n deal: backdropDeal,\n flag: ThemeContractFlags.dealer + ThemeContractFlags.generator,\n props: BackdropPropsKeys\n}\n","// the `gradient` prop -> the `--0-g-cur` value (a linear-gradient()\n// composed of live var() references to pool channels). Delivered as an\n// element inline style, NOT a class: a gradient is a composition of values,\n// and class-per-combination would explode combinatorially. The references\n// stay live - a scheme block revalues the underlying --0-c-* channels and\n// the gradient re-paints without any gradient-specific rule.\n//\n// gradient=\"error->success\"\n// gradient=\"to-br error->success@80->highlight\"\nimport { isString } from '@ui0/util'\n\nimport { parseRef } from './color.token'\n\nconst DIRECTIONS: Record<string, string> = {\n right: 'to right',\n left: 'to left',\n top: 'to top',\n bottom: 'to bottom',\n tr: 'to top right',\n tl: 'to top left',\n br: 'to bottom right',\n bl: 'to bottom left'\n}\n\n/** compile a gradient prop value into a `linear-gradient(...)` string */\nexport function gradientStyle(value: string | undefined | null): string | undefined {\n if (!isString(value) || !value.trim()) return undefined\n const parts = value.trim().split(/\\s+/)\n\n let direction = DIRECTIONS.bottom\n if (parts[0]?.startsWith('to-')) {\n const css = DIRECTIONS[parts[0].slice(3)]\n if (!css)\n throw new Error(\n `ui0 gradient: unknown direction \"${parts[0]}\" (expected to-right|to-left|to-top|to-bottom|to-tr|to-tl|to-br|to-bl)`\n )\n direction = css\n parts.shift()\n }\n\n // rejoin so spaced arrows (`error -> success`) compile too\n const stops = parts\n .join('')\n .split('->')\n .map((s) => parseRef(s))\n .filter((s) => s.ref)\n\n if (stops.length < 2) throw new Error(`ui0 gradient: \"${value}\" needs at least two stops (ref[->ref...])`)\n\n const paint = stops.map((s) => `rgb(var(--0-c-${s.ref}-v) / ${s.opacity ?? 1})`).join(', ')\n return `linear-gradient(${direction}, ${paint})`\n}\n","// tokens -> paint. A token's color selection always compiles to a hashed\n// swatch setter class (`[scheme-][pseudo-]{c|f}-<ref>`) - selections are\n// conditional by nature. Opacity VALUES always ride element inline styles as\n// context source vars (`--0-{slot}-src[-{l|d}][-{pseudo}]`); the conditional\n// pick happens in the component's color.use() scss bridges, so the generated\n// theme css carries no opacity rules at all.\nimport type { ClassList, CSSModuleClassList, StyleList } from '@ui0/types'\n\nimport { hashClassName } from '../../generator/hash'\nimport type { ColorToken } from './color.types'\n\nexport function resolveClass(full: string, $?: CSSModuleClassList): string {\n return ($ && $[full]) || hashClassName(full)\n}\n\nexport function serializeTokens(\n tokens: ColorToken[],\n slot: 'c' | 'f',\n $?: CSSModuleClassList\n): { classes: ClassList; styles: StyleList } {\n const classes: ClassList = []\n const styles: StyleList = {}\n const ns = slot === 'c' ? '--0-c' : '--0-f'\n\n for (const t of tokens) {\n const pre = `${t.scheme ? t.scheme + '-' : ''}${t.pseudo ? t.pseudo + '-' : ''}${slot}`\n classes.push(resolveClass(`${pre}-${t.ref}`, $))\n\n if (t.opacity !== undefined && t.opacity < 1) {\n const ctx = `${t.scheme === 'light' ? '-l' : t.scheme === 'dark' ? '-d' : ''}${t.pseudo ? `-${t.pseudo}` : ''}`\n styles[`${ns}-src${ctx}`] = `${t.opacity}`\n }\n }\n return { classes, styles }\n}\n","// The color contract's processing endpoint (v2): resolves the color/fill\n// props onto hashed setter classes (via the token parser + serializer) and\n// the gradient prop onto the `--0-g-cur` inline style. One parse pass per\n// prop change, shared by classes() and styles().\nimport type { ClassList, StyleList } from '@ui0/types'\nimport type { ContractProvider, ThemeContractDeal } from '@ui0/types'\nimport { isString, mergeCssModulesStyles } from '@ui0/util'\n\nimport { gradientStyle } from './color.gradient'\nimport { serializeTokens } from './color.serialize'\nimport { parseColorProp } from './color.token'\nimport type { ColorProps, FillProps, GradientProps } from './color.types'\n\nimport $color from './color.module.css'\n\ntype Painted = ColorProps & FillProps & GradientProps\n\nexport function colorDeal(instance: ContractProvider): ThemeContractDeal {\n const props = instance.props\n\n // one parse pass per prop change, shared by classes() and styles() -\n // either may be called first; the key also carries the inherited context\n // values so an `inherit` prop follows a context change\n let cache: { key: string; value: { classes: ClassList; styles: StyleList } } | undefined\n\n const norm = (v: unknown) => (isString(v) ? v : Array.isArray(v) ? v.join(' ') : '')\n\n const ensure = () => {\n const key = [\n norm(props.color),\n norm(props.fill),\n norm(props.gradient),\n norm(instance.context?.color?.value),\n norm(instance.context?.fill?.value)\n ].join('|')\n if (cache && cache.key === key) return cache.value\n const value = paint(resolveProps())\n cache = { key, value }\n return value\n }\n\n // the `inherit` passthrough: an `inherit` prop re-reads the provided\n // context ref (a parent's prop), everything else resolves its own value\n const resolveProps = (): Painted => {\n const out: Record<string, any> = {}\n const color = props.color\n const fill = props.fill\n\n if (isString(color) && color.split(' ')[0] === 'inherit') {\n const v = instance.context?.color?.value\n if (v) out['color'] = v\n } else if (color) {\n out['color'] = color\n }\n if (isString(fill) && fill.split(' ')[0] === 'inherit') {\n const v = instance.context?.fill?.value\n if (v) out['fill'] = v\n } else if (fill) {\n out['fill'] = fill\n }\n if (props.gradient) out['gradient'] = props.gradient\n return out as Painted\n }\n\n const paint = (p: Painted): { classes: ClassList; styles: StyleList } => {\n const classes: ClassList = []\n const styles: StyleList = {}\n const $ = mergeCssModulesStyles($color, instance.$styles)\n\n if (p.color) {\n const out = serializeTokens(parseColorProp(p.color), 'c', $)\n classes.push(...out.classes)\n Object.assign(styles, out.styles)\n classes.push($.colored)\n }\n if (p.fill) {\n const out = serializeTokens(parseColorProp(p.fill), 'f', $)\n classes.push(...out.classes)\n Object.assign(styles, out.styles)\n classes.push($.filled)\n }\n if (p.gradient) {\n const g = gradientStyle(p.gradient)\n if (g) {\n styles['--0-g-cur'] = g\n classes.push($.gradiented)\n }\n }\n return { classes, styles }\n }\n\n return {\n classes: () =>\n props.color || props.fill || props.gradient ? instance.inject(ensure().classes) : instance.inject([]),\n styles: () => instance.inject(ensure().styles)\n }\n}\n","import type { ComponentColor } from '@ui0/types'\nimport type { ThemeContractDeal } from '@ui0/types'\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const ColorContractKey = Symbol('ColorContractKey') as InjectionKey<ThemeContractDeal>\nexport const ColorRefKey = Symbol('ColorRefKey') as InjectionKey<Ref<ComponentColor>>\nexport const FillRefKey = Symbol('FillRefKey') as InjectionKey<Ref<ComponentColor>>\n","import type { ThemeContract } from '@ui0/types'\n\nimport { ThemeContractFlags } from '../../constants'\nimport { colorDeal } from './color.contract'\nimport { ColorContractKey, ColorRefKey } from './color.keys'\nimport type { ColorProps, GradientProps, FillProps } from './color.types'\n\nexport { default as $style } from './color.module.css'\nexport type * from './color.types'\nexport * from './color.keys'\n\nexport const ColorPropsKeys: ReadonlyArray<keyof (GradientProps & ColorProps & FillProps)> = [\n 'color',\n 'fill',\n 'gradient'\n]\n\nexport const color: ThemeContract = {\n name: 'color',\n key: ColorContractKey,\n flag: ThemeContractFlags.dealer + ThemeContractFlags.generator,\n ref: ColorRefKey,\n deal: colorDeal,\n props: ColorPropsKeys\n}\n","// The disabled contract's processing endpoint: the `disabled` prop maps to\n// the hashed `.disabled` setter class; `inherit` reads the provided ref.\nimport type { ClassList, CSSModuleClassList } from '@ui0/types'\nimport type { ContractProvider, ThemeContractDeal } from '@ui0/types'\nimport { mergeCssModulesStyles } from '@ui0/util'\n\nimport { EMPTY_OBJ } from '../../constants'\nimport type { DisabledProps } from './disabled.types'\n\nimport $disabled from './disabled.module.css'\n\nfunction disabledClasses(p: DisabledProps, s?: CSSModuleClassList): ClassList {\n const $ = mergeCssModulesStyles($disabled, s)\n if (p.disabled) return [$.disabled]\n return []\n}\n\nexport function disabledDeal(instance: ContractProvider): ThemeContractDeal {\n const props = instance.props\n\n return {\n classes: () => {\n if (instance.context) {\n if (props.disabled === 'inherit' && instance.context.disabled) {\n return instance.inject(disabledClasses({ disabled: instance.context.disabled.value }, instance.$styles))\n }\n }\n return instance.inject(disabledClasses(props, instance.$styles))\n },\n styles: () => instance.inject(EMPTY_OBJ)\n }\n}\n","import type { ThemeContractDeal } from '@ui0/types'\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const DisabledRefKey = Symbol('DisabledRefKey') as InjectionKey<Ref<boolean>>\n\nexport const DisabledContractKey = Symbol('DisabledContractKey') as InjectionKey<ThemeContractDeal>\n","import type { ThemeContract } from '@ui0/types'\n\nimport { ThemeContractFlags } from '../../constants'\nimport { disabledDeal } from './disabled.contract'\nimport { DisabledContractKey, DisabledRefKey } from './disabled.keys'\nimport type { DisabledProps } from './disabled.types'\n\nexport { default as $style } from './disabled.module.css'\nexport type * from './disabled.types'\nexport * from './disabled.keys'\n\nexport const DisabledPropsKeys: ReadonlyArray<keyof DisabledProps> = ['disabled']\n\nexport const disabled: ThemeContract = {\n key: DisabledContractKey,\n name: 'disabled',\n ref: DisabledRefKey,\n flag: ThemeContractFlags.dealer + ThemeContractFlags.generator,\n deal: disabledDeal,\n props: DisabledPropsKeys\n}\n","// The display contract's processing endpoint: closes over the provider and\n// returns the deal that maps the `display` prop onto classes/styles at\n// runtime, resolving `inherit` against the provided context ref.\nimport type { ClassList, CSSModuleClassList } from '@ui0/types'\nimport type { ContractProvider, ThemeContractDeal } from '@ui0/types'\nimport { mergeCssModulesStyles } from '@ui0/util'\nimport type { Ref } from 'vue'\n\nimport { EMPTY_OBJ } from '../../constants'\nimport type { DisplayProps } from './display.types'\n\nimport $display from './display.module.css'\n\n// the prop -> class wiring: resolves the prop value to the hashed class from\n// the module map (merged with the component's own $style)\nfunction displayClasses(props: DisplayProps, styles?: CSSModuleClassList): ClassList {\n const $ = mergeCssModulesStyles($display, styles)\n const out: ClassList = []\n if (props.display && $.displayed) out.push($.displayed)\n return out\n}\n\nexport function displayDeal(instance: ContractProvider): ThemeContractDeal {\n const props = instance.props\n\n return {\n classes: () => {\n if (!props.display) return instance.inject([])\n\n if (props.display === 'inherit') {\n const ctx = instance.context as Record<string, Ref<any> | undefined> | null\n if (ctx?.display) {\n return instance.inject(displayClasses({ display: ctx.display.value }, instance.$styles))\n }\n }\n\n return instance.inject(displayClasses(props as DisplayProps, instance.$styles))\n },\n styles: () => instance.inject(EMPTY_OBJ)\n }\n}\n","import type { ThemeContract } from '@ui0/types'\nimport type { InjectionKey, Ref } from 'vue'\n\nimport type { DisplayImpl, DisplayProp, DisplayReturn } from './display.types'\n\n/** context key the deal resolves `inherit` against (see useThemeContract) */\nexport const DisplayRefKey = Symbol('DisplayRefKey') as InjectionKey<Ref<DisplayProp | undefined>>\nexport const DisplayContractKey = Symbol('DisplayContractKey') as InjectionKey<ThemeContract>\nexport const DisplayKey = Symbol('DisplayContractKey') as InjectionKey<DisplayImpl>\n","import type { ThemeContract } from '@ui0/types'\n\n// The display contract's registry entry, generated from\n// packages/templates/contract. Wiring left (see the generator output):\n// 1. add `display` to src/contracts/index.ts (next to round/size/...)\n// 2. add displayGenerator to src/generator.ts (contractGenerators)\nimport { ThemeContractFlags } from '../../constants'\nimport { displayDeal } from './display.contract'\nimport { DisplayContractKey, DisplayRefKey } from './display.keys'\nimport type { DisplayProps } from './display.types'\n\nexport { default as $style } from './display.module.css'\nexport type * from './display.types'\nexport * from './display.keys'\n\nexport const DisplayPropsKeys: ReadonlyArray<keyof DisplayProps> = [\n // 'display'\n]\n\nexport const display: ThemeContract = {\n key: DisplayContractKey,\n name: 'display',\n ref: DisplayRefKey,\n deal: displayDeal,\n flag: ThemeContractFlags.generator,\n props: DisplayPropsKeys\n}\n","// The elevation contract's processing endpoint: the `elevation` prop picks a\n// step of the shadow scale; the deal resolves it to the hashed step class\n// (`elv1..steps`, `n` suffix for inset), `inherit` reading the provided ref.\nimport type { ClassList, CSSModuleClassList } from '@ui0/types'\nimport type { ContractProvider, ThemeContractDeal } from '@ui0/types'\nimport { mergeCssModulesStyles } from '@ui0/util'\n\nimport { EMPTY_OBJ } from '../../constants'\nimport type { ElevationProps } from './elevation.types'\n\nimport $elevation from './elevation.module.css'\n\nfunction elevationClasses(p: ElevationProps, s?: CSSModuleClassList): ClassList {\n const { elevation } = p\n if (elevation === undefined) return []\n const $ = mergeCssModulesStyles($elevation, s)\n\n const value = Number(elevation)\n\n return Number.isNaN(value) ? [] : [$['elv' + Math.abs(value) + (value < 0 ? 'n' : '')], $.elv]\n}\n\nexport function elevationDeal(instance: ContractProvider): ThemeContractDeal {\n const props = instance.props\n\n return {\n classes: () => {\n if (instance.context) {\n if (props.elevation === 'inherit' && instance.context.elevation) {\n return instance.inject(elevationClasses({ elevation: instance.context.elevation.value }, instance.$styles))\n }\n }\n return instance.inject(elevationClasses(props, instance.$styles))\n },\n styles: () => instance.inject(EMPTY_OBJ)\n }\n}\n","import type { ComponentElevation } from '@ui0/types'\nimport type { ThemeContractDeal } from '@ui0/types'\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const ElevationRefKey = Symbol('ElevationRefKey') as InjectionKey<Ref<ComponentElevation>>\nexport const ElevationContractKey = Symbol('ElevationContractKey') as InjectionKey<ThemeContractDeal>\n","import type { ThemeContract } from '@ui0/types'\n\nimport { ThemeContractFlags } from '../../constants'\nimport { elevationDeal } from './elevation.contract'\nimport { ElevationContractKey, ElevationRefKey } from './elevation.keys'\nimport type { ElevationProps } from './elevation.types'\n\nexport { default as $style } from './elevation.module.css'\nexport type * from './elevation.types'\nexport * from './elevation.keys'\nexport const ElevationPropsKeys: ReadonlyArray<keyof ElevationProps> = ['elevation']\n\nexport const elevation: ThemeContract = {\n key: ElevationContractKey,\n name: 'elevation',\n ref: ElevationRefKey,\n deal: elevationDeal,\n flag: ThemeContractFlags.dealer + ThemeContractFlags.generator,\n props: ElevationPropsKeys\n}\n","// The round contract's processing endpoint. The runtime wiring is minimal\n// for now: radius values are computed in the component namespace\n// (round.scss) and no round settings land on the theme block yet - the deal\n// returns no classes until a rounding setting arrives in the config.\nimport type { CSSModuleClassList, Indexed } from '@ui0/types'\nimport type { ContractProvider, ThemeContractDeal } from '@ui0/types'\nimport { mergeCssModulesStyles, propsToCssModuleClassNext } from '@ui0/util'\n\nimport { EMPTY_OBJ } from '../../constants'\nimport type { RoundProps } from './round.types'\n\nimport $round from './round.module.css'\nexport type PropClassImpl<T = Record<string, unknown>> = keyof T | [keyof T, Indexed]\n\nexport function roundDeal(instance: ContractProvider): ThemeContractDeal {\n return {\n classes() {\n const { props, $styles } = instance\n const $ = mergeCssModulesStyles($round, $styles)\n console.log('props', instance.props)\n\n console.log(\n 'propsToCssModuleClassNext(props, [getRoundPropClasses($), getRoundTargetPropClasses($)], $)',\n propsToCssModuleClassNext(props, [getRoundPropClasses($), getRoundTargetPropClasses($)], $)\n )\n\n return propsToCssModuleClassNext(props, [getRoundPropClasses($), getRoundTargetPropClasses($)], $)\n },\n styles: () => instance.inject(EMPTY_OBJ)\n }\n}\n\nfunction getRoundTargetPropClasses(style: CSSModuleClassList = $round): PropClassImpl<RoundProps> {\n return [\n 'roundTarget',\n {\n 'top-left-none': style.tln,\n 'bottom-left-none': style.bln,\n 'top-right-none': style.trn,\n 'bottom-right-none': style.brn,\n\n 'top-none': style.tn,\n 'bottom-none': style.bn,\n 'right-none': style.rn,\n 'left-none': style.ln,\n\n 'bottom-left': style.bl,\n 'bottom-right': style.br,\n 'top-right': style.tr,\n 'top-left': style.tl\n }\n ]\n}\nfunction getRoundPropClasses(style: CSSModuleClassList = $round): PropClassImpl<RoundProps> {\n return [\n 'round',\n {\n true: style.rFull,\n none: style.rNone,\n full: style.rFull,\n\n basic: style.rBasic,\n smooth: style.rSmooth,\n hard: style.rHard,\n\n round: style.round,\n\n left: [style.tl, style.bl],\n\n right: [style.tr, style.br],\n bottom: [style.br, style.bl],\n top: [style.tl, style.tr]\n }\n ]\n}\n","import type { ComponentRound, ComponentRoundTarget } from '@ui0/types'\nimport type { ThemeContractDeal } from '@ui0/types'\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const RoundRefKey = Symbol('RoundRefKey') as InjectionKey<Ref<ComponentRound>>\nexport const RoundTargetRefKey = Symbol('RoundTargetRefKey') as InjectionKey<Ref<ComponentRoundTarget>>\nexport const RoundContractKey = Symbol('RoundContractKey') as InjectionKey<ThemeContractDeal>\n","import type { ThemeContract } from '@ui0/types'\n\nimport { ThemeContractFlags } from '../../constants'\nimport { roundDeal } from './round.contract'\nimport { RoundContractKey, RoundRefKey } from './round.keys'\nimport type { RoundProps } from './round.types'\n\nexport { default as $style } from './round.module.css'\nexport type * from './round.types'\nexport * from './round.keys'\n\nexport const RoundPropsKeys: ReadonlyArray<keyof RoundProps> = ['round', 'round-target']\n\nexport const round: ThemeContract = {\n key: RoundContractKey,\n name: 'round',\n ref: RoundRefKey,\n deal: roundDeal,\n flag: ThemeContractFlags.dealer + ThemeContractFlags.generator,\n props: RoundPropsKeys\n}\n","import type { MaybeUnits, InheritValue, LiteralUnion } from '@ui0/types'\n\n/* -------------------------------------------------------------------------- */\n/* Size */\n/* -------------------------------------------------------------------------- */\n\nexport type SizeXXXS = 'xxx-small' | 'xxxs'\nexport type SizeXXS = 'xx-small' | 'xxs'\nexport type SizeXS = 'x-small' | 'xs'\nexport type SizeS = 'small' | 's'\nexport type SizeM = 'medium' | 'm'\nexport type SizeL = 'large' | 'l'\nexport type SizeXL = 'x-large' | 'xl'\nexport type SizeXXL = 'xx-large' | 'xxl'\nexport type SizeXXXL = 'xxx-large' | 'xxxl'\n\nexport type Size =\n | SizeXXXS\n | SizeXXS\n | SizeXS\n | SizeS\n | SizeM\n | SizeL\n | SizeXL\n | SizeXXL\n | SizeXXXL\n | 'custom'\n | 'smaller'\n | 'larger'\n | InheritValue\n\nexport type SizeDensity = LiteralUnion<'normal' | 'compact' | 'child'>\n\nexport interface SizeProps {\n size?: Size\n}\n\nexport interface DensityProps {\n density?: SizeDensity\n}\n\n/** the size contract's settings inside a theme preset (appearance config) */\nexport interface SizeThemeAppearanceConfig {\n /** the control's base height -> expands into the --0-s-* scale */\n control?: MaybeUnits\n /** a control's child (icon etc.) base height -> the --0-sc-* scale */\n child?: MaybeUnits\n}\n\n/** the absolute scale steps a `size` prop can pick (long and short spellings) */\nexport const SizeValuesAbsolute: Size[] = ['xxxs', 'xxs', 'xs', 's', 'm', 'l', 'xl', 'xxl', 'xxxl']\n\n// registration: the contract announces itself to the package registries\n// (interface merging - no central import of the contracts anywhere)\ndeclare module '@ui0/types/theme' {\n interface Ui0ThemePresetAppearanceConfig {\n size?: SizeThemeAppearanceConfig\n }\n interface Ui0ThemeContractSettings {\n size?: boolean\n }\n interface Ui0ThemeContracts extends SizeProps, DensityProps {}\n}\n","// The size contract's processing endpoint: closes over the provider and\n// returns the deal that maps the `size`/`density` props onto classes,\n// resolving `inherit`/`smaller`/`larger` against the provided context refs.\nimport type { ClassList, CSSModuleClassList } from '@ui0/types'\nimport type { ContractProvider, ThemeContractDeal } from '@ui0/types'\nimport { arrayPickNext, arrayPickPrev, isArray, mergeCssModulesStyles, toCamelCase } from '@ui0/util'\n\nimport { EMPTY_OBJ } from '../../constants'\nimport type { DensityProps, Size, SizeProps } from './size.types'\nimport { SizeValuesAbsolute } from './size.types'\n\nimport $size from './size.module.css'\n\ntype Sizers = SizeProps & DensityProps\n\nfunction sizeClasses(props: Sizers, styles?: CSSModuleClassList): ClassList {\n const out: ClassList = []\n const { size, density } = props\n const normalizedSizing = (isArray(density) ? density : [toCamelCase(density)]) as string[]\n\n const $ = mergeCssModulesStyles($size, styles)\n if (size) {\n out.push($.sized)\n const cls = getSizePropClasses($)[size]\n if (cls) out.push(cls)\n }\n\n if (normalizedSizing) {\n normalizedSizing.forEach((d) => {\n if ($ && $[d]) out.push($[d])\n })\n }\n return out\n}\n\nfunction getSizePropClasses(styles: CSSModuleClassList): Record<Size | 'inherit', string> {\n return {\n 'xxx-large': styles.sizeXxxl,\n 'xx-large': styles.sizeXxl,\n 'x-large': styles.sizeXl,\n large: styles.sizeL,\n 'x-small': styles.sizeXs,\n 'xx-small': styles.sizeXxs,\n 'xxx-small': styles.sizeXxxs,\n small: styles.sizeS,\n medium: styles.sizeM,\n\n xxxl: styles.sizeXxxl,\n xxl: styles.sizeXxl,\n xl: styles.sizeXl,\n l: styles.sizeL,\n xs: styles.sizeXs,\n xxs: styles.sizeXxs,\n xxxs: styles.sizeXxxs,\n s: styles.sizeS,\n m: styles.sizeM,\n\n larger: '',\n inherit: '',\n smaller: '',\n custom: styles.sizeCustom\n }\n}\n\nexport function sizeDeal(instance: ContractProvider): ThemeContractDeal {\n const props = instance.props\n\n return {\n classes: () => {\n const { size, density } = props\n if (!size && !density) return instance.inject([])\n\n if (instance.context) {\n const out: Record<string, any> = {}\n const ctxSize = instance.context.size\n\n if (ctxSize) {\n if (size === 'inherit') out['size'] = ctxSize.value\n if (size === 'smaller' || size === 'larger') {\n out['size'] = (size === 'smaller' ? arrayPickPrev : arrayPickNext)(SizeValuesAbsolute, ctxSize.value)\n }\n }\n const ctxDensity = instance.context.density\n if (ctxDensity && density === 'inherit') {\n out['density'] = ctxDensity.value\n }\n\n if (!('density' in out) && props.density) out['density'] = props.density\n if (!('size' in out) && props.size) out['size'] = props.size\n\n return instance.inject(sizeClasses(out, instance.$styles))\n }\n\n return instance.inject(sizeClasses(props, instance.$styles))\n },\n styles: () => instance.inject(EMPTY_OBJ)\n }\n}\n","import type { ThemeContractDeal } from '@ui0/types'\nimport type { InjectionKey, Ref } from 'vue'\n\nimport type { Size, SizeDensity } from './size.types'\n\nexport const SizeRefKey = Symbol('SizeRefKey') as InjectionKey<Ref<Size>>\nexport const SizeDensityRefKey = Symbol('DensityRefKey') as InjectionKey<Ref<SizeDensity>>\nexport const SizeContractKey = Symbol('SizeContractKey') as InjectionKey<ThemeContractDeal>\n","import type { ThemeContract } from '@ui0/types'\n\nimport { ThemeContractFlags } from '../../constants'\nimport { sizeDeal } from './size.contract'\nimport { SizeContractKey, SizeRefKey } from './size.keys'\nimport type { DensityProps, SizeProps } from './size.types'\n\nexport { default as $style } from './size.module.css'\nexport type * from './size.types'\nexport * from './size.keys'\nexport { default as sizeGenerator } from './size.generator'\n\nexport const SizePropsKeys: ReadonlyArray<keyof (SizeProps & DensityProps)> = ['size', 'density']\n\nexport const size: ThemeContract = {\n ref: SizeRefKey,\n name: 'size',\n props: SizePropsKeys,\n deal: sizeDeal,\n flag: ThemeContractFlags.dealer + ThemeContractFlags.generator,\n key: SizeContractKey\n}\n","import type { ThemeContractDeal } from '@ui0/types'\nimport type { InjectionKey } from 'vue'\n\nexport const StyleContractKey = Symbol('StyleContractKey') as InjectionKey<ThemeContractDeal>\n","import type { ThemeContract } from '@ui0/types'\n\nimport { ThemeContractFlags } from '../../constants'\nimport { StyleContractKey } from './style.key'\n\nexport type * from './style.types'\nexport const style: ThemeContract = {\n key: StyleContractKey,\n name: 'style',\n flag: ThemeContractFlags.generator\n}\n","// The typography contract's processing endpoint: closes over the provider and\n// returns the deal that maps the `typography` prop onto classes/styles at\n// runtime, resolving `inherit` against the provided context ref.\nimport type { ClassList, CSSModuleClassList } from '@ui0/types'\nimport type { Ref } from 'vue'\n\nimport { EMPTY_OBJ } from '../../constants'\nimport type { ContractProvider, ThemeContractDeal } from '../../types'\nimport { mergeCssModulesStyles } from '@ui0/util'\n\nimport type { TypographyProps } from './typography.types'\nimport $typography from './typography.module.css'\n\n// the prop -> class wiring: the prop value IS the logical class name from the\n// registry (e.g. `typography=\"fw700\"`), resolved to its hashed form from the\n// module map (merged with the component's own $style)\nfunction typographyClasses(\n props: TypographyProps,\n styles?: CSSModuleClassList\n): ClassList {\n const $ = mergeCssModulesStyles($typography, styles)\n const out: ClassList = []\n if (props.typography && $[props.typography]) out.push($[props.typography])\n return out\n}\n\nexport function typographyDeal(instance: ContractProvider): ThemeContractDeal {\n const props = instance.props\n\n return {\n classes: () => {\n if (!props.typography) return instance.inject([])\n\n if (props.typography === 'inherit') {\n const ctx = instance.context as Record<\n string,\n Ref<any> | undefined\n > | null\n if (ctx?.typography) {\n return instance.inject(\n typographyClasses({ typography: ctx.typography.value }, instance.$styles)\n )\n }\n }\n\n return instance.inject(\n typographyClasses(props as TypographyProps, instance.$styles)\n )\n },\n styles: () => instance.inject(EMPTY_OBJ)\n }\n}\n","import type { InjectionKey, Ref } from 'vue'\n\nimport type { ThemeContract } from '../../types'\nimport type { TypographyProp } from './typography.types'\n\n/** context key the deal resolves `inherit` against (see useThemeContract) */\nexport const TypographyRefKey = Symbol('TypographyRefKey') as InjectionKey<\n Ref<TypographyProp | undefined>\n>\nexport const TypographyContractKey = Symbol(\n 'TypographyContractKey'\n) as InjectionKey<ThemeContract>\n","// The typography contract's registry entry, generated from\n// packages/templates/contract. Wiring left (see the generator output):\n// 1. add `typography` to src/contracts/index.ts (next to round/size/...)\n// 2. add typographyGenerator to src/generator.ts (contractGenerators)\nimport { ThemeContractFlags } from '../../constants'\nimport type { ThemeContract } from '../../types'\nimport { typographyDeal } from './typography.contract'\nimport { TypographyContractKey, TypographyRefKey } from './typography.keys'\nimport type { TypographyProps } from './typography.types'\n\nexport { default as $style } from './typography.module.css'\nexport type * from './typography.types'\nexport * from './typography.keys'\n\nexport const TypographyPropsKeys: ReadonlyArray<keyof TypographyProps> = [\n 'typography'\n]\n\nexport const typography: ThemeContract = {\n key: TypographyContractKey,\n name: 'typography',\n ref: TypographyRefKey,\n deal: typographyDeal,\n flag: ThemeContractFlags.dealer + ThemeContractFlags.generator,\n props: TypographyPropsKeys\n}\n","import type { ThemeContract, ThemeContractName } from '@ui0/types'\n\nimport { backdrop, BackdropPropsKeys } from './backdrop'\nimport { color, ColorPropsKeys } from './color'\nimport { disabled, DisabledPropsKeys } from './disabled'\nimport { display } from './display'\nimport { elevation, ElevationPropsKeys } from './elevation'\nimport { round, RoundPropsKeys } from './round'\nimport { size, SizePropsKeys } from './size'\nimport { style } from './style'\nimport { typography } from './typography'\nexport type * from './backdrop'\nexport type * from './color'\nexport type * from './disabled'\nexport type * from './elevation'\nexport type * from './round'\nexport type * from './size'\n\nexport const contracts: Record<ThemeContractName, ThemeContract> = {\n color,\n backdrop,\n round,\n elevation,\n style,\n disabled,\n display,\n typography,\n size\n}\nexport const props = [\n ColorPropsKeys,\n RoundPropsKeys,\n SizePropsKeys,\n ElevationPropsKeys,\n BackdropPropsKeys,\n DisabledPropsKeys\n].flat()\n","import type { Ui0ThemeContractSettings, EventHandler } from '@ui0/types'\nimport {\n getClientHeight,\n getClientWidth,\n isBrowser,\n objectMerge,\n parseUnits,\n RecordContainer,\n type RecordContainerImpl\n} from '@ui0/util'\nimport { ref, type Ref, type WatchHandle } from 'vue'\n\nimport cfg from '../../config.default'\nimport type {\n DisplayBreakpoint,\n DisplayBreakpoints,\n DisplayImpl,\n DisplayMeasure,\n DisplayOperation,\n DisplayWatcher\n} from './display.types'\n\nexport class Display implements DisplayImpl {\n breakpoints: DisplayBreakpoints\n _watchers: DisplayWatcher[]\n _watcher: WatchHandle | null\n _activated: boolean\n _listeners: RecordContainerImpl<any>\n _width: Ref<number> | null\n _height: Ref<number> | null\n _resizeHandler: EventHandler\n\n constructor(config: Ui0ThemeContractSettings['display']) {\n this.breakpoints = objectMerge(cfg.contracts.display?.breakpoints, config?.breakpoints ?? {})\n\n this._watchers = []\n this._watcher = null\n this._width = null\n this._height = null\n this._activated = false\n this._resizeHandler = () => this.update()\n this._listeners = new RecordContainer()\n }\n\n public update() {\n if (this._width && this._height) {\n this._width.value = getClientWidth()\n this._height.value = getClientHeight()\n }\n let wasChanged = false\n\n this._watchers.forEach((watcher) => {\n const measure = watcher.measure === 'width' ? this._width : this._height\n const oldValue = watcher.value.value\n\n if (watcher.operation === 'between') {\n const breakpoint1 = this.getBreakpointValue(String(watcher.points[0]))\n const breakpoint2 = this.getBreakpointValue(String(watcher.points[1]))\n\n if (measure && breakpoint1 && breakpoint2) {\n const b1 = parseUnits(String(breakpoint1)).value\n const b2 = parseUnits(String(breakpoint2)).value\n // console.log('we', b1, b2)\n if (b1 > b2) watcher.value.value = measure.value > b2 && measure.value < b1\n if (b1 < b2) watcher.value.value = measure.value > b1 && measure.value < b2\n\n if (watcher.value.value !== oldValue) {\n wasChanged = true\n }\n }\n }\n if (watcher.operation === 'less' || watcher.operation === 'greater') {\n const breakpoint1 = this.getBreakpointValue(String(watcher.points[0]))\n if (breakpoint1 && measure) {\n const b1 = parseUnits(String(breakpoint1)).value\n watcher.value.value = watcher.operation === 'less' ? measure.value < b1 : measure.value > b1\n\n if (watcher.value.value !== oldValue) {\n wasChanged = true\n }\n }\n }\n })\n\n if (wasChanged) {\n this._listeners.items.forEach((item) => item())\n }\n }\n\n public addUpdateListener(fn: AnyFn): number {\n return this._listeners.add(fn)\n }\n\n public removeUpdateListener(index: number) {\n this._listeners.remove(index)\n }\n\n public less(point: DisplayBreakpoint, measure: DisplayMeasure = 'width') {\n const out = this.addWatcher('less', [point], measure)\n this.activate()\n return out\n }\n\n public between(point1: DisplayBreakpoint, point2: DisplayBreakpoint, measure: DisplayMeasure = 'width') {\n const out = this.addWatcher('between', [point1, point2], measure)\n this.activate()\n this.update()\n return out\n }\n\n public greater(point: DisplayBreakpoint, measure: DisplayMeasure = 'width') {\n const out = this.addWatcher('greater', [point], measure)\n this.activate()\n return out\n }\n\n public activate() {\n // if (this._activated) return\n\n if (!this._width) this._width = ref(0)\n if (!this._height) this._height = ref(0)\n\n if (isBrowser && !this._activated) window.addEventListener('resize', this._resizeHandler, { passive: true })\n\n this.update()\n this._activated = true\n }\n\n public deactivate() {\n this._activated = false\n if (isBrowser) window.removeEventListener('resize', this._resizeHandler)\n }\n\n private getBreakpointValue(name: string): number {\n // console.log('breaks', Object.keys(_breakpoints).length)\n return +this.breakpoints[name]\n }\n\n private addWatcher(\n operation: DisplayOperation,\n points: DisplayBreakpoint[],\n measure: DisplayMeasure = 'width'\n ): Ref<boolean> {\n let outRef: Ref<boolean> | undefined = undefined\n\n this._watchers.forEach((watcher) => {\n const isMultiValued = watcher.points.length > 1\n if (watcher.operation === operation) {\n if (isMultiValued) {\n if (watcher.points[0] === points[0] && watcher.points[1] === points[1]) {\n console.log('setting existing ', watcher.value)\n outRef = watcher.value\n }\n } else {\n if (watcher.points[0] === points[0]) {\n outRef = watcher.value\n }\n }\n }\n })\n if (!outRef) {\n outRef = ref(false)\n this._watchers.push({\n measure,\n points,\n operation,\n value: outRef\n })\n }\n\n return outRef\n }\n}\n","// localStorage persistence for the theme instance's selection (preset +\n// appearance). SSR-safe: a no-op wherever localStorage is unavailable or\n// throws (private mode, blocked storage).\n\n/** the storage slot holding the selection */\nconst STORAGE_KEY = 'ui0:theme'\n\n/** the persisted shape; both fields optional so a partial write still reads */\nexport interface StoredThemeSelection {\n preset?: string\n appearance?: string\n}\n\n/**\n * Reads the stored selection.\n * @returns the parsed selection, or undefined when absent or unreadable\n */\nexport function readStoredSelection(): StoredThemeSelection | undefined {\n if (typeof localStorage === 'undefined') return undefined\n try {\n const raw = localStorage.getItem(STORAGE_KEY)\n if (!raw) return undefined\n const parsed = JSON.parse(raw)\n if (typeof parsed !== 'object' || parsed === null) return undefined\n return parsed as StoredThemeSelection\n } catch {\n return undefined\n }\n}\n\n/**\n * Writes the selection, swallowing storage errors.\n * @param preset - the active preset name\n * @param appearance - the active appearance\n */\nexport function writeStoredSelection(preset: string, appearance: string): void {\n if (typeof localStorage === 'undefined') return\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify({ preset, appearance }))\n } catch {\n // storage full or blocked - the selection just won't persist\n }\n}\n","import type {\n ThemeAppearance,\n ThemePluginConfig,\n ThemeInstance,\n ThemeInstanceOptions,\n ThemePreset,\n ThemePresetName,\n ThemePresets,\n Ui0ThemePresetAppearanceConfig,\n ThemeContracts,\n Ui0ThemeContracts\n} from '@ui0/types'\nimport { isArray } from '@ui0/util'\n// The live theme instance - the runtime counterpart of the theme config\n// (ThemeConfig). Holds the registered presets plus the current\n// name/appearance, and answers the questions the UI asks at runtime:\n// which presets exist, what colors a scheme resolves to, ...\n// Plain data + vue refs only (reactive by itself - reading `.name` /\n// `.appearance` inside an effect tracks them).\nimport { ref, watch, type Ref } from 'vue'\n\nimport { THEME_SCHEMES } from './constants'\nimport { withDefaults } from './generator/generate'\nimport { buildPool, resolvePool } from './generator/pool'\nimport { deepMerge, resolvePreset } from './generator/theme-def'\nimport { readStoredSelection, writeStoredSelection } from './persist'\nimport { schemesOf } from './types'\n\nexport function createThemeInstance(config: ThemePluginConfig, options: ThemeInstanceOptions = {}): ThemeInstance {\n // merge the built-in default preset UNDER the consumer's (same rule the\n // generator uses) so the runtime instance sees exactly what the generated\n // css carries - e.g. colorList() includes the system colors a consumer\n // preset never redeclared\n const resolved = withDefaults(config)\n const contracts: ThemeContracts = {}\n\n const props: Array<keyof Ui0ThemeContracts> = []\n //collect list symbols and supply symbols as keys\n // for (const i in builtinContracts.contracts) {\n // const ix: ThemeContractName = i\n // const k = builtinContracts.contracts[ix].key\n // contracts[k] = builtinContracts.contracts[ix]\n // if (contracts[k].props) props.push(...contracts[k].props)\n // }\n const presets: ThemePresets = { ...resolved.presets }\n\n const cache: ThemePresets = {}\n\n const names = () => Object.keys(presets)\n\n // a previous session's selection wins over the config defaults (explicit\n // options win over both); entries the config can't honor are dropped\n const stored = readStoredSelection()\n const storedPreset = stored?.preset && stored.preset in presets ? (stored.preset as ThemePresetName) : undefined\n const storedAppearance =\n stored?.appearance && THEME_SCHEMES.includes(stored.appearance) ? (stored.appearance as ThemeAppearance) : undefined\n\n const name: Ref<ThemePresetName> = ref(\n options.theme && options.theme in presets\n ? options.theme\n : (storedPreset ?? (resolved.default in presets ? resolved.default : (names()[0] ?? '')))\n )\n\n const appearance: Ref<ThemeAppearance> = ref(options.appearance ?? storedAppearance ?? 'light')\n\n // keep the user's selection across reloads (no-op where storage is\n // unavailable); sync so a change is durable even if the page unloads right\n // after the mutation\n watch([name, appearance], ([preset, appr]) => writeStoredSelection(preset, appr), {\n flush: 'sync'\n })\n\n /** the resolved appearance config (base merged under the scheme) */\n const configFor = (n: ThemePresetName, appr: ThemeAppearance): Ui0ThemePresetAppearanceConfig => {\n const preset = resolvePreset(presets, n, cache)\n const scheme = appr === 'default' ? schemesOf(preset).default : schemesOf(preset)[appr]\n return scheme\n ? (deepMerge(\n schemesOf(preset).default as Record<string, unknown>,\n scheme as Record<string, unknown>\n ) as Ui0ThemePresetAppearanceConfig)\n : schemesOf(preset).default\n }\n\n // presets whose `extends` chain reaches `base` (transitively)\n function descendants(base: ThemePresetName): ThemePresetName[] {\n const out = new Set<ThemePresetName>()\n let frontier: ThemePresetName[] = [base]\n while (frontier.length) {\n const next: ThemePresetName[] = []\n for (const b of frontier) {\n for (const n of names()) {\n if (!out.has(n) && n !== base && presets[n]?.extends === b) {\n out.add(n)\n next.push(n)\n }\n }\n }\n frontier = next\n }\n return [...out]\n }\n\n return {\n contracts,\n get preset() {\n return name.value\n },\n presets() {\n return presets\n },\n set preset(v: ThemePresetName) {\n if (v in presets) name.value = v\n },\n get appearance() {\n return appearance.value\n },\n set appearance(v: ThemeAppearance) {\n appearance.value = v\n },\n toggle: () => {\n appearance.value = appearance.value === 'dark' ? 'light' : 'dark'\n },\n presetList: () => names(),\n // registered presets extending the current one (transitively via their\n // `extends` field); pass `exact` to ask about another base preset\n extends: (exact?: string) => descendants(exact ?? name.value),\n\n addPreset(n: ThemePresetName, preset: ThemePreset) {\n presets[n] = preset\n delete cache[n]\n },\n addContract(contract) {\n contracts[contract.key] = contract\n\n if (contract.props && isArray(contract.props)) props.push(...contract.props)\n },\n removeContract(key) {\n delete contracts[key]\n },\n contractList: () => Object.getOwnPropertySymbols(contracts),\n contractProps: () => props,\n // component-level knobs that are not part of the generated token set\n\n colorList(theme?: ThemePresetName, appr?: ThemeAppearance): string[] {\n const cfg = configFor(theme ?? name.value, appr ?? appearance.value)\n const { base } = resolvePool(buildPool(cfg.color, undefined))\n return Object.keys(base)\n }\n }\n}\n","import type { ContractProvider } from '@ui0/types'\nimport type { ThemeInstance } from '@ui0/types'\nimport type { InjectionKey } from 'vue'\n\nexport const Ui0ThemeKey: InjectionKey<ThemeInstance> = Symbol('ui0-theme')\nexport const Ui0ThemeContractProvider: InjectionKey<ContractProvider> = Symbol('ui0-theme-contract')\n","// The theme as a core plugin: app-agnostic install into the core's public\n// instance - exposes the live theme at instance.theme (typed via the\n// augmentation in ./types) AND provides it on the Vue app, so a host can use\n// the theme with or without the theme-provider component.\nimport type { Ui0CoreInstallablePlugin, Ui0CorePublicInstance } from '@ui0/types'\nimport type { ThemePluginConfig, ThemeInstance, ThemeContractName } from '@ui0/types'\n\nimport { contracts } from './contracts'\nimport { Display } from './contracts/display/display.instance'\nimport { DisplayContractKey, DisplayKey } from './contracts/display/display.keys'\nimport { ensureThemeBaseStyle } from './generator/base'\nimport { createThemeInstance } from './instance'\nimport { Ui0ThemeKey } from './keys'\n\nexport function createUi0Theme(config: ThemePluginConfig): Ui0CoreInstallablePlugin {\n return {\n install(instance: Ui0CorePublicInstance) {\n const theme: ThemeInstance = createThemeInstance(config)\n\n Object.keys(contracts).forEach((c) => {\n theme.addContract(contracts[c as ThemeContractName])\n })\n const display = new Display(config.contracts.display)\n\n // the body reset ships with the install - no separate css import needed\n if (typeof document !== 'undefined') ensureThemeBaseStyle(document)\n if (instance.vue) {\n instance.vue.provide(Ui0ThemeKey, theme)\n instance.vue.provide(DisplayKey, display)\n }\n return theme\n }\n }\n}\n","import type { Ui0CorePublicInstance } from '@ui0/types'\nimport type { ThemeInstance } from '@ui0/types'\nimport { getCurrentInstance, hasInjectionContext, inject } from 'vue'\n\nimport { Ui0ThemeKey } from './keys'\n\nexport function useTheme(): ThemeInstance | undefined {\n if (hasInjectionContext()) {\n const provided = inject(Ui0ThemeKey, undefined)\n if (provided) {\n return provided\n }\n }\n\n const vm = getCurrentInstance()\n if (!vm) return undefined\n return (vm.appContext.config.globalProperties.$ui0 as Ui0CorePublicInstance | undefined)?.theme\n}\n","import type { UpdateFn } from '@ui0/types'\nimport { newFrameworkError } from '@ui0/util'\nimport { hasInjectionContext, inject, onMounted, onUnmounted } from 'vue'\n\nimport { DisplayKey, type DisplayReturn } from './contracts/display'\n\nexport function useDisplay(onUpdate?: UpdateFn): DisplayReturn {\n if (hasInjectionContext()) {\n const display = inject(DisplayKey)\n if (display) {\n console.log('if display', display)\n\n if (onUpdate)\n onMounted(() => {\n const id = display.addUpdateListener(onUpdate)\n onUnmounted(() => {\n display.removeUpdateListener(id)\n })\n })\n return display\n }\n }\n throw newFrameworkError('display context not exists')\n}\n","import type { AnyProps, ClassList, CSSModuleClassList, Indexed, StyleList } from '@ui0/types'\nimport type { ContractProvider, ContractRefs, ThemeContract, ThemeContractName, Ui0ThemeContracts } from '@ui0/types'\nimport { isArray, isString } from '@ui0/util'\nfunction createProviderInstance(name: string, props?: Ui0ThemeContracts, styles?: CSSModuleClassList) {\n const provider = {}\n}\nexport class ThemeContractInstance implements ContractProvider {\n props: AnyProps\n /**\n * context have any provided props from styler's\n */\n context: ContractRefs | null\n $styles: CSSModuleClassList\n name: string\n classList: ClassList = []\n styleList: StyleList = {}\n contracts: Partial<Record<ThemeContractName, ThemeContract>>\n\n constructor(name: string, props?: Ui0ThemeContracts, styles?: CSSModuleClassList) {\n this.$styles = styles ?? {}\n this.props = props ?? {}\n this.name = name\n this.context = null\n this.contracts = {}\n }\n\n public add(contract: ThemeContract) {\n this.contracts[contract.name] = contract\n }\n public prop(name: keyof Ui0ThemeContracts | Array<keyof Ui0ThemeContracts>) {\n const jobs: Indexed<ThemeContract> = {}\n const instance = this\n\n for (const contract of Object.values(this.contracts)) {\n if (isArray(name)) {\n name.forEach((n) => {\n if (contract.props?.includes(n)) {\n jobs[contract.name] = contract.deal\n }\n })\n } else if (isString(name)) {\n if (contract.props?.includes(name)) {\n jobs[contract.name] = contract\n }\n }\n contract?.props?.includes(name)\n }\n return {\n styles() {\n let out: StyleList = {}\n for (const contract of Object.values(jobs)) {\n const deal = contract?.deal?.(instance)\n if (deal) out = { ...out, ...deal.styles() }\n // if (deal && CONTRACT_PROPS[contract].some((p) => props[p])) {\n // out = { ...out, ...deal.styles(props) }\n // }\n }\n return out\n },\n classes() {\n const out: ClassList = []\n for (const contract of Object.values(jobs)) {\n const deal = contract?.deal?.(instance)\n if (deal) out.push(...deal.classes())\n }\n return out\n }\n }\n }\n\n public remove(name: ThemeContractName) {\n delete this.contracts[name]\n }\n\n public setContext(p: ContractRefs) {\n this.context = p\n }\n\n public classes(props_?: AnyProps, $styles = this.$styles) {\n const props = props_ ?? this.props\n const out: ClassList = []\n for (const contract of Object.values(this.contracts)) {\n const deal = contract?.deal?.(this)\n if (deal) out.push(...deal.classes(props as Ui0ThemeContracts, $styles))\n }\n return out\n }\n\n public styles(props_?: AnyProps) {\n const props = props_ ?? this.props\n let out: StyleList = {}\n for (const contract of Object.keys(this.contracts) as ThemeContractName[]) {\n const deal = this.contracts[contract]?.deal?.(this)\n if (deal) out = { ...out, ...deal.styles(props) }\n // if (deal && CONTRACT_PROPS[contract].some((p) => props[p])) {\n // out = { ...out, ...deal.styles(props) }\n // }\n }\n return out\n }\n\n /**\n * Virtual's classes and styles injector\n * @param data\n * @private\n */\n public inject(data?: any) {\n if (isArray(data)) {\n // dirty hack to compute it faster\n // in reality we need to check-mark every item of array1 in array2\n if (data.indexOf(this.classList[0]) === -1) return [...this.classList, ...data]\n else return data\n } else return { ...this.styleList, ...data }\n }\n}\n","import type {\n ContractRefs,\n CSSModuleClassList,\n ThemeContractKey,\n ThemeContractName,\n ThemeInstance,\n Ui0CorePublicInstance,\n Ui0ThemeContracts\n} from '@ui0/types'\nimport { isArray, isString, newFrameworkError } from '@ui0/util'\nimport {\n getCurrentInstance,\n hasInjectionContext,\n isReactive,\n provide,\n inject,\n reactive,\n toRefs,\n type InjectionKey,\n type Ref,\n useCssModule\n} from 'vue'\n\nimport { ThemeContractInstance } from './contracts/contract'\nimport { useTheme } from './useTheme'\n\nexport function useThemeContext(\n props: Ui0ThemeContracts,\n $styles?: CSSModuleClassList,\n _allowContracts?: Array<keyof Ui0ThemeContracts>\n): [ThemeInstance | undefined, ThemeContractInstance | undefined] {\n const vm = getCurrentInstance()\n\n if (hasInjectionContext()) {\n const $style = $styles ?? useCssModule()\n const theme = useTheme()\n\n if (theme) {\n const refs = isReactive(props) ? toRefs(props) : toRefs(reactive(props))\n\n function providePropRef(name: ThemeContractName, key: InjectionKey<Ref | undefined>) {\n const injected = inject(key, null)\n const keys = ['smaller', 'larger', 'inherit']\n\n if (refs) {\n const ref = refs[name as keyof Ui0ThemeContracts]\n if (ref) {\n if (ref.value !== undefined) {\n const v = ref.value\n\n if (isArray(v) && v.length) {\n if (v[0] && isString(v[0]) && !keys.includes(v[0])) {\n provide(key, ref)\n return ref\n } else {\n if (injected) {\n provide(key, injected)\n return injected\n }\n }\n } else if ((v && isString(v) && !keys.includes(v)) || typeof v === 'number') {\n provide(key, ref)\n return ref\n } else {\n if (injected) {\n provide(key, injected)\n return injected\n }\n }\n }\n }\n }\n }\n\n const provider = new ThemeContractInstance('test', props, $style)\n\n const ctx: ContractRefs = {}\n\n for (const c of theme.contractList()) {\n const currentContract = theme.contracts[c as ThemeContractKey]\n const r = currentContract.ref\n if (r) {\n ctx[currentContract.name as keyof Ui0ThemeContracts] = providePropRef(currentContract.name, r)\n }\n provider.add(currentContract)\n }\n provider.setContext(ctx)\n\n return [theme, provider]\n }\n }\n if (!vm) throw newFrameworkError('ThemeWithContext')\n\n if (!vm) return [undefined, undefined]\n return [(vm.appContext.config.globalProperties.$ui0 as Ui0CorePublicInstance | undefined)?.theme, undefined]\n}\n"],"mappings":"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"}
package/dist/is.scss ADDED
@@ -0,0 +1,185 @@
1
+ @mixin notColoredOrFilled {
2
+ &:not(.filled, .colored) {
3
+ @content;
4
+ }
5
+ }
6
+ @mixin notColored {
7
+ &:not(.colored) {
8
+ @content;
9
+ }
10
+ }
11
+ @mixin notColored2 {
12
+ &:not(.colored2) {
13
+ @content;
14
+ }
15
+ }
16
+ @mixin notColored3 {
17
+ &:not(.colored3) {
18
+ @content;
19
+ }
20
+ }
21
+ @mixin notSized {
22
+ &:not(.sized) {
23
+ @content;
24
+ }
25
+ }
26
+ @mixin notBackdrop {
27
+ &:not(.backdrop) {
28
+ @content;
29
+ }
30
+ }
31
+ @mixin notFilled2 {
32
+ &:not(.filled2) {
33
+ @content;
34
+ }
35
+ }
36
+ @mixin notFilled3 {
37
+ &:not(.filled3) {
38
+ @content;
39
+ }
40
+ }
41
+ @mixin notFilled {
42
+ &:not(.filled) {
43
+ @content;
44
+ }
45
+ }
46
+ @mixin notElevated {
47
+ &:not(.elv) {
48
+ @content;
49
+ }
50
+ }
51
+ @mixin notDisabled {
52
+ &:not(.disabled) {
53
+ @content;
54
+ }
55
+ }
56
+
57
+ @mixin coloredAndFilled {
58
+ &.colored.filled {
59
+ @content;
60
+ }
61
+ }
62
+ @mixin coloredOrFilled {
63
+ &.colored,
64
+ &.filled {
65
+ @content;
66
+ }
67
+ }
68
+
69
+ @mixin colored {
70
+ &.colored {
71
+ @content;
72
+ }
73
+ }
74
+ @mixin colored2 {
75
+ &.colored2 {
76
+ @content;
77
+ }
78
+ }
79
+ @mixin colored3 {
80
+ &.colored3 {
81
+ @content;
82
+ }
83
+ }
84
+ @mixin sized {
85
+ &.sized {
86
+ @content;
87
+ }
88
+ }
89
+ @mixin backdrop {
90
+ &.backdrop {
91
+ @content;
92
+ }
93
+ }
94
+ @mixin filled2 {
95
+ &.filled2 {
96
+ @content;
97
+ }
98
+ }
99
+ @mixin filled3 {
100
+ &.filled3 {
101
+ @content;
102
+ }
103
+ }
104
+ @mixin filled {
105
+ &.filled {
106
+ @content;
107
+ }
108
+ }
109
+ @mixin elevated {
110
+ &.elv {
111
+ @content;
112
+ }
113
+ }
114
+ @mixin disabled {
115
+ &.disabled {
116
+ @content;
117
+ }
118
+ }
119
+
120
+ @mixin rounded {
121
+ &.rounded {
122
+ @content;
123
+ }
124
+ }
125
+ @mixin notRounded {
126
+ :not(&.rounded) {
127
+ @content;
128
+ }
129
+ }
130
+ @mixin roundedLeft {
131
+ &.rFull,
132
+ &.rl,
133
+ &.rt,
134
+ .bl,
135
+ .tl {
136
+ @content;
137
+ }
138
+ }
139
+ @mixin roundedRight {
140
+ &.rFull,
141
+ &.rr,
142
+ .rt,
143
+ .br,
144
+ .tr {
145
+ @content;
146
+ }
147
+ }
148
+ @mixin roundedTop {
149
+ &.rFull,
150
+ &.rl,
151
+ .rt,
152
+ .tl,
153
+ .tr {
154
+ @content;
155
+ }
156
+ }
157
+ @mixin roundedBottom {
158
+ &.rFull,
159
+ &.rl,
160
+ .rb,
161
+ .bl,
162
+ .br {
163
+ @content;
164
+ }
165
+ }
166
+ @mixin roundedBottom {
167
+ &.rFull,
168
+ &.rl,
169
+ .rb,
170
+ .bl,
171
+ .br {
172
+ @content;
173
+ }
174
+ }
175
+
176
+ @mixin dark {
177
+ :global(.theme_dark) & {
178
+ @content;
179
+ }
180
+ }
181
+ @mixin light {
182
+ :global(.theme_light) & {
183
+ @content;
184
+ }
185
+ }
@@ -0,0 +1,48 @@
1
+ import { readFileSync, unlinkSync, writeFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { tmpdir } from "node:os";
4
+ import { pathToFileURL } from "node:url";
5
+ import { transformSync } from "esbuild";
6
+ // src/generator/load-config.ts
7
+ /**
8
+ * Accept a config file's default export in either supported shape and always
9
+ * return the ThemePluginConfig: a bare config passes through; a core-config
10
+ * wrapper (`{ theme: ThemePluginConfig }`, the playground-style ui0.config.ts
11
+ * that the core install imports too) is unwrapped.
12
+ */
13
+ function unwrapThemeConfig(config) {
14
+ return "theme" in config ? config.theme : config;
15
+ }
16
+ /**
17
+ * Load a TS theme config file by transpiling it with esbuild and importing
18
+ * the result from a throwaway temp file.
19
+ *
20
+ * The file may default-export a bare `ThemePluginConfig` or a core-config
21
+ * wrapper (`{ theme: ThemePluginConfig }`) - see {@link unwrapThemeConfig}.
22
+ *
23
+ * esbuild is a real dependency of this package (not just a Vite internal) so
24
+ * this works identically at dev and build time, without depending on Vite's
25
+ * own dev-server-only module loading (ssrLoadModule) - the config file is
26
+ * just a plain object literal, no app code, so a throwaway temp-file import
27
+ * is enough; no need to wire it into Vite's module graph.
28
+ *
29
+ * @param configPath - absolute path to the config file
30
+ * @returns the file's theme config (a ThemePluginConfig)
31
+ */
32
+ async function loadThemeConfig(configPath) {
33
+ const src = readFileSync(configPath, "utf-8");
34
+ const { code } = transformSync(src, {
35
+ loader: "ts",
36
+ format: "esm"
37
+ });
38
+ const tmpFile = path.join(tmpdir(), `ui0-theme-${Date.now()}-${Math.random().toString(36).slice(2)}.mjs`);
39
+ writeFileSync(tmpFile, code);
40
+ try {
41
+ return unwrapThemeConfig((await import(pathToFileURL(tmpFile).href)).default);
42
+ } finally {
43
+ unlinkSync(tmpFile);
44
+ }
45
+ }
46
+ export { loadThemeConfig as t };
47
+
48
+ //# sourceMappingURL=load-config-64q6nzFy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-config-64q6nzFy.mjs","names":[],"sources":["../src/generator/load-config.ts"],"sourcesContent":["import { readFileSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport path from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nimport type { ThemePluginConfig } from '@ui0/types'\nimport { transformSync } from 'esbuild'\n\n/**\n * Accept a config file's default export in either supported shape and always\n * return the ThemePluginConfig: a bare config passes through; a core-config\n * wrapper (`{ theme: ThemePluginConfig }`, the playground-style ui0.config.ts\n * that the core install imports too) is unwrapped.\n */\nexport function unwrapThemeConfig(config: ThemePluginConfig | { theme: ThemePluginConfig }): ThemePluginConfig {\n return 'theme' in config ? config.theme : config\n}\n\n/**\n * Load a TS theme config file by transpiling it with esbuild and importing\n * the result from a throwaway temp file.\n *\n * The file may default-export a bare `ThemePluginConfig` or a core-config\n * wrapper (`{ theme: ThemePluginConfig }`) - see {@link unwrapThemeConfig}.\n *\n * esbuild is a real dependency of this package (not just a Vite internal) so\n * this works identically at dev and build time, without depending on Vite's\n * own dev-server-only module loading (ssrLoadModule) - the config file is\n * just a plain object literal, no app code, so a throwaway temp-file import\n * is enough; no need to wire it into Vite's module graph.\n *\n * @param configPath - absolute path to the config file\n * @returns the file's theme config (a ThemePluginConfig)\n */\nexport async function loadThemeConfig(configPath: string): Promise<ThemePluginConfig> {\n const src = readFileSync(configPath, 'utf-8')\n const { code } = transformSync(src, { loader: 'ts', format: 'esm' })\n const tmpFile = path.join(tmpdir(), `ui0-theme-${Date.now()}-${Math.random().toString(36).slice(2)}.mjs`)\n writeFileSync(tmpFile, code)\n try {\n const mod = (await import(pathToFileURL(tmpFile).href)) as {\n default: ThemePluginConfig | { theme: ThemePluginConfig }\n }\n return unwrapThemeConfig(mod.default)\n } finally {\n unlinkSync(tmpFile)\n }\n}\n"],"mappings":";;;;;;;;;;;;AAcA,SAAgB,kBAAkB,QAA6E;CAC7G,OAAO,WAAW,SAAS,OAAO,QAAQ;AAC5C;;;;;;;;;;;;;;;;;AAkBA,eAAsB,gBAAgB,YAAgD;CACpF,MAAM,MAAM,aAAa,YAAY,OAAO;CAC5C,MAAM,EAAE,SAAS,cAAc,KAAK;EAAE,QAAQ;EAAM,QAAQ;CAAM,CAAC;CACnE,MAAM,UAAU,KAAK,KAAK,OAAO,GAAG,aAAa,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK;CACxG,cAAc,SAAS,IAAI;CAC3B,IAAI;EAIF,OAAO,mBAAkB,MAHN,OAAO,cAAc,OAAO,CAAC,CAAC,MAAA,CAGpB,OAAO;CACtC,UAAU;EACR,WAAW,OAAO;CACpB;AACF"}
@@ -0,0 +1,57 @@
1
+ $timing-in: ease;
2
+ $timing-out: cubic-bezier(0, 0, .2, 1);
3
+ $duration-out: 800ms;
4
+ $duration: 540ms;
5
+
6
+ @mixin no {
7
+ &:global(:not(.fx-ripple)) {
8
+ @content;
9
+ }
10
+ }
11
+ @mixin root {
12
+ &:global(.fx-ripple) {
13
+ @content;
14
+ }
15
+ }
16
+ @mixin in {
17
+ @include root {
18
+ &:global(.fx-ripple-in) {
19
+ @content;
20
+ }
21
+ }
22
+ }
23
+ @mixin out {
24
+ @include root {
25
+ &:global(.fx-ripple-out) {
26
+ @content;
27
+ }
28
+ }
29
+ }
30
+ @mixin item {
31
+ @include root {
32
+ :global(.fx-ripple-c) :global(.fx-ripple-item) {
33
+ @content;
34
+ }
35
+ }
36
+ }
37
+ @mixin container {
38
+ @include root {
39
+ :global(.fx-ripple-c) {
40
+ @content;
41
+ }
42
+ }
43
+ }
44
+
45
+ @mixin reset {
46
+ --0-ripple-opacity: 1;
47
+ --0-ripple-color-value: var(--r-c-f-v, var(--r-c-f-v));
48
+ --0-ripple-duration-out: 800ms;
49
+ --0-ripple-duration: 540ms;
50
+ --0-ripple-gap: 0em;
51
+ --0-ripple-border-radius: 0.3em;
52
+
53
+ --0-ripple-br-tl: var(--0-ripple-border-radius);
54
+ --0-ripple-br-tr: var(--0-ripple-border-radius);
55
+ --0-ripple-br-br: var(--0-ripple-border-radius);
56
+ --0-ripple-br-bl: var(--0-ripple-border-radius);
57
+ }
@@ -0,0 +1,92 @@
1
+ @value rFull: rF_7ee9;
2
+ @value rSmooth: rS_e0da;
3
+ @value rBasic: rB_2f08;
4
+ @value rHard: rH_7415;
5
+ @value rNone: rN_2296;
6
+ @value rounded: ro_0102;
7
+ @value rl: rl_52df;
8
+ @value rr: rr_597c;
9
+ @value rt: rt_cdff;
10
+ @value rb: rb_64f2;
11
+ @value tl: tl_e660;
12
+ @value tr: tr_7817;
13
+ @value bl: bl_29d9;
14
+ @value br: br_8850;
15
+
16
+ .rF_7ee9 {
17
+ --0-r-tl: var(--0c-r-full, var(--0-r-full));
18
+ --0-r-tr: var(--0c-r-full, var(--0-r-full));
19
+ --0-r-bl: var(--0c-r-full, var(--0-r-full));
20
+ --0-r-br: var(--0c-r-full, var(--0-r-full));
21
+ }
22
+
23
+ .rS_e0da {
24
+ --0-r-tl: var(--0c-r-smooth, var(--0-r-smooth));
25
+ --0-r-tr: var(--0c-r-smooth, var(--0-r-smooth));
26
+ --0-r-bl: var(--0c-r-smooth, var(--0-r-smooth));
27
+ --0-r-br: var(--0c-r-smooth, var(--0-r-smooth));
28
+ }
29
+
30
+ .rB_2f08 {
31
+ --0-r-tl: var(--0c-r-basic, var(--0-r-basic));
32
+ --0-r-tr: var(--0c-r-basic, var(--0-r-basic));
33
+ --0-r-bl: var(--0c-r-basic, var(--0-r-basic));
34
+ --0-r-br: var(--0c-r-basic, var(--0-r-basic));
35
+ }
36
+
37
+ .rH_7415 {
38
+ --0-r-tl: var(--0c-r-hard, var(--0-r-hard));
39
+ --0-r-tr: var(--0c-r-hard, var(--0-r-hard));
40
+ --0-r-bl: var(--0c-r-hard, var(--0-r-hard));
41
+ --0-r-br: var(--0c-r-hard, var(--0-r-hard));
42
+ }
43
+
44
+ .rN_2296 {
45
+ --0-r-tl: var(--0c-r-none, var(--0-r-none));
46
+ --0-r-tr: var(--0c-r-none, var(--0-r-none));
47
+ --0-r-bl: var(--0c-r-none, var(--0-r-none));
48
+ --0-r-br: var(--0c-r-none, var(--0-r-none));
49
+ }
50
+
51
+ .ro_0102 {
52
+ --0-r-tl: var(--0c-r-basic, var(--0-r-basic));
53
+ --0-r-tr: var(--0c-r-basic, var(--0-r-basic));
54
+ --0-r-bl: var(--0c-r-basic, var(--0-r-basic));
55
+ --0-r-br: var(--0c-r-basic, var(--0-r-basic));
56
+ }
57
+
58
+ .rl_52df {
59
+ --0-r-tl: var(--0c-r-basic, var(--0-r-basic));
60
+ --0-r-bl: var(--0c-r-basic, var(--0-r-basic));
61
+ }
62
+
63
+ .rr_597c {
64
+ --0-r-tr: var(--0c-r-basic, var(--0-r-basic));
65
+ --0-r-br: var(--0c-r-basic, var(--0-r-basic));
66
+ }
67
+
68
+ .rt_cdff {
69
+ --0-r-tl: var(--0c-r-basic, var(--0-r-basic));
70
+ --0-r-tr: var(--0c-r-basic, var(--0-r-basic));
71
+ }
72
+
73
+ .rb_64f2 {
74
+ --0-r-bl: var(--0c-r-basic, var(--0-r-basic));
75
+ --0-r-br: var(--0c-r-basic, var(--0-r-basic));
76
+ }
77
+
78
+ .tl_e660 {
79
+ --0-r-tl: var(--0c-r-basic, var(--0-r-basic));
80
+ }
81
+
82
+ .tr_7817 {
83
+ --0-r-tr: var(--0c-r-basic, var(--0-r-basic));
84
+ }
85
+
86
+ .bl_29d9 {
87
+ --0-r-bl: var(--0c-r-basic, var(--0-r-basic));
88
+ }
89
+
90
+ .br_8850 {
91
+ --0-r-br: var(--0c-r-basic, var(--0-r-basic));
92
+ }
@@ -0,0 +1,14 @@
1
+ @value rounded: ro_0102;
2
+ @value rBasic: rB_2f08;
3
+ @value rSmooth: rS_e0da;
4
+ @value rHard: rH_7415;
5
+ @value rNone: rN_2296;
6
+ @value rFull: rF_7ee9;
7
+ @value rl: rl_52df;
8
+ @value rr: rr_597c;
9
+ @value rt: rt_cdff;
10
+ @value rb: rb_64f2;
11
+ @value br: br_8850;
12
+ @value bl: bl_29d9;
13
+ @value tl: tl_e660;
14
+ @value tr: tr_7817;