diff --git a/.vscode/opendesign.token.code-snippets b/.vscode/opendesign.token.code-snippets index fa7f59cb7c136f55b2931408a6c1bd809fc52029..a9a68ebf0b4cccc8943657497d40332bc71b6271 100644 --- a/.vscode/opendesign.token.code-snippets +++ b/.vscode/opendesign.token.code-snippets @@ -1,4 +1,20 @@ { + "--o-color-white": { + "prefix": [ + "var(--o-color-white)" + ], + "body": "var(--o-color-white)", + "description": "[light: 255, 255, 255, dark: 255, 255, 255]", + "scope": "css,scss,less" + }, + "--o-color-black": { + "prefix": [ + "var(--o-color-black)" + ], + "body": "var(--o-color-black)", + "description": "[light: 0, 0, 0, dark: 0, 0, 0]", + "scope": "css,scss,less" + }, "--o-blue-1": { "prefix": [ "var(--o-blue-1)" @@ -671,12 +687,20 @@ "description": "四级填充/禁用[light: rgb(var(--o-mixedgray-4)), dark: rgb(var(--o-mixedgray-4))]", "scope": "css,scss,less" }, + "--o-color-control-light": { + "prefix": [ + "var(--o-color-control-light)" + ], + "body": "var(--o-color-control-light)", + "description": "很浅背景[light: rgb(var(--o-gray-1)), dark: rgb(var(--o-gray-1))]", + "scope": "css,scss,less" + }, "--o-color-control1": { "prefix": [ "var(--o-color-control1)" ], "body": "var(--o-color-control1)", - "description": "常规[light: rgb(var(--o-mixedgray-3)), dark: rgb(var(--o-mixedgray-3))]", + "description": "常规,常用于边框[light: rgb(var(--o-mixedgray-3)), dark: rgb(var(--o-mixedgray-3))]", "scope": "css,scss,less" }, "--o-color-control2": { @@ -708,7 +732,7 @@ "var(--o-color-control1-light)" ], "body": "var(--o-color-control1-light)", - "description": "浅/控件常规[light: rgb(var(--o-mixedgray-3)), dark: rgb(var(--o-mixedgray-3))]", + "description": "常规-浅,常用于背景[light: rgb(var(--o-mixedgray-3)), dark: rgb(var(--o-mixedgray-3))]", "scope": "css,scss,less" }, "--o-color-control2-light": { @@ -716,7 +740,7 @@ "var(--o-color-control2-light)" ], "body": "var(--o-color-control2-light)", - "description": "浅/控件悬浮[light: rgb(var(--o-mixedgray-4)), dark: rgb(var(--o-mixedgray-4))]", + "description": "悬浮-浅[light: rgb(var(--o-mixedgray-4)), dark: rgb(var(--o-mixedgray-4))]", "scope": "css,scss,less" }, "--o-color-control3-light": { @@ -724,7 +748,7 @@ "var(--o-color-control3-light)" ], "body": "var(--o-color-control3-light)", - "description": "浅/控件激活[light: rgb(var(--o-mixedgray-5)), dark: rgb(var(--o-mixedgray-5))]", + "description": "激活-浅[light: rgb(var(--o-mixedgray-5)), dark: rgb(var(--o-mixedgray-5))]", "scope": "css,scss,less" }, "--o-color-control4-light": { @@ -732,7 +756,7 @@ "var(--o-color-control4-light)" ], "body": "var(--o-color-control4-light)", - "description": "浅/控件禁用[light: rgb(var(--o-mixedgray-2)), dark: rgb(var(--o-mixedgray-2))]", + "description": "禁用-浅[light: rgb(var(--o-mixedgray-2)), dark: rgb(var(--o-mixedgray-2))]", "scope": "css,scss,less" }, "--o-color-primary1": { diff --git a/packages/docs/global.md b/packages/docs/global.md index 08bd4deadf95f3bde030b94aa6d69e795a52f0ac..1e5d93e738d136a92049f43e0e2af9bbddd02a79 100644 --- a/packages/docs/global.md +++ b/packages/docs/global.md @@ -27,3 +27,9 @@ # 变量定义都在 var.scss 里,同时使用最外层内定义; # 不同状态通过类改变变量值,而不是新定义多个变量; + +# 变量命名 + +- 边框(bd) `--btn-bd: 1px solid var(--o-color-control1)` +- 边框颜色(bd-color) `--btn-bd-color: var(--o-color-control1)` +- 背景颜色(bg-color) `--btn-bg-color: var(--o-color-control1)` diff --git a/packages/opendesign/src/components/button/OButton.vue b/packages/opendesign/src/components/button/OButton.vue index ee2613676caed518ce760a161dacda1b2738e762..fe91c64799cd8576aa2a6f38347d02f56128b5be 100644 --- a/packages/opendesign/src/components/button/OButton.vue +++ b/packages/opendesign/src/components/button/OButton.vue @@ -1,8 +1,8 @@ diff --git a/packages/opendesign/src/components/input/__demo__/InputRound.vue b/packages/opendesign/src/components/input/__demo__/InputRound.vue index 94ad560565c5c41f631b2ce9a4dfa29673fd98da..441d6d0956b8b905264d121bacc72be52ee2c5b7 100644 --- a/packages/opendesign/src/components/input/__demo__/InputRound.vue +++ b/packages/opendesign/src/components/input/__demo__/InputRound.vue @@ -26,7 +26,7 @@ const onClick = () => { - + diff --git a/packages/opendesign/src/components/input/style/index.scss b/packages/opendesign/src/components/input/style/index.scss index b5c7237b08ea9997685ec795d214de18e351e748..b0f610e407719b8451c6ae85f31452ef7abe768d 100644 --- a/packages/opendesign/src/components/input/style/index.scss +++ b/packages/opendesign/src/components/input/style/index.scss @@ -8,6 +8,9 @@ font-size: var(--input-text-size); line-height: var(--input-text-height); } +.o-input-disabled { + --input-color: var(--input-color-disabled); +} .o-input-wrap { display: flex; padding: var(--input-padding); @@ -15,19 +18,24 @@ overflow: hidden; position: relative; border-radius: var(--input-radius); - border: 1px solid var(--input-bd); - background-color: var(--input-bg); + border: 1px solid var(--input-bd-color); + background-color: var(--input-bg-color); - &:not(.is-readonly) { + &:not(.is-readonly):not(.is-disabled) { &:hover { - border-color: var(--input-bd-hover); - background-color: var(--input-bg-hover); + border-color: var(--input-bd-color-hover); + background-color: var(--input-bg-color-hover); } &.is-focus { - border-color: var(--input-bd-focus); - background-color: var(--input-bg-focus); + border-color: var(--input-bd-color-focus); + background-color: var(--input-bg-color-focus); } } + &.is-disabled { + border-color: var(--input-bd-color-disabled); + background-color: var(--input-bg-color-disabled); + cursor: not-allowed; + } &.has-prepend { border-top-left-radius: 0; @@ -46,7 +54,6 @@ cursor: inherit; background-color: transparent; display: inline-flex; - // caret-color: var(--o-color-primary1); padding: 0; line-height: inherit; height: 100%; @@ -67,7 +74,7 @@ align-items: center; justify-content: center; color: var(--input-icon-color); - background-color: var(--input-icon-bg); + background-color: var(--input-icon-bg-color); border-radius: 50%; &:hover { @@ -79,13 +86,6 @@ } } -.o-input-disabled { - .o-input-wrap { - color: var(--input-color-disabled); - cursor: not-allowed; - } -} - .o-input-clearable { &:hover { .o-input-suffix-wrap { @@ -124,17 +124,40 @@ .o-input-prepend { display: flex; align-items: center; + background-color: var(--input-prepend-append-bg-color); + border: 1px solid var(--input-prepend-append-bd-color); } .o-input-append { - border: 1px solid var(--o-color-border2); - border-left: 0; flex-shrink: 0; padding: var(--input-append-padding); border-top-right-radius: var(--input-radius); border-bottom-right-radius: var(--input-radius); } +.o-input-prepend { + flex-shrink: 0; + padding: var(--input-prepend-padding); + border-top-left-radius: var(--input-radius); + border-bottom-left-radius: var(--input-radius); +} +.o-input-solid { + .o-input-prepend { + border-width: 0 1px 0 0; + } + .o-input-append { + border-width: 0 0 0 1px; + } +} + +.o-input-outline { + .o-input-prepend { + border-right: 0; + } + .o-input-append { + border-left: 0; + } +} .o-input-input-wrap { position: relative; } @@ -150,12 +173,3 @@ top: 100%; pointer-events: none; } - -.o-input-prepend { - border: 1px solid var(--o-color-border2); - border-right: 0; - flex-shrink: 0; - padding: var(--input-prepend-padding); - border-top-left-radius: var(--input-radius); - border-bottom-left-radius: var(--input-radius); -} diff --git a/packages/opendesign/src/components/input/style/var.scss b/packages/opendesign/src/components/input/style/var.scss index d2cbce0e7fbc3b801902d25acbc33ba7946d5b65..798ccc51a26bbd9778a89f4ef5175752aade01a0 100644 --- a/packages/opendesign/src/components/input/style/var.scss +++ b/packages/opendesign/src/components/input/style/var.scss @@ -1,12 +1,99 @@ .o-input { - --input-placeholder: var(--o-color-text4); - --input-color: var(--o-color-text2); - --input-color-disabled: var(--o-color-text4); + --input-color: var(--o-color-info2); + --input-color-disabled: var(--o-color-info4); + --input-placeholder: var(--o-color-info4); - --input-bg: var(--o-color-bg2); - --input-bg-hover: var(--o-color-bg2); - --input-bg-focus: var(--o-color-bg2); + --input-bg-color: transparent; + --input-bg-color-hover: transparent; + --input-bg-color-focus: var(--o-color-control-white); + + --input-prepend-append-bd-color: var(--o-color-control1); +} + +.o-input-normal { + --input-bd-color: var(--o-color-control1); + --input-bd-color-hover: var(--o-color-primary2); + --input-bd-color-focus: var(--o-color-primary3); + --input-bd-color-disabled: var(--o-color-control4); + &.o-input-solid { + --input-bd-color: var(--o-color-control1-light); + --input-bd-color-hover: var(--o-color-control2-light); + --input-bd-color-focus: var(--o-color-primary3-light); + --input-bd-color-disabled: var(--o-color-control4-light); + + --input-bg-color: var(--o-color-control1-light); + --input-bg-color-hover: var(--o-color-control2-light); + --input-bg-color-disabled: var(--o-color-control4-light); + + --input-prepend-append-bd-color: var(--o-color-control2-light); + &.o-input-disabled { + --input-prepend-append-bd-color: var(--o-color-control4-light); + } + } +} + +.o-input-success { + --input-bd-color: var(--o-color-success1); + --input-bd-color-hover: var(--o-color-success2); + --input-bd-color-focus: var(--o-color-success3); + --input-bd-color-disabled: var(--o-color-success4); + + &.o-input-solid { + --input-bd-color: var(--o-color-success1-light); + --input-bd-color-hover: var(--o-color-success2-light); + --input-bd-color-focus: var(--o-color-success3-light); + --input-bd-color-disabled: var(--o-color-success4-light); + + --input-bg-color: var(--o-color-success1-light); + --input-bg-color-hover: var(--o-color-success2-light); + --input-bg-color-disabled: var(--o-color-success4-light); + } +} + +.o-input-warning { + --input-bd-color: var(--o-color-warning1); + --input-bd-color-hover: var(--o-color-warning2); + --input-bd-color-focus: var(--o-color-warning3); + --input-bd-color-disabled: var(--o-color-warning4); + + &.o-input-solid { + --input-bd-color: var(--o-color-warning1-light); + --input-bd-color-hover: var(--o-color-warning2-light); + --input-bd-color-focus: var(--o-color-warning3-light); + --input-bd-color-disabled: var(--o-color-warning4-light); + + --input-bg-color: var(--o-color-warning1-light); + --input-bg-color-hover: var(--o-color-warning2-light); + --input-bg-color-disabled: var(--o-color-warning4-light); + } } + +.o-input-danger { + --input-bd-color: var(--o-color-danger1); + --input-bd-color-hover: var(--o-color-danger2); + --input-bd-color-focus: var(--o-color-danger3); + --input-bd-color-disabled: var(--o-color-danger4); + + &.o-input-solid { + --input-bd-color: var(--o-color-danger1-light); + --input-bd-color-hover: var(--o-color-danger2-light); + --input-bd-color-focus: var(--o-color-danger3-light); + --input-bd-color-disabled: var(--o-color-danger4-light); + + --input-bg-color: var(--o-color-danger1-light); + --input-bg-color-hover: var(--o-color-danger2-light); + --input-bg-color-disabled: var(--o-color-danger4-light); + } +} + +.o-input-solid { + --input-prepend-append-bg-color: var(--o-color-control1-light); +} + +.o-input-disabled { + --input-color: var(--o-color-info4); +} + .o-input-size-small { --input-height: var(--o-size-s); --input-text-size: var(--o-font_size-tip1); @@ -16,11 +103,13 @@ --input-append-padding: 0 4px; --input-prepend-padding: 0 4px; --input-radius: var(--o-radius-s); + &.o-input-round-pill { --input-append-padding: 0 6px 0 4px; --input-prepend-padding: 0 4px 0 6px; } } + .o-input-size-medium { --input-height: var(--o-size-m); --input-text-size: var(--o-font_size-text); @@ -36,6 +125,7 @@ --input-prepend-padding: 0 8px 0 12px; } } + .o-input-size-large { --input-height: var(--o-size-l); --input-text-size: var(--o-font_size-h4); @@ -45,6 +135,7 @@ --input-append-padding: 0 12px; --input-prepend-padding: 0 12px; --input-radius: var(--o-radius-l); + &.o-input-round-pill { --input-append-padding: 0 16px 0 12px; --input-prepend-padding: 0 12px 0 16px; @@ -54,33 +145,3 @@ .o-input-round-pill { --input-radius: var(--o-size-l); } - -.o-input-normal { - --input-bd: var(--o-color-normal1); - --input-bd-hover: var(--o-color-normal2); - --input-bd-focus: var(--o-color-normal2); -} -.o-input-success { - --input-bd: var(--o-color-success4); - --input-bd-hover: var(--o-color-success1); - --input-bd-focus: var(--o-color-success1); -} -.o-input-warning { - --input-bd: var(--o-color-warning4); - --input-bd-hover: var(--o-color-warning1); - --input-bd-focus: var(--o-color-warning1); -} -.o-input-danger { - --input-bd: var(--o-color-danger4); - --input-bd-hover: var(--o-color-danger1); - --input-bd-focus: var(--o-color-danger1); -} -.o-input-disabled { - --input-bd: var(--o-color-normal1); - --input-bd-hover: var(--o-color-normal1); - --input-bd-focus: var(--o-color-normal1); - - --input-bg: var(--o-color-normal4); - --input-bg-hover: var(--o-color-normal4); - --input-bg-focus: var(--o-color-normal4); -} diff --git a/packages/opendesign/src/components/input/types.ts b/packages/opendesign/src/components/input/types.ts index 2ce3efbb591af31126ccbafc370b337430daf83b..b37c7ccf1fcb8d7ac9d431813afabb4547845c55 100644 --- a/packages/opendesign/src/components/input/types.ts +++ b/packages/opendesign/src/components/input/types.ts @@ -1,5 +1,5 @@ import { ExtractPropTypes, PropType } from 'vue'; -import type { SizeT, ShapeT, RoundT } from '../_shared/global'; +import type { SizeT, RoundT, VariantT } from '../_shared/global'; export const inputProps = { /** @@ -22,12 +22,6 @@ export const inputProps = { size: { type: String as PropType, }, - /** - * 形状 - */ - shape: { - type: String as PropType, - }, /** * 圆角值 */ @@ -41,6 +35,13 @@ export const inputProps = { type: String as PropType<'normal' | 'success' | 'warning' | 'danger'>, default: 'normal' }, + /** + * 按钮类型:ColorT + */ + variant: { + type: String as PropType, + default: 'outline' + }, /** * 提示文本 */ diff --git a/packages/opendesign/src/components/link/OLink.vue b/packages/opendesign/src/components/link/OLink.vue index b11216b89d793d475273b61af1f98d6c593bd474..c29be9b2920be8298e19f74583dab6bb57c4f78b 100644 --- a/packages/opendesign/src/components/link/OLink.vue +++ b/packages/opendesign/src/components/link/OLink.vue @@ -1,48 +1,9 @@ diff --git a/packages/opendesign/src/components/option/style/index.scss b/packages/opendesign/src/components/option/style/index.scss index ab688a641fd993a3aaebf3fb258cd5d559451625..3a0d32779242ea6376ef32ab41314956d6713a8b 100644 --- a/packages/opendesign/src/components/option/style/index.scss +++ b/packages/opendesign/src/components/option/style/index.scss @@ -1,33 +1,28 @@ @use './var.scss'; .o-option { - cursor: pointer; + display: flex; + align-items: center; padding: var(--option-padding); - background-color: var(--option-bg); - + background-color: var(--option-bg-color); font-size: var(--option-text-size); line-height: var(--option-text-height); - display: flex; - align-items: center; + cursor: pointer; - &:hover { - background-color: var(--option-bg_hover); - color: var(--option-color_hover); - } - &.active { - color: var(--option-color_active); - background-color: var(--option-bg_active); - } - &.is-disabled { - cursor: not-allowed; - color: var(--option-color_disabled); - background-color: var(--option-bg_disabled); + &:not(.o-option-disabled) { + &:hover { + background-color: var(--option-bg-color-hover); + color: var(--option-color-hover); + } + &.active { + color: var(--option-color-active); + background-color: var(--option-bg-color-active); + } } } -.o-options-size-small { - .o-option { - padding: var(--option-padding-s); - font-size: var(--option-text-size_small); - line-height: var(--option-text-height_small); - } + +.o-option-disabled { + cursor: not-allowed; + color: var(--option-color-disabled); + background-color: var(--option-bg-color-disabled); } diff --git a/packages/opendesign/src/components/option/style/var.scss b/packages/opendesign/src/components/option/style/var.scss index ed3568f97a97c7e1339920ba4b35188ff43f380d..6def4083642800c98f4946938cb40c1af857a3ae 100644 --- a/packages/opendesign/src/components/option/style/var.scss +++ b/packages/opendesign/src/components/option/style/var.scss @@ -1,20 +1,18 @@ .o-option { - --option-color: var(--o-color-text2); - --option-color_hover: var(--o-color-text2-inverse); - --option-color_active: var(--o-color-text2-inverse); - --option-color_disabled: var(--o-color-text4); + --option-color: var(--o-color-info2); + --option-color-hover: var(--o-color-info1-inverse); + --option-color-active: var(--o-color-info1-inverse); + --option-color-disabled: var(--o-color-info4); - --option-bg: transparent; - --option-bg_hover: var(--o-color-primary3); - --option-bg_active: var(--o-color-primary2); - --option-bg_disabled: transparent; + --option-bg-color: transparent; + --option-bg-color-hover: var(--o-color-primary3-light); + --option-bg-color-active: var(--o-color-primary2-light); + --option-bg-color-disabled: var(--o-color-control4-light); --option-text-size: var(--o-font_size-text); --option-text-height: var(--o-line_height-text); - --option-text-size_small: var(--o-font_size-tip1); - --option-text-height_small: var(--o-line_height-tip1); - - --option-padding: 5px 16px; - --option-padding-s: 3px 8px; + --option-padding: 5px 12px; + --option-text-size: var(--o-font_size-text); + --option-text-height: var(--o-line_height-text); } diff --git a/packages/opendesign/src/components/option/types.ts b/packages/opendesign/src/components/option/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..b33342d45c507e6550ab5ba8b21a0d8cdfbb5579 --- /dev/null +++ b/packages/opendesign/src/components/option/types.ts @@ -0,0 +1,26 @@ +import { ExtractPropTypes, PropType } from 'vue'; + +export const optionProps = { + /** + * 显示文本 + */ + label: { + type: String, + default: '' + }, + /** + * 值 + */ + value: { + type: [String, Number] as PropType, + default: '' + }, + /** + * 禁用 + */ + disabled: { + type: Boolean + }, +}; + +export type OptionPropsT = ExtractPropTypes; diff --git a/packages/opendesign/src/components/popover/OPopover.vue b/packages/opendesign/src/components/popover/OPopover.vue index b553756e159c875b01b20c53d2dd59edf1d6ec57..05d911702e6573a25a51e016fba7cbe1a533ba0d 100644 --- a/packages/opendesign/src/components/popover/OPopover.vue +++ b/packages/opendesign/src/components/popover/OPopover.vue @@ -4,62 +4,12 @@ export default { }; - + diff --git a/packages/opendesign/src/components/select/__demo__/SelectBasic.vue b/packages/opendesign/src/components/select/__demo__/SelectBasic.vue new file mode 100644 index 0000000000000000000000000000000000000000..dc46b0d3a113c48f6eee3f928ac0d2a63c2a7fcd --- /dev/null +++ b/packages/opendesign/src/components/select/__demo__/SelectBasic.vue @@ -0,0 +1,144 @@ + + + diff --git a/packages/opendesign/src/components/select/__demo__/SelectDisabled.vue b/packages/opendesign/src/components/select/__demo__/SelectDisabled.vue deleted file mode 100644 index ac3c4203e7475a40b788c74ce6674fa1cacba20a..0000000000000000000000000000000000000000 --- a/packages/opendesign/src/components/select/__demo__/SelectDisabled.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/packages/opendesign/src/components/select/__demo__/SelectPopupposition.vue b/packages/opendesign/src/components/select/__demo__/SelectPopupposition.vue index 0fc7aaab5a83c04588b09285ab5b2a8f5f58ae73..e8cbd05de08f134427194c486add727b5367edbf 100644 --- a/packages/opendesign/src/components/select/__demo__/SelectPopupposition.vue +++ b/packages/opendesign/src/components/select/__demo__/SelectPopupposition.vue @@ -3,98 +3,88 @@ import { ref } from 'vue'; import { OSelect } from '../index'; import { OOption } from '../../option'; -const selectVal = ref('opt1'); +const selectVal = ref('option 1'); const selectVal2 = ref(''); const options = [ { label: 'option 1', value: 'opt1' }, { label: 'option 2', value: 'opt2' }, + { label: 'option 3', value: 'opt3' }, + { label: 'option 4', value: 'opt4' }, ];