@aloudata/aloudata-design 3.0.0-beta.15 → 3.0.0-beta.16

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 (45) hide show
  1. package/dist/Drawer/index.js +49 -44
  2. package/dist/Drawer/index.js.map +1 -1
  3. package/dist/Dropdown/index.js +4 -0
  4. package/dist/Dropdown/index.js.map +1 -1
  5. package/dist/Form/index.js +16 -3
  6. package/dist/Form/index.js.map +1 -1
  7. package/dist/Layout/index.js +1 -1
  8. package/dist/Layout/index.js.map +1 -1
  9. package/dist/Modal/index.js +48 -43
  10. package/dist/Modal/index.js.map +1 -1
  11. package/dist/Popconfirm/index.js +6 -1
  12. package/dist/Popconfirm/index.js.map +1 -1
  13. package/dist/Popover/index.js +3 -2
  14. package/dist/Popover/index.js.map +1 -1
  15. package/dist/Tooltip/index.js +5 -3
  16. package/dist/Tooltip/index.js.map +1 -1
  17. package/dist/Tour/index.js +48 -38
  18. package/dist/Tour/index.js.map +1 -1
  19. package/dist/_utils/floatingLayer.d.ts +15 -0
  20. package/dist/_utils/floatingLayer.js +30 -0
  21. package/dist/_utils/floatingLayer.js.map +1 -0
  22. package/dist/aloudata-design.css +1 -1
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.js +5 -1
  25. package/dist/theme/createTheme.d.ts +2 -0
  26. package/dist/theme/createTheme.js +46 -0
  27. package/dist/theme/createTheme.js.map +1 -0
  28. package/dist/theme/defaultTheme.d.ts +2 -0
  29. package/dist/theme/defaultTheme.js +19 -0
  30. package/dist/theme/defaultTheme.js.map +1 -0
  31. package/dist/theme/index.d.ts +5 -0
  32. package/dist/theme/index.js +4 -0
  33. package/dist/theme/initAldTheme.d.ts +2 -0
  34. package/dist/theme/initAldTheme.js +26 -0
  35. package/dist/theme/initAldTheme.js.map +1 -0
  36. package/dist/theme/themeToCssVars.d.ts +2 -0
  37. package/dist/theme/themeToCssVars.js +144 -0
  38. package/dist/theme/themeToCssVars.js.map +1 -0
  39. package/dist/theme/tokenMap.d.ts +5 -0
  40. package/dist/theme/tokenMap.js +12 -0
  41. package/dist/theme/tokenMap.js.map +1 -0
  42. package/dist/theme/types.d.ts +20 -0
  43. package/dist/theme/types.js +2 -0
  44. package/dist/theme.d.ts +2 -0
  45. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -38,6 +38,8 @@ export { default as ConfigProvider } from './ConfigProvider.js';
38
38
  export { EUserType } from './ConfigProvider/getUserList.js';
39
39
  export type { IUserGroup } from './ConfigProvider/getUserList.js';
40
40
  export type { SizeType } from './ConfigProvider/sizeContext.js';
41
+ export { createTheme, defaultTheme, initAldTheme, themeToCssVars, } from './theme.js';
42
+ export type { AldThemeConfig, AldThemeCssVars, AldThemeToken, ResolvedAldTheme, } from './theme.js';
41
43
  export { default as DataPreviewTable } from './DataPreviewTable.js';
42
44
  export type { ITableProps as DataPreviewTableProps, DataPreviewTableRef, PreviewColumn, TValue as DataPreviewTableValue, } from './DataPreviewTable/interface.js';
43
45
  export { default as DatePicker } from './DatePicker.js';
package/dist/index.js CHANGED
@@ -28,6 +28,10 @@ import AldCustomConfigProvider from "./ConfigProvider/index.js";
28
28
  import Select_default from "./Select/index.js";
29
29
  import InputNumber from "./InputNumber/index.js";
30
30
  import ColorPicker from "./ColorPicker/index.js";
31
+ import { defaultTheme } from "./theme/defaultTheme.js";
32
+ import { createTheme } from "./theme/createTheme.js";
33
+ import { themeToCssVars } from "./theme/themeToCssVars.js";
34
+ import { initAldTheme } from "./theme/initAldTheme.js";
31
35
  import CustomSpin from "./Spin/index.js";
32
36
  import Result from "./Result/index.js";
33
37
  import DataPreviewTable_default from "./DataPreviewTable/index.js";
@@ -71,4 +75,4 @@ import notification from "./notification/index.js";
71
75
  import AMenu from "./AMenu/index.js";
72
76
  import Tour from "./Tour/index.js";
73
77
  import datePickerLocaleZhCN from "rc-picker/es/locale/zh_CN";
