@apollo-design/theme 0.0.0-stage → 0.1.9

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 (38) hide show
  1. package/README.md +140 -2
  2. package/dist/algorithms/compact.mjs +19 -0
  3. package/dist/algorithms/dark.mjs +36 -0
  4. package/dist/algorithms/default.mjs +28 -0
  5. package/dist/algorithms/palettes.mjs +123 -0
  6. package/dist/alias.mjs +169 -0
  7. package/dist/css-var.mjs +153 -0
  8. package/dist/get-design-token.mjs +42 -0
  9. package/dist/index.d.mts +360 -0
  10. package/dist/index.d.ts +360 -0
  11. package/dist/index.mjs +17 -0
  12. package/dist/merge-theme.mjs +21 -0
  13. package/dist/presets/default.css +108 -0
  14. package/dist/presets/default.d.mts +6 -0
  15. package/dist/presets/default.d.ts +6 -0
  16. package/dist/presets/default.mjs +3 -0
  17. package/dist/presets/material3.css +54 -0
  18. package/dist/presets/material3.d.mts +6 -0
  19. package/dist/presets/material3.d.ts +6 -0
  20. package/dist/presets/material3.mjs +71 -0
  21. package/dist/presets/mono.css +54 -0
  22. package/dist/presets/mono.d.mts +6 -0
  23. package/dist/presets/mono.d.ts +6 -0
  24. package/dist/presets/mono.mjs +41 -0
  25. package/dist/seed.mjs +74 -0
  26. package/dist/shared/color-map-token.mjs +97 -0
  27. package/dist/shared/common-map-token.mjs +14 -0
  28. package/dist/shared/control-height.mjs +9 -0
  29. package/dist/shared/font-map-token.mjs +36 -0
  30. package/dist/shared/font-sizes.mjs +27 -0
  31. package/dist/shared/get-alpha-color.mjs +28 -0
  32. package/dist/shared/radius.mjs +44 -0
  33. package/dist/shared/size-map-token.mjs +31 -0
  34. package/dist/shared/theme.DBaLDtcj.d.mts +358 -0
  35. package/dist/shared/theme.DBaLDtcj.d.ts +358 -0
  36. package/dist/tokens.css +146 -0
  37. package/dist/vue.mjs +113 -0
  38. package/package.json +52 -3
