@aloudata/aloudata-design 3.0.0-beta.9 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AProgress/index.d.ts +1 -1
- package/dist/AProgress/index.js +19 -5
- package/dist/AProgress/index.js.map +1 -1
- package/dist/Alert/index.d.ts +1 -1
- package/dist/Alert/index.js +22 -8
- package/dist/Alert/index.js.map +1 -1
- package/dist/Avatar/component/Avatar/index.d.ts +1 -1
- package/dist/Avatar/component/Avatar/index.js +4 -4
- package/dist/Avatar/component/Avatar/index.js.map +1 -1
- package/dist/Avatar/component/Avatar/type.d.ts +1 -1
- package/dist/Avatar/component/Avatar/type.js +6 -1
- package/dist/Avatar/component/Avatar/type.js.map +1 -1
- package/dist/Avatar/index.js +67 -8
- package/dist/Avatar/index.js.map +1 -1
- package/dist/Badge/index.d.ts +1 -0
- package/dist/Badge/index.js +32 -9
- package/dist/Badge/index.js.map +1 -1
- package/dist/Breadcrumb/index.js +21 -12
- package/dist/Breadcrumb/index.js.map +1 -1
- package/dist/Button/index.d.ts +2 -0
- package/dist/Button/index.js +39 -32
- package/dist/Button/index.js.map +1 -1
- package/dist/Card/index.js +5 -5
- package/dist/Card/index.js.map +1 -1
- package/dist/Checkbox/index.js +5 -12
- package/dist/Checkbox/index.js.map +1 -1
- package/dist/Checkbox/type.d.ts +3 -1
- package/dist/Collapse/index.js +40 -24
- package/dist/Collapse/index.js.map +1 -1
- package/dist/DataPreviewTable/components/Body/Cell.js +5 -4
- package/dist/DataPreviewTable/components/Body/Cell.js.map +1 -1
- package/dist/DataPreviewTable/components/Body/Error.js +1 -1
- package/dist/DataPreviewTable/components/Body/Error.js.map +1 -1
- package/dist/DataPreviewTable/components/Body/index.js +2 -1
- package/dist/DataPreviewTable/components/Body/index.js.map +1 -1
- package/dist/DataPreviewTable/components/DragBar/index.js +1 -1
- package/dist/DataPreviewTable/components/DragBar/index.js.map +1 -1
- package/dist/DataPreviewTable/components/Header/index.js +14 -12
- package/dist/DataPreviewTable/components/Header/index.js.map +1 -1
- package/dist/DataPreviewTable/index.js +5 -6
- package/dist/DataPreviewTable/index.js.map +1 -1
- package/dist/DatePicker/index.d.ts +4 -0
- package/dist/DatePicker/index.js +8 -6
- package/dist/DatePicker/index.js.map +1 -1
- package/dist/Drawer/index.d.ts +1 -0
- package/dist/Drawer/index.js +102 -47
- package/dist/Drawer/index.js.map +1 -1
- package/dist/Dropdown/index.d.ts +5 -0
- package/dist/Dropdown/index.js +155 -34
- package/dist/Dropdown/index.js.map +1 -1
- package/dist/Form/index.d.ts +45 -5
- package/dist/Form/index.js +59 -34
- package/dist/Form/index.js.map +1 -1
- package/dist/HighlightText/index.js +1 -1
- package/dist/HighlightText/index.js.map +1 -1
- package/dist/Input/components/Input/index.d.ts +5 -2
- package/dist/Input/components/Input/index.js +18 -6
- package/dist/Input/components/Input/index.js.map +1 -1
- package/dist/InputNumber/index.js +1 -0
- package/dist/InputNumber/index.js.map +1 -1
- package/dist/InputNumber/type.d.ts +2 -2
- package/dist/InputSearch/index.d.ts +3 -0
- package/dist/InputSearch/index.js +3 -2
- package/dist/InputSearch/index.js.map +1 -1
- package/dist/Layout/index.js +1 -1
- package/dist/Layout/index.js.map +1 -1
- package/dist/LogicTree/DisplayLogicTree.d.ts +1 -1
- package/dist/LogicTree/DisplayLogicTree.js.map +1 -1
- package/dist/LogicTree/components/DisplayLogicItem/index.d.ts +1 -1
- package/dist/LogicTree/components/DisplayLogicItem/index.js +1 -1
- package/dist/LogicTree/components/DisplayLogicItem/index.js.map +1 -1
- package/dist/LogicTree/components/LogicItem/index.js +2 -3
- package/dist/LogicTree/components/LogicItem/index.js.map +1 -1
- package/dist/LogicTree/index.d.ts +1 -1
- package/dist/LogicTree/index.js +26 -10
- package/dist/LogicTree/index.js.map +1 -1
- package/dist/MemberPicker/components/NickLabel.js +1 -1
- package/dist/MemberPicker/components/NickLabel.js.map +1 -1
- package/dist/MemberPicker/components/Panel.js +13 -14
- package/dist/MemberPicker/components/Panel.js.map +1 -1
- package/dist/MemberPicker/index.js +10 -5
- package/dist/MemberPicker/index.js.map +1 -1
- package/dist/Menu/index.d.ts +4 -0
- package/dist/Menu/index.js +35 -13
- package/dist/Menu/index.js.map +1 -1
- package/dist/Modal/index.d.ts +5 -2
- package/dist/Modal/index.js +119 -66
- package/dist/Modal/index.js.map +1 -1
- package/dist/Popconfirm/index.js +6 -1
- package/dist/Popconfirm/index.js.map +1 -1
- package/dist/Popover/index.js +5 -3
- package/dist/Popover/index.js.map +1 -1
- package/dist/Progress/index.d.ts +0 -3
- package/dist/Progress/index.js +0 -3
- package/dist/Progress/index.js.map +1 -1
- package/dist/Radio/components/Radio/index.js +14 -25
- package/dist/Radio/components/Radio/index.js.map +1 -1
- package/dist/RenameInput/index.js +0 -1
- package/dist/RenameInput/index.js.map +1 -1
- package/dist/Select/BaseSelect.js +12 -7
- package/dist/Select/BaseSelect.js.map +1 -1
- package/dist/Select/Selector/MultipleSelector.js +10 -6
- package/dist/Select/Selector/MultipleSelector.js.map +1 -1
- package/dist/Select/Selector/index.d.ts +2 -0
- package/dist/Select/Selector/index.js +1 -1
- package/dist/Select/Selector/index.js.map +1 -1
- package/dist/Select/components/Suffix.js +1 -1
- package/dist/Select/components/Suffix.js.map +1 -1
- package/dist/Select/interface.d.ts +4 -0
- package/dist/Select/utils/getWidthStyle.js.map +1 -1
- package/dist/Steps/index.js +6 -6
- package/dist/Steps/index.js.map +1 -1
- package/dist/Switch/index.js +21 -7
- package/dist/Switch/index.js.map +1 -1
- package/dist/Table/components/Footer/index.js +1 -1
- package/dist/Table/components/Footer/index.js.map +1 -1
- package/dist/Table/hooks/useRowDnd.js +2 -8
- package/dist/Table/hooks/useRowDnd.js.map +1 -1
- package/dist/Table/hooks/useRowSelection.d.ts +1 -1
- package/dist/Table/hooks/useRowSelection.js +7 -9
- package/dist/Table/hooks/useRowSelection.js.map +1 -1
- package/dist/Table/index.js +1 -1
- package/dist/Table/index.js.map +1 -1
- package/dist/Tabs/index.js +37 -30
- package/dist/Tabs/index.js.map +1 -1
- package/dist/Tooltip/index.js +5 -3
- package/dist/Tooltip/index.js.map +1 -1
- package/dist/Tour/index.js +48 -38
- package/dist/Tour/index.js.map +1 -1
- package/dist/Tree/DirectoryTree.d.ts +2 -2
- package/dist/Tree/DirectoryTree.js.map +1 -1
- package/dist/Tree/Tree.d.ts +13 -2
- package/dist/Tree/Tree2.js +86 -8
- package/dist/Tree/Tree2.js.map +1 -1
- package/dist/Tree/utils/composeAllowDrop.d.ts +14 -0
- package/dist/Tree/utils/composeAllowDrop.js +20 -0
- package/dist/Tree/utils/composeAllowDrop.js.map +1 -0
- package/dist/Upload/index.d.ts +15 -2
- package/dist/Upload/index.js +4 -2
- package/dist/Upload/index.js.map +1 -1
- package/dist/_utils/floatingLayer.d.ts +15 -0
- package/dist/_utils/floatingLayer.js +30 -0
- package/dist/_utils/floatingLayer.js.map +1 -0
- package/dist/_utils/storybookArgTypes.d.ts +11 -0
- package/dist/_utils/storybookArgTypes.js +2 -0
- package/dist/aloudata-design.css +1 -1
- package/dist/index.d.ts +15 -6
- package/dist/index.js +8 -3
- package/dist/theme/createTheme.d.ts +2 -0
- package/dist/theme/createTheme.js +46 -0
- package/dist/theme/createTheme.js.map +1 -0
- package/dist/theme/defaultTheme.d.ts +2 -0
- package/dist/theme/defaultTheme.js +19 -0
- package/dist/theme/defaultTheme.js.map +1 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/theme/index.js +4 -0
- package/dist/theme/initAldTheme.d.ts +2 -0
- package/dist/theme/initAldTheme.js +26 -0
- package/dist/theme/initAldTheme.js.map +1 -0
- package/dist/theme/themeToCssVars.d.ts +2 -0
- package/dist/theme/themeToCssVars.js +144 -0
- package/dist/theme/themeToCssVars.js.map +1 -0
- package/dist/theme/tokenMap.d.ts +5 -0
- package/dist/theme/tokenMap.js +12 -0
- package/dist/theme/tokenMap.js.map +1 -0
- package/dist/theme/types.d.ts +20 -0
- package/dist/theme/types.js +2 -0
- package/dist/theme.d.ts +2 -0
- package/package.json +9 -4
- package/dist/_utils/SimpleOverflow.d.ts +0 -14
- package/dist/_utils/SimpleOverflow.js +0 -61
- package/dist/_utils/SimpleOverflow.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,12 @@ export type MenuClickEventHandler = (info: {
|
|
|
5
5
|
}) => void;
|
|
6
6
|
export { default as localeZhCN } from './locale/zh_CN.js';
|
|
7
7
|
export { default as localeEnUS } from './locale/en_US.js';
|
|
8
|
+
/** DatePicker-specific zh_CN locale (rc-picker format) */
|
|
9
|
+
export { default as datePickerLocaleZhCN } from 'rc-picker/es/locale/zh_CN';
|
|
8
10
|
export { default as AProgress } from './AProgress.js';
|
|
11
|
+
export type { AProgressProps } from './AProgress.js';
|
|
12
|
+
export { default as Progress } from './Progress.js';
|
|
13
|
+
export type { IProgressRef, IProps as ProgressProps } from './Progress.js';
|
|
9
14
|
export { default as Alert } from './Alert.js';
|
|
10
15
|
export type { AlertProps } from './Alert.js';
|
|
11
16
|
export { default as App } from './App.js';
|
|
@@ -33,10 +38,12 @@ export { default as ConfigProvider } from './ConfigProvider.js';
|
|
|
33
38
|
export { EUserType } from './ConfigProvider/getUserList.js';
|
|
34
39
|
export type { IUserGroup } from './ConfigProvider/getUserList.js';
|
|
35
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';
|
|
36
43
|
export { default as DataPreviewTable } from './DataPreviewTable.js';
|
|
37
44
|
export type { ITableProps as DataPreviewTableProps, DataPreviewTableRef, PreviewColumn, TValue as DataPreviewTableValue, } from './DataPreviewTable/interface.js';
|
|
38
45
|
export { default as DatePicker } from './DatePicker.js';
|
|
39
|
-
export type { DatePickerProps, RangeValue } from './DatePicker.js';
|
|
46
|
+
export type { DatePickerProps, RangePickerProps, RangeValue, } from './DatePicker.js';
|
|
40
47
|
export { default as Divider } from './Divider.js';
|
|
41
48
|
export type { IDividerProps as DividerProps } from './Divider.js';
|
|
42
49
|
export { default as Drawer } from './Drawer.js';
|
|
@@ -46,11 +53,13 @@ export type { ActionType, IDropdownProps as DropdownProps, PlacementType, } from
|
|
|
46
53
|
export { default as Empty } from './Empty.js';
|
|
47
54
|
export type { IEmptyProps as EmptyProps } from './Empty.js';
|
|
48
55
|
export { default as Form } from './Form.js';
|
|
49
|
-
export type { FormInstance, FormItemProps, FormListFieldData, FormProps, Rule, RuleObject, RuleRender, } from './Form.js';
|
|
56
|
+
export type { FieldData, FormInstance, FormItemProps, FormLabelAlign, FormListFieldData, FormProps, Rule, RuleObject, RuleRender, } from './Form.js';
|
|
50
57
|
export { default as HighlightText } from './HighlightText.js';
|
|
51
58
|
export { default as IconButton } from './IconButton.js';
|
|
52
59
|
export { default as Input } from './Input.js';
|
|
53
60
|
export type { IInputProps as InputProps, InputRef, TSize, TextAreaRef, } from './Input.js';
|
|
61
|
+
/** antd v4 compat: InputStatus */
|
|
62
|
+
export type InputStatus = 'error' | 'warning' | '';
|
|
54
63
|
export { default as InputNumber } from './InputNumber.js';
|
|
55
64
|
export type { IInputNumberProps as InputNumberProps } from './InputNumber.js';
|
|
56
65
|
export { default as InputSearch } from './InputSearch.js';
|
|
@@ -59,7 +68,7 @@ export type { LayoutProps } from './Layout.js';
|
|
|
59
68
|
export { default as List } from './List.js';
|
|
60
69
|
export { default as LogicTree } from './LogicTree.js';
|
|
61
70
|
export { DisplayLogicTree } from './LogicTree.js';
|
|
62
|
-
export { getInitialLogicNode, logicTreeIterator } from './LogicTree/helper.js';
|
|
71
|
+
export { addLogicNode, addRecordNode, changeRecordData, getInitialLogicNode, logicTreeIterator, removeNode, } from './LogicTree/helper.js';
|
|
63
72
|
export { ELogicType, ENodeType } from './LogicTree/type.js';
|
|
64
73
|
export type { ILogicNode, IRecordNode, TNode } from './LogicTree/type.js';
|
|
65
74
|
export { default as MemberPicker } from './MemberPicker.js';
|
|
@@ -75,8 +84,6 @@ export { default as Popconfirm } from './Popconfirm.js';
|
|
|
75
84
|
export type { PopconfirmProps } from './Popconfirm.js';
|
|
76
85
|
export { default as Popover } from './Popover.js';
|
|
77
86
|
export type { PopoverProps } from './Popover.js';
|
|
78
|
-
export { default as Progress } from './Progress.js';
|
|
79
|
-
export type { IProgressRef, IProps as ProgressProps } from './Progress.js';
|
|
80
87
|
export { default as Radio } from './Radio.js';
|
|
81
88
|
export type { RadioGroupProps, RadioProps } from './Radio.js';
|
|
82
89
|
export { default as RenameInput } from './RenameInput.js';
|
|
@@ -106,7 +113,7 @@ export { default as TextLink } from './TextLink.js';
|
|
|
106
113
|
export { default as Tooltip } from './Tooltip.js';
|
|
107
114
|
export type { ActionType as TooltipActionType, ITooltipProps as TooltipProps, } from './Tooltip.js';
|
|
108
115
|
export { default as Tree } from './Tree.js';
|
|
109
|
-
export type { DataNode as TreeDataNode, AldTreeNodeProps as TreeNodeProps, TreeProps, } from './Tree.js';
|
|
116
|
+
export type { DataNode as TreeDataNode, EventDataNode, AldTreeNodeProps as TreeNodeProps, TreeProps, } from './Tree.js';
|
|
110
117
|
export { default as Typography } from './Typography.js';
|
|
111
118
|
export type { TypographyProps } from './Typography.js';
|
|
112
119
|
export { default as Upload } from './Upload.js';
|
|
@@ -119,6 +126,8 @@ export { default as AldSelect } from './Select.js';
|
|
|
119
126
|
export type { ISelectProps } from './Select/interface.js';
|
|
120
127
|
export { default as Select } from './Select.js';
|
|
121
128
|
export type { ISelectProps as SelectProps } from './Select/interface.js';
|
|
129
|
+
export type { BaseSelectRef, DefaultOptionType, SelectItemType, } from './Select/interface.js';
|
|
130
|
+
export type { CustomTagProps, Mode as SelectMode } from './Select/BaseSelect.js';
|
|
122
131
|
export { default as AMenu } from './AMenu.js';
|
|
123
132
|
export type { AMenuProps } from './AMenu.js';
|
|
124
133
|
export { default as Tour } from './Tour.js';
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import localeValues$1 from "./locale/zh_CN.js";
|
|
3
3
|
import localeValues from "./locale/en_US.js";
|
|
4
4
|
import AProgress from "./AProgress/index.js";
|
|
5
|
+
import Progress_default from "./Progress/index.js";
|
|
5
6
|
import Alert from "./Alert/index.js";
|
|
6
7
|
import AldApp from "./App/index.js";
|
|
7
8
|
import Avatar from "./Avatar/index.js";
|
|
@@ -27,7 +28,10 @@ import AldCustomConfigProvider from "./ConfigProvider/index.js";
|
|
|
27
28
|
import Select_default from "./Select/index.js";
|
|
28
29
|
import InputNumber from "./InputNumber/index.js";
|
|
29
30
|
import ColorPicker from "./ColorPicker/index.js";
|
|
30
|
-
import
|
|
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";
|
|
@@ -40,7 +44,7 @@ import Layout from "./Layout/index.js";
|
|
|
40
44
|
import List from "./List/index.js";
|
|
41
45
|
import TextLink from "./TextLink/index.js";
|
|
42
46
|
import { ELogicType, ENodeType } from "./LogicTree/type.js";
|
|
43
|
-
import { getInitialLogicNode, logicTreeIterator } from "./LogicTree/helper.js";
|
|
47
|
+
import { addLogicNode, addRecordNode, changeRecordData, getInitialLogicNode, logicTreeIterator, removeNode } from "./LogicTree/helper.js";
|
|
44
48
|
import DisplayLogicTree from "./LogicTree/DisplayLogicTree.js";
|
|
45
49
|
import LogicTree from "./LogicTree/index.js";
|
|
46
50
|
import message from "./message/index.js";
|
|
@@ -70,4 +74,5 @@ import Watermark from "./Watermark/index.js";
|
|
|
70
74
|
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";
|
|
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,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,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,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,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>;
|
package/dist/theme.d.ts
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aloudata/aloudata-design",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"sideEffects": [
|
|
@@ -27,8 +27,12 @@
|
|
|
27
27
|
"prepare": "husky install",
|
|
28
28
|
"prepublishOnly": "npm run build",
|
|
29
29
|
"prettier": "prettier --write \"**/*.{js,jsx,tsx,ts,md,json}\"",
|
|
30
|
-
"postpublish": "
|
|
31
|
-
"release": "
|
|
30
|
+
"postpublish": "git push --tags",
|
|
31
|
+
"release:beta": "npm version prerelease --preid=beta -m \"chore: bump version to %s\" && npm publish --access public --tag beta",
|
|
32
|
+
"release:major": "npm version major -m \"chore: bump version to %s\" && npm publish --access public",
|
|
33
|
+
"release:minor": "npm version minor -m \"chore: bump version to %s\" && npm publish --access public",
|
|
34
|
+
"release:patch": "npm version patch -m \"chore: bump version to %s\" && npm publish --access public",
|
|
35
|
+
"release:stable": "npm version $(node -p \"require('./package.json').version.split('-')[0]\") -m \"chore: bump version to %s\" && npm publish --access public",
|
|
32
36
|
"start": "npm run dev",
|
|
33
37
|
"test": "vitest",
|
|
34
38
|
"test:storybook": "test-storybook"
|
|
@@ -57,7 +61,7 @@
|
|
|
57
61
|
"firefox >= 75"
|
|
58
62
|
],
|
|
59
63
|
"dependencies": {
|
|
60
|
-
"@floating-ui/react": "^0.
|
|
64
|
+
"@floating-ui/react": "^0.27.19",
|
|
61
65
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
62
66
|
"@radix-ui/react-popover": "^1.1.15",
|
|
63
67
|
"@radix-ui/react-scroll-area": "^1.0.4",
|
|
@@ -75,6 +79,7 @@
|
|
|
75
79
|
"immer": "^10.0.3",
|
|
76
80
|
"memoize-one": "^6.0.0",
|
|
77
81
|
"rc-field-form": "^2.7.1",
|
|
82
|
+
"rc-overflow": "^1.3.2",
|
|
78
83
|
"rc-picker": "^4.11.3",
|
|
79
84
|
"rc-tree": "^5.13.1",
|
|
80
85
|
"rc-upload": "^4.8.1",
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { default as React } from 'react';
|
|
2
|
-
interface SimpleOverflowProps<T> {
|
|
3
|
-
data: T[];
|
|
4
|
-
renderItem: (item: T, index: number) => React.ReactNode;
|
|
5
|
-
renderRest?: (omittedItems: T[]) => React.ReactNode;
|
|
6
|
-
suffix?: React.ReactNode;
|
|
7
|
-
itemKey?: string | ((item: T) => string);
|
|
8
|
-
maxCount?: 'responsive' | number;
|
|
9
|
-
className?: string;
|
|
10
|
-
prefixCls?: string;
|
|
11
|
-
onVisibleChange?: (visibleCount: number) => void;
|
|
12
|
-
}
|
|
13
|
-
export default function SimpleOverflow<T>(props: SimpleOverflowProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
-
export {};
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { cn } from "../lib/utils.js";
|
|
2
|
-
import { useEffect, useRef, useState } from "react";
|
|
3
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
-
//#region src/_utils/SimpleOverflow.tsx
|
|
5
|
-
function SimpleOverflow(props) {
|
|
6
|
-
const { data, renderItem, renderRest, suffix, itemKey, className, prefixCls, onVisibleChange } = props;
|
|
7
|
-
const containerRef = useRef(null);
|
|
8
|
-
const [visibleCount, setVisibleCount] = useState(data.length);
|
|
9
|
-
useEffect(() => {
|
|
10
|
-
const container = containerRef.current;
|
|
11
|
-
if (!container) return;
|
|
12
|
-
const measure = () => {
|
|
13
|
-
const overflowItems = [];
|
|
14
|
-
for (const child of Array.from(container.children)) if (child.dataset.overflowItem === "true") overflowItems.push(child);
|
|
15
|
-
if (overflowItems.length === 0) return;
|
|
16
|
-
const savedDisplays = overflowItems.map((el) => el.style.display);
|
|
17
|
-
overflowItems.forEach((el) => {
|
|
18
|
-
el.style.display = "";
|
|
19
|
-
});
|
|
20
|
-
container.offsetHeight;
|
|
21
|
-
const containerRect = container.getBoundingClientRect();
|
|
22
|
-
let count = 0;
|
|
23
|
-
for (const el of overflowItems) if (el.getBoundingClientRect().right <= containerRect.right - 40) count++;
|
|
24
|
-
else break;
|
|
25
|
-
overflowItems.forEach((el, i) => {
|
|
26
|
-
el.style.display = savedDisplays[i];
|
|
27
|
-
});
|
|
28
|
-
const newCount = Math.max(1, Math.min(count, data.length));
|
|
29
|
-
setVisibleCount(newCount);
|
|
30
|
-
onVisibleChange?.(newCount);
|
|
31
|
-
};
|
|
32
|
-
measure();
|
|
33
|
-
const ro = new window.ResizeObserver(measure);
|
|
34
|
-
ro.observe(container);
|
|
35
|
-
return () => ro.disconnect();
|
|
36
|
-
}, [data.length, onVisibleChange]);
|
|
37
|
-
const getKey = (item, index) => {
|
|
38
|
-
if (typeof itemKey === "function") return itemKey(item);
|
|
39
|
-
if (typeof itemKey === "string") return item[itemKey];
|
|
40
|
-
return String(index);
|
|
41
|
-
};
|
|
42
|
-
const omittedItems = data.slice(visibleCount);
|
|
43
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
44
|
-
ref: containerRef,
|
|
45
|
-
className: cn(prefixCls, "tw-flex tw-flex-nowrap tw-items-center tw-overflow-hidden", className),
|
|
46
|
-
children: [
|
|
47
|
-
data.map((item, index) => /* @__PURE__ */ jsx("div", {
|
|
48
|
-
"data-overflow-item": "true",
|
|
49
|
-
className: prefixCls ? `${prefixCls}-item` : void 0,
|
|
50
|
-
style: { display: index < visibleCount ? void 0 : "none" },
|
|
51
|
-
children: renderItem(item, index)
|
|
52
|
-
}, getKey(item, index))),
|
|
53
|
-
omittedItems.length > 0 && renderRest?.(omittedItems),
|
|
54
|
-
suffix
|
|
55
|
-
]
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
//#endregion
|
|
59
|
-
export { SimpleOverflow as default };
|
|
60
|
-
|
|
61
|
-
//# sourceMappingURL=SimpleOverflow.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleOverflow.js","names":[],"sources":["../../src/_utils/SimpleOverflow.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { cn } from '../lib/utils';\n\ninterface SimpleOverflowProps<T> {\n data: T[];\n renderItem: (item: T, index: number) => React.ReactNode;\n renderRest?: (omittedItems: T[]) => React.ReactNode;\n suffix?: React.ReactNode;\n itemKey?: string | ((item: T) => string);\n maxCount?: 'responsive' | number;\n className?: string;\n prefixCls?: string;\n onVisibleChange?: (visibleCount: number) => void;\n}\n\nexport default function SimpleOverflow<T>(props: SimpleOverflowProps<T>) {\n const {\n data,\n renderItem,\n renderRest,\n suffix,\n itemKey,\n className,\n prefixCls,\n onVisibleChange,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [visibleCount, setVisibleCount] = useState(data.length);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const measure = () => {\n const overflowItems: HTMLElement[] = [];\n for (const child of Array.from(container.children)) {\n if ((child as HTMLElement).dataset.overflowItem === 'true') {\n overflowItems.push(child as HTMLElement);\n }\n }\n if (overflowItems.length === 0) return;\n\n // Temporarily show all items so we can measure their natural positions\n const savedDisplays = overflowItems.map((el) => el.style.display);\n overflowItems.forEach((el) => {\n el.style.display = '';\n });\n // Force synchronous reflow\n void container.offsetHeight;\n\n const containerRect = container.getBoundingClientRect();\n let count = 0;\n for (const el of overflowItems) {\n const rect = el.getBoundingClientRect();\n if (rect.right <= containerRect.right - 40) {\n count++;\n } else {\n break;\n }\n }\n\n // Restore display values before React re-renders\n overflowItems.forEach((el, i) => {\n el.style.display = savedDisplays[i];\n });\n\n const newCount = Math.max(1, Math.min(count, data.length));\n setVisibleCount(newCount);\n onVisibleChange?.(newCount);\n };\n\n measure();\n const ro = new window.ResizeObserver(measure);\n ro.observe(container);\n return () => ro.disconnect();\n }, [data.length, onVisibleChange]);\n\n const getKey = (item: T, index: number) => {\n if (typeof itemKey === 'function') return itemKey(item);\n if (typeof itemKey === 'string')\n return (item as Record<string, string>)[itemKey];\n return String(index);\n };\n\n const omittedItems = data.slice(visibleCount);\n\n return (\n <div\n ref={containerRef}\n className={cn(\n prefixCls,\n 'tw-flex tw-flex-nowrap tw-items-center tw-overflow-hidden',\n className,\n )}\n >\n {data.map((item, index) => (\n <div\n key={getKey(item, index)}\n data-overflow-item=\"true\"\n className={prefixCls ? `${prefixCls}-item` : undefined}\n style={{\n display: index < visibleCount ? undefined : 'none',\n }}\n >\n {renderItem(item, index)}\n </div>\n ))}\n {omittedItems.length > 0 && renderRest?.(omittedItems)}\n {suffix}\n </div>\n );\n}\n"],"mappings":";;;;AAeA,SAAwB,eAAkB,OAA+B;CACvE,MAAM,EACJ,MACA,YACA,YACA,QACA,SACA,WACA,WACA,oBACE;CAEJ,MAAM,eAAe,OAAuB,KAAK;CACjD,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK,OAAO;AAE7D,iBAAgB;EACd,MAAM,YAAY,aAAa;AAC/B,MAAI,CAAC,UAAW;EAEhB,MAAM,gBAAgB;GACpB,MAAM,gBAA+B,EAAE;AACvC,QAAK,MAAM,SAAS,MAAM,KAAK,UAAU,SAAS,CAChD,KAAK,MAAsB,QAAQ,iBAAiB,OAClD,eAAc,KAAK,MAAqB;AAG5C,OAAI,cAAc,WAAW,EAAG;GAGhC,MAAM,gBAAgB,cAAc,KAAK,OAAO,GAAG,MAAM,QAAQ;AACjE,iBAAc,SAAS,OAAO;AAC5B,OAAG,MAAM,UAAU;KACnB;AAEF,GAAK,UAAU;GAEf,MAAM,gBAAgB,UAAU,uBAAuB;GACvD,IAAI,QAAQ;AACZ,QAAK,MAAM,MAAM,cAEf,KADa,GAAG,uBAAuB,CAC9B,SAAS,cAAc,QAAQ,GACtC;OAEA;AAKJ,iBAAc,SAAS,IAAI,MAAM;AAC/B,OAAG,MAAM,UAAU,cAAc;KACjC;GAEF,MAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,KAAK,OAAO,CAAC;AAC1D,mBAAgB,SAAS;AACzB,qBAAkB,SAAS;;AAG7B,WAAS;EACT,MAAM,KAAK,IAAI,OAAO,eAAe,QAAQ;AAC7C,KAAG,QAAQ,UAAU;AACrB,eAAa,GAAG,YAAY;IAC3B,CAAC,KAAK,QAAQ,gBAAgB,CAAC;CAElC,MAAM,UAAU,MAAS,UAAkB;AACzC,MAAI,OAAO,YAAY,WAAY,QAAO,QAAQ,KAAK;AACvD,MAAI,OAAO,YAAY,SACrB,QAAQ,KAAgC;AAC1C,SAAO,OAAO,MAAM;;CAGtB,MAAM,eAAe,KAAK,MAAM,aAAa;AAE7C,QACE,qBAAC,OAAD;EACE,KAAK;EACL,WAAW,GACT,WACA,6DACA,UACD;YANH;GAQG,KAAK,KAAK,MAAM,UACf,oBAAC,OAAD;IAEE,sBAAmB;IACnB,WAAW,YAAY,GAAG,UAAU,SAAS;IAC7C,OAAO,EACL,SAAS,QAAQ,eAAe,SAAY,QAC7C;cAEA,WAAW,MAAM,MAAM;IACpB,EARC,OAAO,MAAM,MAAM,CAQpB,CACN;GACD,aAAa,SAAS,KAAK,aAAa,aAAa;GACrD;GACG"}
|