74
- export { AMenu, AProgress, Select_default as AldSelect, Alert, AldApp as App, Avatar, Badge, Breadcrumb, Button_default as Button, Card, Carousel, Checkbox, Col, Collapse, ColorPicker, AldCustomConfigProvider as ConfigProvider, DataPreviewTable_default as DataPreviewTable, DatePicker, DisplayLogicTree, Divider, Drawer, Dropdown, ELogicType, EMemberPicker, ENodeType, EUserType, Empty, Form, HighlightText, IconButton, Input, InputNumber, InputSearch, Layout, List, LogicTree, MemberSelector as MemberPicker, Menu, Modal, OverflowCount, Pagination, Popconfirm, Popover, Progress_default as Progress, Radio, RenameInput, Result, Row, ScrollArea_default as ScrollArea, Select_default as Select, Skeleton, Slider, Space, CustomSpin as Spin, StatusLight, Steps, Switch, Table_default as Table, Tabs, Tag, TextLink, Tooltip, Tour, Tree, Typography, Upload, User, Watermark, addLogicNode, addRecordNode, changeRecordData, datePickerLocaleZhCN, getInitialLogicNode, localeValues as localeEnUS, localeValues$1 as localeZhCN, logicTreeIterator, message, notification, removeNode };
78
+ export { AMenu, AProgress, Select_default as AldSelect, Alert, AldApp as App, Avatar, Badge, Breadcrumb, Button_default as Button, Card, Carousel, Checkbox, Col, Collapse, ColorPicker, AldCustomConfigProvider as ConfigProvider, DataPreviewTable_default as DataPreviewTable, DatePicker, DisplayLogicTree, Divider, Drawer, Dropdown, ELogicType, EMemberPicker, ENodeType, EUserType, Empty, Form, HighlightText, IconButton, Input, InputNumber, InputSearch, Layout, List, LogicTree, MemberSelector as MemberPicker, Menu, Modal, OverflowCount, Pagination, Popconfirm, Popover, Progress_default as Progress, Radio, RenameInput, Result, Row, ScrollArea_default as ScrollArea, Select_default as Select, Skeleton, Slider, Space, CustomSpin as Spin, StatusLight, Steps, Switch, Table_default as Table, Tabs, Tag, TextLink, Tooltip, Tour, Tree, Typography, Upload, User, Watermark, addLogicNode, addRecordNode, changeRecordData, createTheme, datePickerLocaleZhCN, defaultTheme, getInitialLogicNode, initAldTheme, localeValues as localeEnUS, localeValues$1 as localeZhCN, logicTreeIterator, message, notification, removeNode, themeToCssVars };
@@ -0,0 +1,2 @@
1
+ import { AldThemeConfig, ResolvedAldTheme } from './types.js';
2
+ export declare function createTheme(config?: AldThemeConfig): ResolvedAldTheme;
@@ -0,0 +1,46 @@
1
+ import { defaultTheme } from "./defaultTheme.js";
2
+ //#region src/theme/createTheme.ts
3
+ var colorTokenKeys = [
4
+ "colorPrimary",
5
+ "colorSuccess",
6
+ "colorWarning",
7
+ "colorError",
8
+ "colorInfo",
9
+ "colorTextBase",
10
+ "colorBgBase",
11
+ "colorBorderBase"
12
+ ];
13
+ function normalizeThemeId(id) {
14
+ if (!id) return defaultTheme.id;
15
+ return /^[A-Za-z0-9_-]+$/.test(id) ? id : "tenant-theme";
16
+ }
17
+ function isHexColor(value) {
18
+ return typeof value === "string" && /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(value);
19
+ }
20
+ function isSafeRadius(value) {
21
+ if (typeof value === "number") return Number.isFinite(value) && value >= 0;
22
+ return typeof value === "string" && /^\d+(\.\d+)?(px|rem|em|%)$/.test(value.trim());
23
+ }
24
+ function sanitizeToken(token) {
25
+ const next = {};
26
+ for (const key of colorTokenKeys) {
27
+ const value = token?.[key];
28
+ if (isHexColor(value)) next[key] = value;
29
+ }
30
+ const borderRadius = token?.borderRadius;
31
+ if (isSafeRadius(borderRadius)) next.borderRadius = borderRadius;
32
+ return next;
33
+ }
34
+ function createTheme(config = {}) {
35
+ return {
36
+ id: normalizeThemeId(config.id),
37
+ token: {
38
+ ...defaultTheme.token,
39
+ ...sanitizeToken(config.token)
40
+ }
41
+ };
42
+ }
43
+ //#endregion
44
+ export { createTheme };
45
+
46
+ //# sourceMappingURL=createTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTheme.js","names":[],"sources":["../../src/theme/createTheme.ts"],"sourcesContent":["import { defaultTheme } from './defaultTheme';\nimport type { AldThemeConfig, AldThemeToken, ResolvedAldTheme } from './types';\n\nconst colorTokenKeys: Array<\n keyof Pick<\n AldThemeToken,\n | 'colorPrimary'\n | 'colorSuccess'\n | 'colorWarning'\n | 'colorError'\n | 'colorInfo'\n | 'colorTextBase'\n | 'colorBgBase'\n | 'colorBorderBase'\n >\n> = [\n 'colorPrimary',\n 'colorSuccess',\n 'colorWarning',\n 'colorError',\n 'colorInfo',\n 'colorTextBase',\n 'colorBgBase',\n 'colorBorderBase',\n];\n\nfunction normalizeThemeId(id?: string) {\n if (!id) return defaultTheme.id;\n return /^[A-Za-z0-9_-]+$/.test(id) ? id : 'tenant-theme';\n}\n\nfunction isHexColor(value: unknown): value is string {\n return (\n typeof value === 'string' && /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(value)\n );\n}\n\nfunction isSafeRadius(value: unknown): value is number | string {\n if (typeof value === 'number') return Number.isFinite(value) && value >= 0;\n return (\n typeof value === 'string' && /^\\d+(\\.\\d+)?(px|rem|em|%)$/.test(value.trim())\n );\n}\n\nfunction sanitizeToken(token: AldThemeConfig['token']): AldThemeToken {\n const next: AldThemeToken = {};\n\n for (const key of colorTokenKeys) {\n const value = token?.[key];\n if (isHexColor(value)) {\n next[key] = value;\n }\n }\n\n const borderRadius = token?.borderRadius;\n if (isSafeRadius(borderRadius)) {\n next.borderRadius = borderRadius;\n }\n\n return next;\n}\n\nexport function createTheme(config: AldThemeConfig = {}): ResolvedAldTheme {\n return {\n id: normalizeThemeId(config.id),\n token: {\n ...defaultTheme.token,\n ...sanitizeToken(config.token),\n },\n };\n}\n"],"mappings":";;AAGA,IAAM,iBAYF;CACF;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAS,iBAAiB,IAAa;AACrC,KAAI,CAAC,GAAI,QAAO,aAAa;AAC7B,QAAO,mBAAmB,KAAK,GAAG,GAAG,KAAK;;AAG5C,SAAS,WAAW,OAAiC;AACnD,QACE,OAAO,UAAU,YAAY,gCAAgC,KAAK,MAAM;;AAI5E,SAAS,aAAa,OAA0C;AAC9D,KAAI,OAAO,UAAU,SAAU,QAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AACzE,QACE,OAAO,UAAU,YAAY,6BAA6B,KAAK,MAAM,MAAM,CAAC;;AAIhF,SAAS,cAAc,OAA+C;CACpE,MAAM,OAAsB,EAAE;AAE9B,MAAK,MAAM,OAAO,gBAAgB;EAChC,MAAM,QAAQ,QAAQ;AACtB,MAAI,WAAW,MAAM,CACnB,MAAK,OAAO;;CAIhB,MAAM,eAAe,OAAO;AAC5B,KAAI,aAAa,aAAa,CAC5B,MAAK,eAAe;AAGtB,QAAO;;AAGT,SAAgB,YAAY,SAAyB,EAAE,EAAoB;AACzE,QAAO;EACL,IAAI,iBAAiB,OAAO,GAAG;EAC/B,OAAO;GACL,GAAG,aAAa;GAChB,GAAG,cAAc,OAAO,MAAM;GAC/B;EACF"}
@@ -0,0 +1,2 @@
1
+ import { ResolvedAldTheme } from './types.js';
2
+ export declare const defaultTheme: ResolvedAldTheme;
@@ -0,0 +1,19 @@
1
+ //#region src/theme/defaultTheme.ts
2
+ var defaultTheme = {
3
+ id: "default",
4
+ token: {
5
+ colorPrimary: "#3062D4",
6
+ colorSuccess: "#1D7C4D",
7
+ colorWarning: "#F59638",
8
+ colorError: "#CF3F3F",
9
+ colorInfo: "#3062D4",
10
+ colorTextBase: "#272E35",
11
+ colorBgBase: "#FFFFFF",
12
+ colorBorderBase: "#EAEDF0",
13
+ borderRadius: 6
14
+ }
15
+ };
16
+ //#endregion
17
+ export { defaultTheme };
18
+
19
+ //# sourceMappingURL=defaultTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultTheme.js","names":[],"sources":["../../src/theme/defaultTheme.ts"],"sourcesContent":["import type { ResolvedAldTheme } from './types';\n\nexport const defaultTheme: ResolvedAldTheme = {\n id: 'default',\n token: {\n colorPrimary: '#3062D4',\n colorSuccess: '#1D7C4D',\n colorWarning: '#F59638',\n colorError: '#CF3F3F',\n colorInfo: '#3062D4',\n colorTextBase: '#272E35',\n colorBgBase: '#FFFFFF',\n colorBorderBase: '#EAEDF0',\n borderRadius: 6,\n },\n};\n"],"mappings":";AAEA,IAAa,eAAiC;CAC5C,IAAI;CACJ,OAAO;EACL,cAAc;EACd,cAAc;EACd,cAAc;EACd,YAAY;EACZ,WAAW;EACX,eAAe;EACf,aAAa;EACb,iBAAiB;EACjB,cAAc;EACf;CACF"}
@@ -0,0 +1,5 @@
1
+ export { createTheme } from './createTheme.js';
2
+ export { defaultTheme } from './defaultTheme.js';
3
+ export { initAldTheme } from './initAldTheme.js';
4
+ export { themeToCssVars } from './themeToCssVars.js';
5
+ export type { AldThemeConfig, AldThemeCssVars, AldThemeToken, ResolvedAldTheme, } from './types.js';
@@ -0,0 +1,4 @@
1
+ import "./defaultTheme.js";
2
+ import "./createTheme.js";
3
+ import "./themeToCssVars.js";
4
+ import "./initAldTheme.js";
@@ -0,0 +1,2 @@
1
+ import { AldThemeConfig, ResolvedAldTheme } from './types.js';
2
+ export declare function initAldTheme(config: AldThemeConfig | ResolvedAldTheme): void;
@@ -0,0 +1,26 @@
1
+ import { createTheme } from "./createTheme.js";
2
+ import { themeDataAttribute, themeStyleElementId } from "./tokenMap.js";
3
+ import { themeToCssVars } from "./themeToCssVars.js";
4
+ //#region src/theme/initAldTheme.ts
5
+ function escapeCssString(value) {
6
+ return value.replace(/\\/g, "\\\\").replace(/"/g, "\\\"");
7
+ }
8
+ function createThemeCss(theme) {
9
+ const vars = themeToCssVars(theme);
10
+ const body = Object.entries(vars).map(([name, value]) => ` ${name}: ${value};`).join("\n");
11
+ return `:root[${themeDataAttribute}="${escapeCssString(theme.id)}"] {\n${body}\n}\n`;
12
+ }
13
+ function initAldTheme(config) {
14
+ if (typeof document === "undefined") return;
15
+ const theme = createTheme(config);
16
+ const style = document.createElement("style");
17
+ style.id = themeStyleElementId;
18
+ style.textContent = createThemeCss(theme);
19
+ document.getElementById(themeStyleElementId)?.remove();
20
+ document.head.appendChild(style);
21
+ document.documentElement.setAttribute(themeDataAttribute, theme.id);
22
+ }
23
+ //#endregion
24
+ export { initAldTheme };
25
+
26
+ //# sourceMappingURL=initAldTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initAldTheme.js","names":[],"sources":["../../src/theme/initAldTheme.ts"],"sourcesContent":["import { createTheme } from './createTheme';\nimport { themeDataAttribute, themeStyleElementId } from './tokenMap';\nimport { themeToCssVars } from './themeToCssVars';\nimport type { AldThemeConfig, ResolvedAldTheme } from './types';\n\nfunction escapeCssString(value: string) {\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n}\n\nfunction createThemeCss(theme: ResolvedAldTheme) {\n const vars = themeToCssVars(theme);\n const body = Object.entries(vars)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n\n return `:root[${themeDataAttribute}=\"${escapeCssString(\n theme.id,\n )}\"] {\\n${body}\\n}\\n`;\n}\n\nexport function initAldTheme(config: AldThemeConfig | ResolvedAldTheme): void {\n if (typeof document === 'undefined') return;\n\n const theme = createTheme(config);\n const style = document.createElement('style');\n\n style.id = themeStyleElementId;\n style.textContent = createThemeCss(theme);\n\n document.getElementById(themeStyleElementId)?.remove();\n document.head.appendChild(style);\n document.documentElement.setAttribute(themeDataAttribute, theme.id);\n}\n"],"mappings":";;;;AAKA,SAAS,gBAAgB,OAAe;AACtC,QAAO,MAAM,QAAQ,OAAO,OAAO,CAAC,QAAQ,MAAM,OAAM;;AAG1D,SAAS,eAAe,OAAyB;CAC/C,MAAM,OAAO,eAAe,MAAM;CAClC,MAAM,OAAO,OAAO,QAAQ,KAAK,CAC9B,KAAK,CAAC,MAAM,WAAW,KAAK,KAAK,IAAI,MAAM,GAAG,CAC9C,KAAK,KAAK;AAEb,QAAO,SAAS,mBAAmB,IAAI,gBACrC,MAAM,GACP,CAAC,QAAQ,KAAK;;AAGjB,SAAgB,aAAa,QAAiD;AAC5E,KAAI,OAAO,aAAa,YAAa;CAErC,MAAM,QAAQ,YAAY,OAAO;CACjC,MAAM,QAAQ,SAAS,cAAc,QAAQ;AAE7C,OAAM,KAAK;AACX,OAAM,cAAc,eAAe,MAAM;AAEzC,UAAS,eAAe,oBAAoB,EAAE,QAAQ;AACtD,UAAS,KAAK,YAAY,MAAM;AAChC,UAAS,gBAAgB,aAAa,oBAAoB,MAAM,GAAG"}
@@ -0,0 +1,2 @@
1
+ import { AldThemeCssVars, ResolvedAldTheme } from './types.js';
2
+ export declare function themeToCssVars(theme: ResolvedAldTheme): AldThemeCssVars;
@@ -0,0 +1,144 @@
1
+ import { assignVars, radiusVarNames } from "./tokenMap.js";
2
+ //#region src/theme/themeToCssVars.ts
3
+ var tonalStops = {
4
+ 950: .68,
5
+ 900: .52,
6
+ 800: .36,
7
+ 700: .18,
8
+ 600: 0,
9
+ 500: .2,
10
+ 400: .38,
11
+ 300: .56,
12
+ 200: .72,
13
+ 100: .84,
14
+ 50: .92,
15
+ 25: .96,
16
+ 0: .98
17
+ };
18
+ function clampChannel(value) {
19
+ return Math.max(0, Math.min(255, Math.round(value)));
20
+ }
21
+ function parseHexColor(color) {
22
+ const match = color.trim().match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);
23
+ if (!match) return null;
24
+ const hex = match[1].length === 3 ? match[1].split("").map((char) => char + char).join("") : match[1];
25
+ return [
26
+ Number.parseInt(hex.slice(0, 2), 16),
27
+ Number.parseInt(hex.slice(2, 4), 16),
28
+ Number.parseInt(hex.slice(4, 6), 16)
29
+ ];
30
+ }
31
+ function rgbToHex(rgb) {
32
+ return `#${rgb.map((channel) => clampChannel(channel).toString(16).padStart(2, "0")).join("")}`;
33
+ }
34
+ function normalizeColor(color) {
35
+ const rgb = parseHexColor(color);
36
+ return rgb ? rgbToHex(rgb) : color.trim();
37
+ }
38
+ function mix(from, to, amount) {
39
+ return [
40
+ from[0] + (to[0] - from[0]) * amount,
41
+ from[1] + (to[1] - from[1]) * amount,
42
+ from[2] + (to[2] - from[2]) * amount
43
+ ];
44
+ }
45
+ function createPaletteVars(prefix, baseColor, globalPrefix, globalZeroName) {
46
+ const baseRgb = parseHexColor(baseColor);
47
+ const base = normalizeColor(baseColor);
48
+ if (!baseRgb) return { [`--semantic-${prefix}-600`]: base };
49
+ const vars = {};
50
+ for (const [stop, amount] of Object.entries(tonalStops)) {
51
+ const target = Number(stop) > 600 ? [
52
+ 0,
53
+ 0,
54
+ 0
55
+ ] : [
56
+ 255,
57
+ 255,
58
+ 255
59
+ ];
60
+ const value = stop === "600" ? base : rgbToHex(mix(baseRgb, target, amount));
61
+ vars[`--semantic-${prefix}-${stop}`] = value;
62
+ if (globalPrefix) vars[`--${globalPrefix}-${stop}`] = value;
63
+ }
64
+ if (globalZeroName && vars[`--semantic-${prefix}-0`]) vars[globalZeroName] = vars[`--semantic-${prefix}-0`];
65
+ return vars;
66
+ }
67
+ function radiusToCssValue(value) {
68
+ return typeof value === "number" ? `${value}px` : value;
69
+ }
70
+ function themeToCssVars(theme) {
71
+ const { token } = theme;
72
+ const vars = {};
73
+ assignVars(vars, createPaletteVars("brand", token.colorPrimary, "global-blue", "--global-blue-blue-0"));
74
+ assignVars(vars, createPaletteVars("informative", token.colorInfo));
75
+ assignVars(vars, createPaletteVars("positive", token.colorSuccess, "global-green", "--global-green-green-0"));
76
+ assignVars(vars, createPaletteVars("warning", token.colorWarning, "global-orange", "--global-orange-orange-0"));
77
+ assignVars(vars, createPaletteVars("negative", token.colorError, "global-red"));
78
+ const textBase = normalizeColor(token.colorTextBase);
79
+ const bgBase = normalizeColor(token.colorBgBase);
80
+ const borderBase = normalizeColor(token.colorBorderBase);
81
+ const radius = radiusToCssValue(token.borderRadius);
82
+ assignVars(vars, {
83
+ "--content-primary": textBase,
84
+ "--alias-colors-text-strong": textBase,
85
+ "--alias-colors-text-default": textBase,
86
+ "--background-default": bgBase,
87
+ "--background-neutral-surface": bgBase,
88
+ "--border-default": borderBase,
89
+ "--border-default-alpha": borderBase,
90
+ "--action-primary-normal": "var(--semantic-brand-600)",
91
+ "--action-primary-hover": "var(--semantic-brand-800)",
92
+ "--action-primary-active": "var(--semantic-brand-900)",
93
+ "--action-primary-selected": "var(--semantic-brand-800)",
94
+ "--action-primary-subtle-normal": "var(--semantic-brand-50)",
95
+ "--action-primary-subtle-hover": "var(--semantic-brand-100)",
96
+ "--action-primary-subtle-active": "var(--semantic-brand-300)",
97
+ "--action-primary-subtle-selected": "var(--semantic-brand-100)",
98
+ "--content-brand-primary": "var(--semantic-brand-900)",
99
+ "--content-brand-secondary": "var(--semantic-brand-600)",
100
+ "--alias-colors-text-selected": "var(--semantic-brand-900)",
101
+ "--alias-colors-text-brand": "var(--semantic-brand-600)",
102
+ "--alias-colors-text-danger": "var(--semantic-negative-600)",
103
+ "--alias-colors-text-warning": "var(--semantic-warning-600)",
104
+ "--alias-colors-text-success": "var(--semantic-positive-600)",
105
+ "--alias-colors-text-information": "var(--semantic-informative-600)",
106
+ "--alias-colors-icon-selected": "var(--semantic-brand-600)",
107
+ "--alias-colors-icon-brand": "var(--semantic-brand-600)",
108
+ "--alias-colors-icon-danger": "var(--semantic-negative-600)",
109
+ "--alias-colors-icon-warning": "var(--semantic-warning-600)",
110
+ "--alias-colors-icon-success": "var(--semantic-positive-600)",
111
+ "--alias-colors-icon-information": "var(--semantic-informative-600)",
112
+ "--border-brand-strong": "var(--semantic-brand-600)",
113
+ "--border-brand-subtle": "var(--semantic-brand-300)",
114
+ "--alias-colors-border-selected": "var(--semantic-brand-600)",
115
+ "--alias-colors-border-brand": "var(--semantic-brand-600)",
116
+ "--alias-colors-border-danger": "var(--semantic-negative-600)",
117
+ "--alias-colors-border-warning": "var(--semantic-warning-600)",
118
+ "--alias-colors-border-success": "var(--semantic-positive-600)",
119
+ "--alias-colors-border-information": "var(--semantic-informative-600)",
120
+ "--alias-colors-bg-selected-default": "var(--semantic-brand-100)",
121
+ "--alias-colors-bg-selected-hover": "var(--semantic-brand-100)",
122
+ "--alias-colors-bg-selected-press": "var(--semantic-brand-300)",
123
+ "--alias-colors-bg-selected-strong-default": "var(--semantic-brand-600)",
124
+ "--alias-colors-bg-selected-strong-hover": "var(--semantic-brand-600)",
125
+ "--alias-colors-bg-selected-strong-press": "var(--semantic-brand-900)",
126
+ "--background-brand-strong": "var(--semantic-brand-600)",
127
+ "--background-brand-muted": "var(--semantic-brand-200)",
128
+ "--background-brand-subtle": "var(--semantic-brand-25)",
129
+ "--semantic-informative-informative-0": "var(--semantic-informative-0)",
130
+ "--interaction-default-normal": "var(--semantic-brand-600)",
131
+ "--interaction-default-hover": "var(--semantic-brand-800)",
132
+ "--interaction-default-active": "var(--semantic-brand-900)",
133
+ "--interaction-border-normal": "var(--semantic-brand-400)",
134
+ "--interaction-border-hover": "var(--semantic-brand-500)",
135
+ "--interaction-border-active": "var(--semantic-brand-700)",
136
+ "--interaction-border-selected": "var(--semantic-brand-600)"
137
+ });
138
+ for (const varName of radiusVarNames) vars[varName] = radius;
139
+ return vars;
140
+ }
141
+ //#endregion
142
+ export { themeToCssVars };
143
+
144
+ //# sourceMappingURL=themeToCssVars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeToCssVars.js","names":[],"sources":["../../src/theme/themeToCssVars.ts"],"sourcesContent":["import { assignVars, radiusVarNames } from './tokenMap';\nimport type { AldThemeCssVars, ResolvedAldTheme } from './types';\n\ntype Rgb = [number, number, number];\n\nconst tonalStops = {\n 950: 0.68,\n 900: 0.52,\n 800: 0.36,\n 700: 0.18,\n 600: 0,\n 500: 0.2,\n 400: 0.38,\n 300: 0.56,\n 200: 0.72,\n 100: 0.84,\n 50: 0.92,\n 25: 0.96,\n 0: 0.98,\n} as const;\n\nfunction clampChannel(value: number) {\n return Math.max(0, Math.min(255, Math.round(value)));\n}\n\nfunction parseHexColor(color: string): Rgb | null {\n const normalized = color.trim();\n const match = normalized.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);\n if (!match) return null;\n const hex =\n match[1].length === 3\n ? match[1]\n .split('')\n .map((char) => char + char)\n .join('')\n : match[1];\n return [\n Number.parseInt(hex.slice(0, 2), 16),\n Number.parseInt(hex.slice(2, 4), 16),\n Number.parseInt(hex.slice(4, 6), 16),\n ];\n}\n\nfunction rgbToHex(rgb: Rgb) {\n return `#${rgb\n .map((channel) => clampChannel(channel).toString(16).padStart(2, '0'))\n .join('')}`;\n}\n\nfunction normalizeColor(color: string) {\n const rgb = parseHexColor(color);\n return rgb ? rgbToHex(rgb) : color.trim();\n}\n\nfunction mix(from: Rgb, to: Rgb, amount: number): Rgb {\n return [\n from[0] + (to[0] - from[0]) * amount,\n from[1] + (to[1] - from[1]) * amount,\n from[2] + (to[2] - from[2]) * amount,\n ];\n}\n\nfunction createPaletteVars(\n prefix: string,\n baseColor: string,\n globalPrefix?: string,\n globalZeroName?: `--${string}`,\n): AldThemeCssVars {\n const baseRgb = parseHexColor(baseColor);\n const base = normalizeColor(baseColor);\n\n if (!baseRgb) {\n return {\n [`--semantic-${prefix}-600`]: base,\n };\n }\n\n const vars: AldThemeCssVars = {};\n for (const [stop, amount] of Object.entries(tonalStops)) {\n const target: Rgb = Number(stop) > 600 ? [0, 0, 0] : [255, 255, 255];\n const value =\n stop === '600' ? base : rgbToHex(mix(baseRgb, target, amount));\n vars[`--semantic-${prefix}-${stop}`] = value;\n if (globalPrefix) {\n vars[`--${globalPrefix}-${stop}`] = value;\n }\n }\n if (globalZeroName && vars[`--semantic-${prefix}-0`]) {\n vars[globalZeroName] = vars[`--semantic-${prefix}-0`];\n }\n return vars;\n}\n\nfunction radiusToCssValue(value: number | string) {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function themeToCssVars(theme: ResolvedAldTheme): AldThemeCssVars {\n const { token } = theme;\n const vars: AldThemeCssVars = {};\n\n assignVars(\n vars,\n createPaletteVars(\n 'brand',\n token.colorPrimary,\n 'global-blue',\n '--global-blue-blue-0',\n ),\n );\n assignVars(vars, createPaletteVars('informative', token.colorInfo));\n assignVars(\n vars,\n createPaletteVars(\n 'positive',\n token.colorSuccess,\n 'global-green',\n '--global-green-green-0',\n ),\n );\n assignVars(\n vars,\n createPaletteVars(\n 'warning',\n token.colorWarning,\n 'global-orange',\n '--global-orange-orange-0',\n ),\n );\n assignVars(\n vars,\n createPaletteVars('negative', token.colorError, 'global-red'),\n );\n\n const textBase = normalizeColor(token.colorTextBase);\n const bgBase = normalizeColor(token.colorBgBase);\n const borderBase = normalizeColor(token.colorBorderBase);\n const radius = radiusToCssValue(token.borderRadius);\n\n assignVars(vars, {\n '--content-primary': textBase,\n '--alias-colors-text-strong': textBase,\n '--alias-colors-text-default': textBase,\n '--background-default': bgBase,\n '--background-neutral-surface': bgBase,\n '--border-default': borderBase,\n '--border-default-alpha': borderBase,\n '--action-primary-normal': 'var(--semantic-brand-600)',\n '--action-primary-hover': 'var(--semantic-brand-800)',\n '--action-primary-active': 'var(--semantic-brand-900)',\n '--action-primary-selected': 'var(--semantic-brand-800)',\n '--action-primary-subtle-normal': 'var(--semantic-brand-50)',\n '--action-primary-subtle-hover': 'var(--semantic-brand-100)',\n '--action-primary-subtle-active': 'var(--semantic-brand-300)',\n '--action-primary-subtle-selected': 'var(--semantic-brand-100)',\n '--content-brand-primary': 'var(--semantic-brand-900)',\n '--content-brand-secondary': 'var(--semantic-brand-600)',\n '--alias-colors-text-selected': 'var(--semantic-brand-900)',\n '--alias-colors-text-brand': 'var(--semantic-brand-600)',\n '--alias-colors-text-danger': 'var(--semantic-negative-600)',\n '--alias-colors-text-warning': 'var(--semantic-warning-600)',\n '--alias-colors-text-success': 'var(--semantic-positive-600)',\n '--alias-colors-text-information': 'var(--semantic-informative-600)',\n '--alias-colors-icon-selected': 'var(--semantic-brand-600)',\n '--alias-colors-icon-brand': 'var(--semantic-brand-600)',\n '--alias-colors-icon-danger': 'var(--semantic-negative-600)',\n '--alias-colors-icon-warning': 'var(--semantic-warning-600)',\n '--alias-colors-icon-success': 'var(--semantic-positive-600)',\n '--alias-colors-icon-information': 'var(--semantic-informative-600)',\n '--border-brand-strong': 'var(--semantic-brand-600)',\n '--border-brand-subtle': 'var(--semantic-brand-300)',\n '--alias-colors-border-selected': 'var(--semantic-brand-600)',\n '--alias-colors-border-brand': 'var(--semantic-brand-600)',\n '--alias-colors-border-danger': 'var(--semantic-negative-600)',\n '--alias-colors-border-warning': 'var(--semantic-warning-600)',\n '--alias-colors-border-success': 'var(--semantic-positive-600)',\n '--alias-colors-border-information': 'var(--semantic-informative-600)',\n '--alias-colors-bg-selected-default': 'var(--semantic-brand-100)',\n '--alias-colors-bg-selected-hover': 'var(--semantic-brand-100)',\n '--alias-colors-bg-selected-press': 'var(--semantic-brand-300)',\n '--alias-colors-bg-selected-strong-default': 'var(--semantic-brand-600)',\n '--alias-colors-bg-selected-strong-hover': 'var(--semantic-brand-600)',\n '--alias-colors-bg-selected-strong-press': 'var(--semantic-brand-900)',\n '--background-brand-strong': 'var(--semantic-brand-600)',\n '--background-brand-muted': 'var(--semantic-brand-200)',\n '--background-brand-subtle': 'var(--semantic-brand-25)',\n '--semantic-informative-informative-0': 'var(--semantic-informative-0)',\n '--interaction-default-normal': 'var(--semantic-brand-600)',\n '--interaction-default-hover': 'var(--semantic-brand-800)',\n '--interaction-default-active': 'var(--semantic-brand-900)',\n '--interaction-border-normal': 'var(--semantic-brand-400)',\n '--interaction-border-hover': 'var(--semantic-brand-500)',\n '--interaction-border-active': 'var(--semantic-brand-700)',\n '--interaction-border-selected': 'var(--semantic-brand-600)',\n });\n\n for (const varName of radiusVarNames) {\n vars[varName] = radius;\n }\n\n return vars;\n}\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { AldThemeCssVars } from './types.js';
2
+ export declare const themeStyleElementId = "ald-theme-runtime";
3
+ export declare const themeDataAttribute = "data-ald-theme";
4
+ export declare const radiusVarNames: readonly ["--alias-radius-75", "--alias-radius-100"];
5
+ export declare function assignVars(target: AldThemeCssVars, vars: AldThemeCssVars): AldThemeCssVars;
@@ -0,0 +1,12 @@
1
+ //#region src/theme/tokenMap.ts
2
+ var themeStyleElementId = "ald-theme-runtime";
3
+ var themeDataAttribute = "data-ald-theme";
4
+ var radiusVarNames = ["--alias-radius-75", "--alias-radius-100"];
5
+ function assignVars(target, vars) {
6
+ Object.assign(target, vars);
7
+ return target;
8
+ }
9
+ //#endregion
10
+ export { assignVars, radiusVarNames, themeDataAttribute, themeStyleElementId };
11
+
12
+ //# sourceMappingURL=tokenMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenMap.js","names":[],"sources":["../../src/theme/tokenMap.ts"],"sourcesContent":["import type { AldThemeCssVars } from './types';\n\nexport const themeStyleElementId = 'ald-theme-runtime';\nexport const themeDataAttribute = 'data-ald-theme';\n\nexport const radiusVarNames = [\n '--alias-radius-75',\n '--alias-radius-100',\n] as const;\n\nexport function assignVars(\n target: AldThemeCssVars,\n vars: AldThemeCssVars,\n): AldThemeCssVars {\n Object.assign(target, vars);\n return target;\n}\n"],"mappings":";AAEA,IAAa,sBAAsB;AACnC,IAAa,qBAAqB;AAElC,IAAa,iBAAiB,CAC5B,qBACA,qBACD;AAED,SAAgB,WACd,QACA,MACiB;AACjB,QAAO,OAAO,QAAQ,KAAK;AAC3B,QAAO"}
@@ -0,0 +1,20 @@
1
+ export interface AldThemeToken {
2
+ colorPrimary?: string;
3
+ colorSuccess?: string;
4
+ colorWarning?: string;
5
+ colorError?: string;
6
+ colorInfo?: string;
7
+ colorTextBase?: string;
8
+ colorBgBase?: string;
9
+ colorBorderBase?: string;
10
+ borderRadius?: number | string;
11
+ }
12
+ export interface AldThemeConfig {
13
+ id?: string;
14
+ token?: AldThemeToken;
15
+ }
16
+ export interface ResolvedAldTheme {
17
+ id: string;
18
+ token: Required<AldThemeToken>;
19
+ }
20
+ export type AldThemeCssVars = Record<`--${string}`, string>;
@@ -0,0 +1,2 @@
1
+ // type-only module stub
2
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './theme/index.js';
2
+ export { default } from './theme/index.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aloudata/aloudata-design",
3
- "version": "3.0.0-beta.15",
3
+ "version": "3.0.0-beta.16",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "sideEffects": [