package/dist/vue.mjs ADDED
@@ -0,0 +1,113 @@
1
+ import { defineComponent, provide, watch, onMounted, onUnmounted, inject, ref, computed, getCurrentInstance } from 'vue';
2
+ import { DEFAULT_CSS_VAR_PREFIX, applyCSSVar, createCSSVarScope } from './css-var.mjs';
3
+ import { getDesignToken } from './get-design-token.mjs';
4
+ import { mergeThemeConfig } from './merge-theme.mjs';
5
+
6
+ const ThemeContextKey = Symbol("apollo-theme");
7
+ function createContext(config, fallback = false) {
8
+ const cfg = ref(config);
9
+ const systemAppearance = ref("light");
10
+ const token = computed(() => getDesignToken(cfg.value, systemAppearance.value));
11
+ const sourceActive = computed(() => !fallback || Object.keys(cfg.value).length > 0);
12
+ if (!fallback && getCurrentInstance()) {
13
+ let stopMode;
14
+ onMounted(() => {
15
+ stopMode = watch(
16
+ () => cfg.value.mode,
17
+ (mode, _previous, cleanup) => {
18
+ if (mode !== "system" || typeof window.matchMedia !== "function") return;
19
+ const media = window.matchMedia("(prefers-color-scheme: dark)");
20
+ const update = () => {
21
+ systemAppearance.value = media.matches ? "dark" : "light";
22
+ };
23
+ update();
24
+ media.addEventListener("change", update);
25
+ cleanup(() => media.removeEventListener("change", update));
26
+ },
27
+ { immediate: true, flush: "sync" }
28
+ );
29
+ });
30
+ onUnmounted(() => stopMode?.());
31
+ }
32
+ return { config: cfg, token, sourceActive };
33
+ }
34
+ function createThemeContext(config) {
35
+ return createContext(config);
36
+ }
37
+ const appContexts = /* @__PURE__ */ new WeakMap();
38
+ function getDefaultContext() {
39
+ const app = getCurrentInstance()?.appContext;
40
+ if (!app) return createContext({}, true);
41
+ let context = appContexts.get(app);
42
+ if (!context) {
43
+ context = createContext({}, true);
44
+ appContexts.set(app, context);
45
+ }
46
+ return context;
47
+ }
48
+ function useTheme() {
49
+ return inject(ThemeContextKey, getDefaultContext, true);
50
+ }
51
+ function useToken() {
52
+ return useTheme().token;
53
+ }
54
+ function injectTokenCssVar(el, token, prefix = DEFAULT_CSS_VAR_PREFIX) {
55
+ applyCSSVar(el, token, prefix);
56
+ }
57
+ function copyConfig(config) {
58
+ return {
59
+ ...config,
60
+ ...config.token ? { token: { ...config.token } } : {},
61
+ ...config.components ? {
62
+ components: Object.fromEntries(
63
+ Object.entries(config.components).map(([name, tokens]) => [name, { ...tokens }])
64
+ )
65
+ } : {},
66
+ ...Array.isArray(config.algorithm) ? { algorithm: [...config.algorithm] } : {}
67
+ };
68
+ }
69
+ const ThemeProvider = /* @__PURE__ */ defineComponent({
70
+ name: "AThemeProvider",
71
+ inheritAttrs: false,
72
+ props: {
73
+ theme: { type: Object, default: () => ({}) },
74
+ injectCssVar: { type: Boolean, default: false },
75
+ target: { type: Object, default: void 0 }
76
+ },
77
+ slots: Object,
78
+ setup(props, { slots }) {
79
+ const parent = useTheme();
80
+ const parentConfig = () => props.theme.inherit !== true || parent.sourceActive?.value === false ? void 0 : parent.config.value;
81
+ const ctx = createThemeContext(copyConfig(mergeThemeConfig(parentConfig(), props.theme) ?? {}));
82
+ provide(ThemeContextKey, ctx);
83
+ watch(
84
+ [() => props.theme, parentConfig],
85
+ ([next, inherited]) => {
86
+ ctx.config.value = copyConfig(mergeThemeConfig(inherited, next) ?? {});
87
+ },
88
+ { deep: true }
89
+ );
90
+ let stopInjection;
91
+ onMounted(() => {
92
+ stopInjection = watch(
93
+ [
94
+ () => props.injectCssVar,
95
+ () => props.target,
96
+ () => ctx.config.value.cssVarPrefix ?? DEFAULT_CSS_VAR_PREFIX,
97
+ ctx.token
98
+ ],
99
+ ([enabled, target, prefix, token], _previous, onCleanup) => {
100
+ if (!enabled) return;
101
+ const scope = createCSSVarScope(target ?? document.documentElement, prefix);
102
+ scope.apply(token);
103
+ onCleanup(() => scope.remove());
104
+ },
105
+ { immediate: true, flush: "post" }
106
+ );
107
+ });
108
+ onUnmounted(() => stopInjection?.());
109
+ return () => slots.default?.();
110
+ }
111
+ });
112
+
113
+ export { ThemeContextKey, ThemeProvider, createThemeContext, injectTokenCssVar, useTheme, useToken };
package/package.json CHANGED
@@ -1,6 +1,55 @@
1
1
  {
2
2
  "name": "@apollo-design/theme",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.9",
4
+ "description": "Token Runtime:Seed → Map → Alias → Component 的完整派生链,以及 Token → CSS 变量的注入。",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": [
8
+ "**/*.css"
9
+ ],
10
+ "main": "./dist/index.mjs",
11
+ "module": "./dist/index.mjs",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.mjs"
17
+ },
18
+ "./tokens.css": "./dist/tokens.css",
19
+ "./presets/default": {
20
+ "types": "./dist/presets/default.d.ts",
21
+ "import": "./dist/presets/default.mjs"
22
+ },
23
+ "./presets/mono": {
24
+ "types": "./dist/presets/mono.d.ts",
25
+ "import": "./dist/presets/mono.mjs"
26
+ },
27
+ "./presets/material3": {
28
+ "types": "./dist/presets/material3.d.ts",
29
+ "import": "./dist/presets/material3.mjs"
30
+ },
31
+ "./presets/default.css": "./dist/presets/default.css",
32
+ "./presets/mono.css": "./dist/presets/mono.css",
33
+ "./presets/material3.css": "./dist/presets/material3.css",
34
+ "./package.json": "./package.json"
35
+ },
36
+ "files": [
37
+ "dist"
38
+ ],
39
+ "dependencies": {
40
+ "@apollo-design/utils": "0.1.9"
41
+ },
42
+ "peerDependencies": {
43
+ "vue": "^3.5.42"
44
+ },
45
+ "devDependencies": {
46
+ "@apollo-design/test-utils": "0.1.9",
47
+ "@ant-design/colors": "^8.0.1",
48
+ "@ant-design/fast-color": "^3.0.1"
49
+ },
50
+ "scripts": {
51
+ "build": "unbuild",
52
+ "test": "vitest run",
53
+ "lint": "vue-tsc --noEmit"
54
+ }
6
55
  }