├── .gitignore
├── .npmrc
├── .prettierrc
├── LICENSE
├── README.md
├── base-components
├── .gitignore
├── .npmrc
├── CHANGELOG.md
├── LICENSE
├── README.md
├── breezr.config.js
├── docs
│ └── CONTRIBUTING.md
├── fixtures
│ └── breezr
│ │ ├── .gitignore
│ │ ├── .npmrc
│ │ ├── breezr.config.js
│ │ ├── package.json
│ │ └── src
│ │ ├── index.html
│ │ ├── index.js
│ │ └── index.less
├── fusion-theme
│ ├── atomgit
│ │ ├── next-noreset.var.css
│ │ ├── next.var.css
│ │ └── variables.css
│ ├── b-design
│ │ ├── next-noreset.var.css
│ │ ├── next.var.css
│ │ └── variables.css
│ ├── hybridcloud-dark
│ │ ├── next-noreset.var.css
│ │ ├── next.var.css
│ │ └── variables.css
│ ├── hybridcloud
│ │ ├── next-noreset.var.css
│ │ ├── next.var.css
│ │ └── variables.css
│ ├── wind
│ │ ├── next-noreset.var.css
│ │ ├── next.var.css
│ │ └── variables.css
│ ├── xconsole-dark
│ │ ├── next-noreset.var.css
│ │ ├── next.var.css
│ │ └── variables.css
│ ├── xconsole
│ │ ├── next-noreset.var.css
│ │ ├── next.var.css
│ │ └── variables.css
│ ├── yunxiao-dark
│ │ ├── next-noreset.var.css
│ │ ├── next.var.css
│ │ └── variables.css
│ ├── yunxiao-v5
│ │ ├── next-noreset.var.css
│ │ ├── next.var.css
│ │ └── variables.css
│ └── yunxiao
│ │ ├── next-noreset.var.css
│ │ ├── next.var.css
│ │ └── variables.css
├── index.html
├── package.json
├── pages
│ ├── 404$.tsx
│ ├── _theme.tsx
│ ├── declare.d.ts
│ ├── dynamic-theme-base
│ │ ├── wind.scss
│ │ ├── xconsole-dark.scss
│ │ └── xconsole.scss
│ ├── index$.md
│ ├── moment-locale.js
│ ├── style.scss
│ └── theme-vars
│ │ ├── aone.scss
│ │ ├── atomgit.scss
│ │ ├── b-design.scss
│ │ ├── hybridcloud-dark.scss
│ │ ├── hybridcloud.scss
│ │ ├── teamix.scss
│ │ ├── wind.scss
│ │ ├── xconsole-dark.scss
│ │ ├── xconsole.scss
│ │ ├── yunxiao-dark.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
├── scripts
│ ├── add-fusion-type-export.js
│ ├── analyze-xconsole-vars.js
│ ├── build-css.js
│ ├── copy-comp.js
│ ├── filter-css-var.js
│ ├── gene-css-def.js
│ ├── generate-css-var-reset.js
│ ├── postinstall.js
│ ├── publish-wind
│ │ ├── .gitignore
│ │ ├── .npmignore
│ │ ├── index-noreset.scss
│ │ ├── index.scss
│ │ ├── package.json
│ │ └── scripts
│ │ │ └── prepare.js
│ ├── publish-xconsole
│ │ ├── .gitignore
│ │ ├── .npmignore
│ │ ├── package.json
│ │ └── scripts
│ │ │ ├── generate-intl-messages.js
│ │ │ ├── locale
│ │ │ ├── en-us.js
│ │ │ └── zh-cn.js
│ │ │ ├── prepare.js
│ │ │ └── windIntlMessages
│ │ │ ├── en-us.json
│ │ │ └── zh-cn.json
│ ├── sync-demo.js
│ ├── sync-markdown.js
│ ├── theme-data.js
│ ├── update-theme.js
│ └── utils.js
├── src
│ ├── affix
│ │ ├── demo
│ │ │ ├── absolute-position.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── custom-container.tsx
│ │ │ ├── custom-offset.tsx
│ │ │ └── on-affix.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── animate
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── expand.tsx
│ │ │ └── multiple.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── avatar
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── type.tsx
│ │ │ └── with-badge.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── badge
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── clickable.tsx
│ │ │ ├── content.tsx
│ │ │ ├── dot.tsx
│ │ │ ├── dynamic-content.tsx
│ │ │ ├── no-wrapper.tsx
│ │ │ └── overflowCount.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ └── main.scss
│ ├── balloon
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── alignment.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── control.tsx
│ │ │ ├── nested.tsx
│ │ │ ├── onCloseClick.tsx
│ │ │ ├── tooltip.tsx
│ │ │ └── triggerType.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ └── yunxiao-v5.scss
│ ├── box
│ │ ├── demo
│ │ │ ├── align&justify.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── direction.tsx
│ │ │ ├── padding&margin.tsx
│ │ │ └── wrap.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── breadcrumb
│ │ ├── demo
│ │ │ ├── auto-more.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── custom-item.tsx
│ │ │ ├── more.tsx
│ │ │ └── separator.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── xconsole.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── button
│ │ ├── b-design.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── component.tsx
│ │ │ ├── custom-icons.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── ghost.tsx
│ │ │ ├── group.tsx
│ │ │ ├── icon.tsx
│ │ │ ├── loading.tsx
│ │ │ ├── only-icon.tsx
│ │ │ ├── size.tsx
│ │ │ └── type.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ └── yunxiao-v5.scss
│ ├── calendar
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── card.tsx
│ │ │ ├── custom-cell.tsx
│ │ │ ├── default-visible-month.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── locale.tsx
│ │ │ ├── lunar.tsx
│ │ │ └── panel.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ └── main.scss
│ ├── calendar2
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── card.tsx
│ │ │ ├── custom-cell.tsx
│ │ │ ├── default-visible-month.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── lunar.tsx
│ │ │ └── panel.tsx
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ └── xconsole.scss
│ ├── card
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── collapsable-head.tsx
│ │ │ ├── collapsable-tail.tsx
│ │ │ ├── divider.tsx
│ │ │ ├── free.tsx
│ │ │ ├── header-actions.tsx
│ │ │ └── media.tsx
│ │ ├── hybridcloud-dark.scss
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── cascader-select
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── change-on-select.tsx
│ │ │ ├── check-strictyle.tsx
│ │ │ ├── custom-style.tsx
│ │ │ ├── custom.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── dynamic.tsx
│ │ │ ├── expand-trigger.tsx
│ │ │ ├── expanded-value.tsx
│ │ │ ├── multiple.tsx
│ │ │ ├── only-leaf.tsx
│ │ │ └── search.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ └── main.scss
│ ├── cascader
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── check-strictly.tsx
│ │ │ ├── custom-style.tsx
│ │ │ ├── dynamic.tsx
│ │ │ ├── expand-trigger.tsx
│ │ │ ├── multiple.tsx
│ │ │ └── only-leaf.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ └── main.scss
│ ├── checkbox
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── all-check.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── control.tsx
│ │ │ ├── dataSource.tsx
│ │ │ ├── disbled.tsx
│ │ │ ├── group.tsx
│ │ │ ├── indeterminate.tsx
│ │ │ ├── isPreview.tsx
│ │ │ └── uncontrol.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── collapse
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── accordion.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── datasource.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── event.tsx
│ │ │ └── nested.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ └── yunxiao-v5.scss
│ ├── common-var.scss
│ ├── common.scss
│ ├── config-provider
│ │ ├── ctx.ts
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── consumer.tsx
│ │ │ ├── error-boundary.tsx
│ │ │ ├── interactive.tsx
│ │ │ ├── locale.tsx
│ │ │ └── rtl.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ └── utils.ts
│ ├── date-picker
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── custom-range-picker.tsx
│ │ │ ├── default-visible-month.tsx
│ │ │ ├── default.tsx
│ │ │ ├── disabled-date.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── field.tsx
│ │ │ ├── footer.tsx
│ │ │ ├── format.tsx
│ │ │ ├── popup.tsx
│ │ │ ├── show-time.tsx
│ │ │ └── size.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ └── xconsole.scss
│ ├── date-picker2
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── default-panel.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── footer.tsx
│ │ │ ├── format.tsx
│ │ │ ├── noborder.tsx
│ │ │ ├── preset.tsx
│ │ │ ├── range-picker.tsx
│ │ │ ├── show-time.tsx
│ │ │ └── size.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.tsx
│ │ ├── xconsole.scss
│ │ └── yunxiao-v5.scss
│ ├── declare.d.ts
│ ├── dialog
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── customize-footer.tsx
│ │ │ ├── footer.tsx
│ │ │ ├── height.tsx
│ │ │ ├── large-content.tsx
│ │ │ ├── promise.tsx
│ │ │ ├── quick.tsx
│ │ │ ├── should-update-position.tsx
│ │ │ └── withContext.tsx
│ │ ├── hybridcloud-dark.scss
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── divider
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── direction.tsx
│ │ │ └── orientation.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── drawer
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── customFooter.tsx
│ │ │ ├── double.tsx
│ │ │ ├── more.tsx
│ │ │ ├── okAndCancel.tsx
│ │ │ ├── placement.tsx
│ │ │ ├── quick.tsx
│ │ │ └── select.tsx
│ │ ├── hybridcloud-dark.scss
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ └── yunxiao-v5.scss
│ ├── dropdown
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── controlled.tsx
│ │ │ └── trigger-type.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── field
│ │ ├── demo
│ │ │ ├── autounmout.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── custom.tsx
│ │ │ ├── dynamic.tsx
│ │ │ ├── hooks.tsx
│ │ │ ├── mix.tsx
│ │ │ ├── normalize.tsx
│ │ │ ├── onchange.tsx
│ │ │ ├── redux.tsx
│ │ │ ├── seterror.tsx
│ │ │ ├── topath.tsx
│ │ │ ├── validator.tsx
│ │ │ ├── validatorPromise.tsx
│ │ │ └── valuename.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── form
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── base.tsx
│ │ │ ├── custom.tsx
│ │ │ ├── field.tsx
│ │ │ ├── layout.tsx
│ │ │ ├── mix.tsx
│ │ │ ├── mobile.tsx
│ │ │ ├── nest.tsx
│ │ │ ├── onsubmit.tsx
│ │ │ ├── preview.tsx
│ │ │ ├── register.tsx
│ │ │ ├── responsive-grid.tsx
│ │ │ ├── responsive.tsx
│ │ │ ├── size.tsx
│ │ │ ├── validate-basic.tsx
│ │ │ ├── validate-label-as-name.tsx
│ │ │ └── validate-static.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── xconsole.scss
│ │ └── yunxiao.scss
│ ├── grid
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── align.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── breakpoint.tsx
│ │ │ ├── custom-elem-type.tsx
│ │ │ ├── fixed.tsx
│ │ │ ├── gutter.tsx
│ │ │ ├── hidden.tsx
│ │ │ ├── justify.tsx
│ │ │ ├── nest.tsx
│ │ │ ├── offset-fixed.tsx
│ │ │ ├── offset.tsx
│ │ │ ├── type.tsx
│ │ │ └── wrap.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── icon
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── iconfont.tsx
│ │ │ ├── size.tsx
│ │ │ ├── style.tsx
│ │ │ ├── type.tsx
│ │ │ └── xconsole-icons.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── wind-icon-types.js
│ │ └── xconsole-icon-types.js
│ ├── index-console-components.ts
│ ├── index-with-locale.ts
│ ├── index.ts
│ ├── input
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── addon.tsx
│ │ │ ├── autoheight.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── clear.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── group.tsx
│ │ │ ├── inner.tsx
│ │ │ ├── maxlen.tsx
│ │ │ ├── passwd.tsx
│ │ │ ├── state.tsx
│ │ │ ├── style.tsx
│ │ │ └── trim.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── judge-os.ts
│ ├── list
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── complex.tsx
│ │ │ ├── custom-loading.tsx
│ │ │ ├── empty.tsx
│ │ │ └── loading.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── loading
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── fullscreen.tsx
│ │ │ ├── indicator.tsx
│ │ │ ├── size.tsx
│ │ │ ├── skeleton.tsx
│ │ │ ├── state.tsx
│ │ │ └── tipAlign.tsx
│ │ ├── hybridcloud-dark.scss
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ └── index.tsx
│ ├── locale
│ │ ├── en-us.ts
│ │ ├── it-it.ts
│ │ ├── ja-jp.ts
│ │ ├── vi-vn.ts
│ │ ├── zh-cn.ts
│ │ ├── zh-hk.ts
│ │ └── zh-tw.ts
│ ├── menu-button
│ │ ├── b-design.scss
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── menu.tsx
│ │ │ ├── select.tsx
│ │ │ └── size.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── xconsole.scss
│ │ └── yunxiao-v5.scss
│ ├── menu
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accordian.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── context.tsx
│ │ │ ├── csutom-select.tsx
│ │ │ ├── custom-popup.tsx
│ │ │ ├── hover.tsx
│ │ │ ├── hoz.tsx
│ │ │ ├── popup-align.tsx
│ │ │ ├── popup.tsx
│ │ │ ├── render-more.tsx
│ │ │ ├── select.tsx
│ │ │ └── selected.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ └── yunxiao-v5.scss
│ ├── message
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── control.tsx
│ │ │ ├── custom-style.tsx
│ │ │ ├── inline-close.tsx
│ │ │ ├── size-shape.tsx
│ │ │ ├── toast-quick.tsx
│ │ │ ├── toast.tsx
│ │ │ ├── type.tsx
│ │ │ ├── update-message.tsx
│ │ │ └── withContext.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ └── yunxiao-v5.scss
│ ├── modal
│ │ ├── demo
│ │ │ ├── basic-yuxiao.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── side-drawer.tsx
│ │ │ └── title-editable.tsx
│ │ ├── hybridcloud-dark.scss
│ │ ├── hybridcloud.scss
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── yunxiao-dark.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── nav
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── custom.tsx
│ │ │ ├── fixed.tsx
│ │ │ ├── group.tsx
│ │ │ ├── icon-only.tsx
│ │ │ ├── open-mode.tsx
│ │ │ ├── popup-align.tsx
│ │ │ ├── vertical-smart.tsx
│ │ │ └── vertical.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ └── main.scss
│ ├── notification
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── duration.tsx
│ │ │ ├── icon.tsx
│ │ │ ├── position.tsx
│ │ │ ├── style.tsx
│ │ │ ├── type.tsx
│ │ │ └── update.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── number-picker
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── editable.tsx
│ │ │ ├── format.tsx
│ │ │ ├── limit.tsx
│ │ │ ├── mobile.tsx
│ │ │ ├── precision.tsx
│ │ │ ├── size.tsx
│ │ │ ├── step.tsx
│ │ │ └── trigger.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── overlay
│ │ ├── demo
│ │ │ ├── align.tsx
│ │ │ ├── backdrop.tsx
│ │ │ ├── baisc.tsx
│ │ │ ├── controlled.tsx
│ │ │ ├── nested.tsx
│ │ │ ├── popup.tsx
│ │ │ ├── scroll.tsx
│ │ │ └── trigger-type.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── pagination
│ │ ├── demo
│ │ │ ├── control.tsx
│ │ │ ├── dropdown-direction.tsx
│ │ │ ├── link.tsx
│ │ │ ├── more.tsx
│ │ │ ├── page-size.tsx
│ │ │ ├── shape.tsx
│ │ │ ├── show-jump.tsx
│ │ │ ├── show-total.tsx
│ │ │ ├── size.tsx
│ │ │ ├── type.tsx
│ │ │ └── uncontrol.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ └── xconsole.scss
│ ├── paragraph
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ └── type.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── progress
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── circle.tsx
│ │ │ ├── color.tsx
│ │ │ ├── controlled.tsx
│ │ │ ├── percentrender.tsx
│ │ │ ├── progressive.tsx
│ │ │ ├── size.tsx
│ │ │ └── state.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── radio
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── button.tsx
│ │ │ ├── control.tsx
│ │ │ ├── dataSource.tsx
│ │ │ ├── direction.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── group.tsx
│ │ │ ├── isPreview.tsx
│ │ │ ├── uncontrol.tsx
│ │ │ └── useWithGrid.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── xconsole.scss
│ │ └── yunxiao.scss
│ ├── range
│ │ ├── b-design.scss
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── change.tsx
│ │ │ ├── control.tsx
│ │ │ ├── fixedWidth.tsx
│ │ │ ├── marks.tsx
│ │ │ ├── reverse.tsx
│ │ │ └── tipRender.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ └── main.scss
│ ├── rating
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── grade.tsx
│ │ │ ├── half.tsx
│ │ │ ├── render-preview.tsx
│ │ │ └── size.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ └── yunxiao-v5.scss
│ ├── responsive-grid
│ │ ├── demo
│ │ │ └── basic.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── search
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── base.tsx
│ │ │ ├── combobox.tsx
│ │ │ ├── custom.tsx
│ │ │ ├── filter.tsx
│ │ │ ├── size.tsx
│ │ │ └── type.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── select
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── combobox-basic.tsx
│ │ │ ├── combobox-remote.tsx
│ │ │ ├── combobox.tsx
│ │ │ ├── custom-menu-props.tsx
│ │ │ ├── custom-menu.tsx
│ │ │ ├── custom-overlay.tsx
│ │ │ ├── custom-value.tsx
│ │ │ ├── max-count.tsx
│ │ │ ├── multiple.tsx
│ │ │ ├── select-basic.tsx
│ │ │ ├── select-cascader.tsx
│ │ │ ├── select-label.tsx
│ │ │ ├── select-options-group.tsx
│ │ │ ├── select-scroll-load.tsx
│ │ │ ├── select-search.tsx
│ │ │ ├── tag.tsx
│ │ │ ├── use-detail-value.tsx
│ │ │ └── virtual-select.tsx
│ │ ├── hybridcloud-dark.scss
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── shell
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── complicated.tsx
│ │ │ ├── header-global-local.tsx
│ │ │ └── header-global.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── slider
│ │ ├── demo
│ │ │ ├── arrow-position.tsx
│ │ │ ├── autoplay.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── button-size.tsx
│ │ │ ├── center-mode.tsx
│ │ │ ├── custom-arrow.tsx
│ │ │ ├── custom-slide.tsx
│ │ │ ├── dots-direction.tsx
│ │ │ ├── dots-render.tsx
│ │ │ ├── dots-triggerType.tsx
│ │ │ ├── fade.tsx
│ │ │ ├── infinite.tsx
│ │ │ ├── multiple.tsx
│ │ │ ├── pause-on-hover.tsx
│ │ │ ├── slick-goto.tsx
│ │ │ ├── slide-change-hook.tsx
│ │ │ ├── slide-direction.tsx
│ │ │ ├── slider-with-dialog.tsx
│ │ │ ├── slider-wrapper.tsx
│ │ │ └── variable-width.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── split-button
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── composite.tsx
│ │ │ ├── menu.tsx
│ │ │ └── size.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ └── yunxiao-v5.scss
│ ├── step
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── controlled.tsx
│ │ │ ├── custom-step-item.tsx
│ │ │ ├── direction.tsx
│ │ │ ├── disable.tsx
│ │ │ ├── percent.tsx
│ │ │ ├── read-only.tsx
│ │ │ └── step-process-failed.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── xconsole.scss
│ │ └── yunxiao-v5.scss
│ ├── switch
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── checked-children.tsx
│ │ │ ├── disabled.tsx
│ │ │ └── size.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── tab
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── closable.tsx
│ │ │ ├── custom-style.tsx
│ │ │ ├── custom-tab.tsx
│ │ │ ├── disable-keyboard.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── editable-tab.tsx
│ │ │ ├── excess-mode.tsx
│ │ │ ├── extra.tsx
│ │ │ ├── lazy-load.tsx
│ │ │ ├── nested.tsx
│ │ │ ├── position.tsx
│ │ │ ├── shape.tsx
│ │ │ ├── size.tsx
│ │ │ ├── tab-in-grid.tsx
│ │ │ └── trigger-type.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ ├── yunxiao-v5.scss
│ │ └── yunxiao.scss
│ ├── table
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── advanced.tsx
│ │ │ ├── basic-columns.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── clear-selection.tsx
│ │ │ ├── colspan-lock-columns.tsx
│ │ │ ├── colspan.tsx
│ │ │ ├── column.tsx
│ │ │ ├── crossline.tsx
│ │ │ ├── crud.tsx
│ │ │ ├── custom-loading.tsx
│ │ │ ├── dragable.tsx
│ │ │ ├── editable.tsx
│ │ │ ├── expanded-complex.tsx
│ │ │ ├── expanded-lock.tsx
│ │ │ ├── expanded.tsx
│ │ │ ├── filter&sort.tsx
│ │ │ ├── fixed-header.tsx
│ │ │ ├── get-row-props.tsx
│ │ │ ├── list.tsx
│ │ │ ├── lock-column.tsx
│ │ │ ├── mix.tsx
│ │ │ ├── multiple-header.tsx
│ │ │ ├── pagination.tsx
│ │ │ ├── resize.tsx
│ │ │ ├── row-selection-config.tsx
│ │ │ ├── selection.tsx
│ │ │ ├── style.tsx
│ │ │ └── virtual.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ └── yunxiao.scss
│ ├── tag
│ │ ├── WindColorfulTag
│ │ │ ├── Colored.tsx
│ │ │ ├── ColoredGroup.tsx
│ │ │ ├── constants.ts
│ │ │ └── index.ts
│ │ ├── b-design.scss
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── closable.tsx
│ │ │ ├── colorful-tag.tsx
│ │ │ ├── icon.tsx
│ │ │ ├── selectable.tsx
│ │ │ ├── size.tsx
│ │ │ └── wind-colored-tag.tsx
│ │ ├── hybridcloud-dark.scss
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ ├── xconsole.scss
│ │ └── yunxiao.scss
│ ├── theme
│ │ ├── aone
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ ├── overwite-var.scss
│ │ │ └── overwrite.scss
│ │ ├── atomgit
│ │ │ ├── css-var-all.scss
│ │ │ ├── css-var-custom.scss
│ │ │ ├── css-var-definition.scss
│ │ │ ├── index-common.scss
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ └── overwrite.scss
│ │ ├── b-design
│ │ │ ├── css-var-custom.scss
│ │ │ ├── css-var-definition.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ └── overwrite.scss
│ │ ├── hybridcloud-dark
│ │ │ ├── css-var-custom.scss
│ │ │ ├── css-var-definition.scss
│ │ │ ├── global.scss
│ │ │ ├── index-common.scss
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ └── overwrite.scss
│ │ ├── hybridcloud
│ │ │ ├── css-var-all.scss
│ │ │ ├── css-var-custom.scss
│ │ │ ├── css-var-definition.scss
│ │ │ ├── global.scss
│ │ │ ├── index-common.scss
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ └── overwrite.scss
│ │ ├── teamix
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ ├── overwite-var.scss
│ │ │ └── overwrite.scss
│ │ ├── wind
│ │ │ ├── css-var-all.scss
│ │ │ ├── css-var-custom-reset.scss
│ │ │ ├── css-var-custom.scss
│ │ │ ├── css-var-definition.scss
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ └── overwrite.scss
│ │ ├── xconsole-dark
│ │ │ ├── css-var-all.scss
│ │ │ ├── css-var-custom-reset.scss
│ │ │ ├── css-var-custom.scss
│ │ │ ├── css-var-definition.scss
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ └── overwrite.scss
│ │ ├── xconsole
│ │ │ ├── css-var-all.scss
│ │ │ ├── css-var-custom-reset.scss
│ │ │ ├── css-var-custom.scss
│ │ │ ├── css-var-definition.scss
│ │ │ ├── icon.scss
│ │ │ ├── index-common.scss
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ ├── legacy-icons.scss
│ │ │ ├── overwrite.scss
│ │ │ └── wind-icon.scss
│ │ ├── yunxiao-dark
│ │ │ ├── css-var-all.scss
│ │ │ ├── css-var-custom.scss
│ │ │ ├── css-var-definition.scss
│ │ │ ├── index-common.scss
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ └── overwrite.scss
│ │ ├── yunxiao-v5
│ │ │ ├── css-var-all.scss
│ │ │ ├── css-var-custom.scss
│ │ │ ├── css-var-definition.scss
│ │ │ ├── index-common.scss
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ └── overwrite.scss
│ │ └── yunxiao
│ │ │ ├── css-var-all.scss
│ │ │ ├── css-var-custom.scss
│ │ │ ├── css-var-definition.scss
│ │ │ ├── index-common.scss
│ │ │ ├── index-no-reset.scss
│ │ │ ├── index-no-var.scss
│ │ │ ├── index.scss
│ │ │ └── overwrite.scss
│ ├── time-picker
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── default-value.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── field.tsx
│ │ │ ├── format.tsx
│ │ │ ├── render-menu.tsx
│ │ │ ├── size.tsx
│ │ │ ├── step.tsx
│ │ │ └── value.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── time-picker2
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── default-value.tsx
│ │ │ ├── disabled.tsx
│ │ │ ├── field.tsx
│ │ │ ├── format.tsx
│ │ │ ├── no-border.tsx
│ │ │ ├── preset.tsx
│ │ │ ├── render-menu.tsx
│ │ │ ├── size.tsx
│ │ │ ├── step.tsx
│ │ │ └── value.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.tsx
│ │ └── xconsole.scss
│ ├── timeline
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── content.tsx
│ │ │ ├── custom.tsx
│ │ │ ├── fold.tsx
│ │ │ ├── state.tsx
│ │ │ └── timeLeft.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ └── main.scss
│ ├── transfer
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── control.tsx
│ │ │ ├── custom-panel.tsx
│ │ │ ├── custom.tsx
│ │ │ ├── search.tsx
│ │ │ ├── simple.tsx
│ │ │ ├── sortable.tsx
│ │ │ ├── table-transfer.tsx
│ │ │ └── virtual-list.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.tsx
│ │ ├── main.scss
│ │ └── yunxiao-v5.scss
│ ├── tree-select
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── basic.tsx
│ │ │ ├── check.tsx
│ │ │ ├── control.tsx
│ │ │ ├── data.tsx
│ │ │ ├── pro-search.tsx
│ │ │ ├── search.tsx
│ │ │ ├── select.tsx
│ │ │ └── virtual-tree.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ ├── index.scss
│ │ └── index.tsx
│ ├── tree
│ │ ├── custom.scss
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── control-check.tsx
│ │ │ ├── control-select.tsx
│ │ │ ├── data.tsx
│ │ │ ├── draggable.tsx
│ │ │ ├── dynamic.tsx
│ │ │ ├── icon.tsx
│ │ │ ├── line.tsx
│ │ │ ├── node-block.tsx
│ │ │ ├── render-child-nodes.tsx
│ │ │ ├── search-tree.tsx
│ │ │ └── virtual-tree.tsx
│ │ ├── hybridcloud.scss
│ │ ├── index.md
│ │ └── index.tsx
│ ├── tsconfig.json
│ ├── typography
│ │ ├── demo
│ │ │ ├── basic.tsx
│ │ │ ├── paragraph.tsx
│ │ │ ├── text.tsx
│ │ │ └── title.tsx
│ │ ├── index.md
│ │ └── index.tsx
│ ├── upload
│ │ ├── demo
│ │ │ ├── accessibility.tsx
│ │ │ ├── after-select.tsx
│ │ │ ├── base.tsx
│ │ │ ├── beforeupload.tsx
│ │ │ ├── card.tsx
│ │ │ ├── crop.tsx
│ │ │ ├── data.tsx
│ │ │ ├── directory.tsx
│ │ │ ├── dragger.tsx
│ │ │ ├── extra.tsx
│ │ │ ├── image.tsx
│ │ │ ├── limit.tsx
│ │ │ ├── maxsize.tsx
│ │ │ ├── oss.tsx
│ │ │ ├── paste.tsx
│ │ │ ├── submit.tsx
│ │ │ ├── text.tsx
│ │ │ └── with-form.tsx
│ │ ├── index.md
│ │ ├── index.tsx
│ │ └── main.scss
│ ├── utils
│ │ ├── cnCharHoc.tsx
│ │ ├── events.ts
│ │ ├── index.ts
│ │ ├── isReactFragment.ts
│ │ ├── keycode.ts
│ │ ├── locale
│ │ │ ├── en-us.ts
│ │ │ ├── index.ts
│ │ │ ├── zh-cn.ts
│ │ │ └── zh-tw.ts
│ │ ├── popupHoc.tsx
│ │ ├── useCssVar.tsx
│ │ ├── withFusionConfig.tsx
│ │ └── withThemeClass.tsx
│ └── virtual-list
│ │ ├── demo
│ │ ├── basic.tsx
│ │ ├── initial-index.tsx
│ │ └── item-size-getter.tsx
│ │ ├── index.md
│ │ └── index.tsx
├── tsconfig.json
├── vite.config.ts
└── xconsole.breezr.config.js
├── config
├── config.ts
├── configComponents.tsx
├── demoOpts.tsx
├── demoWrapper.tsx
├── dev-docs
│ ├── README.md
│ ├── contents
│ │ ├── affix.md
│ │ ├── animate.md
│ │ ├── avatar.md
│ │ ├── badge.md
│ │ ├── balloon.md
│ │ ├── box.md
│ │ ├── breadcrumb.md
│ │ ├── button.md
│ │ ├── calendar.md
│ │ ├── card.md
│ │ ├── cascader-select.md
│ │ ├── cascader.md
│ │ ├── checkbox.md
│ │ ├── collapse.md
│ │ ├── config-provider.md
│ │ ├── date-picker.md
│ │ ├── dialog.md
│ │ ├── divider.md
│ │ ├── drawer.md
│ │ ├── dropdown.md
│ │ ├── field.md
│ │ ├── form.md
│ │ ├── grid.md
│ │ ├── icon.md
│ │ ├── input.md
│ │ ├── list.md
│ │ ├── loading.md
│ │ ├── menu-button.md
│ │ ├── menu.md
│ │ ├── message.md
│ │ ├── nav.md
│ │ ├── notification.md
│ │ ├── number-picker.md
│ │ ├── overlay.md
│ │ ├── pagination.md
│ │ ├── paragraph.md
│ │ ├── progress.md
│ │ ├── radio.md
│ │ ├── range.md
│ │ ├── rating.md
│ │ ├── responsive-grid.md
│ │ ├── search.md
│ │ ├── select.md
│ │ ├── shell.md
│ │ ├── slider.md
│ │ ├── split-button.md
│ │ ├── step.md
│ │ ├── switch.md
│ │ ├── tab.md
│ │ ├── table.md
│ │ ├── tag.md
│ │ ├── time-picker.md
│ │ ├── timeline.md
│ │ ├── transfer.md
│ │ ├── tree-select.md
│ │ ├── tree.md
│ │ ├── typography.md
│ │ ├── upload.md
│ │ └── virtual-list.md
│ └── script.js
└── modifyCodesandbox.ts
├── extend-components
├── console-layout
│ ├── .gitignore
│ ├── README.md
│ ├── breezr.config.js
│ ├── declare.d.ts
│ ├── demos
│ │ ├── _theme.tsx
│ │ ├── basic
│ │ │ ├── 1$.tsx
│ │ │ └── 2$.tsx
│ │ ├── controlled
│ │ │ └── index$.tsx
│ │ ├── hybridcloud-dark
│ │ │ └── basic$.tsx
│ │ ├── hybridcloud-light
│ │ │ └── basic$.tsx
│ │ └── uncontrolled
│ │ │ └── index$.tsx
│ ├── index.html
│ ├── package.json
│ ├── src
│ │ ├── AppLayout.tsx
│ │ ├── Nav.tsx
│ │ ├── NavCollapseTrigger.tsx
│ │ ├── index.ts
│ │ ├── styles
│ │ │ ├── AppLayout.ts
│ │ │ ├── Content.ts
│ │ │ ├── Nav.ts
│ │ │ └── index.ts
│ │ ├── theme
│ │ │ ├── context.ts
│ │ │ ├── hybridcloud-dark.tsx
│ │ │ └── hybridcloud-light.tsx
│ │ └── tsconfig.json
│ ├── tsconfig.json
│ └── vite.demos.ts
├── console-menu
│ ├── .gitignore
│ ├── .npmignore
│ ├── README.mdx
│ ├── RoutableMenu.js
│ ├── breezr.config.js
│ ├── demos
│ │ ├── _theme.tsx
│ │ ├── basic$.tsx
│ │ ├── controlled-menu$.tsx
│ │ ├── default-open-all$.tsx
│ │ ├── hybridcloud-dark
│ │ │ └── basic$.tsx
│ │ ├── hybridcloud-light
│ │ │ └── basic$.tsx
│ │ ├── routable-menu$.tsx
│ │ ├── routable-menu-default-open.tsx
│ │ ├── secondary$.tsx
│ │ ├── switch-header$.tsx
│ │ ├── with-divider$.tsx
│ │ └── with-items-declaration$.tsx
│ ├── package.json
│ ├── src
│ │ ├── ConsoleMenu.tsx
│ │ ├── Header.tsx
│ │ ├── ItemDescriptor.tsx
│ │ ├── RoutableMenu.tsx
│ │ ├── RoutableMenuTypes.tsx
│ │ ├── index.ts
│ │ ├── index.umd.ts
│ │ ├── styles
│ │ │ ├── Divider.tsx
│ │ │ ├── DropMenu.tsx
│ │ │ ├── Header.tsx
│ │ │ ├── Item.tsx
│ │ │ ├── Menu.tsx
│ │ │ ├── SubMenu.tsx
│ │ │ └── index.ts
│ │ ├── theme
│ │ │ ├── context.ts
│ │ │ ├── hybridcloud-dark.tsx
│ │ │ └── hybridcloud-light.tsx
│ │ ├── tsconfig.json
│ │ └── utils.tsx
│ ├── tsconfig.json
│ └── vite.demos.ts
├── console-page
│ ├── .gitignore
│ ├── README.md
│ ├── breezr.config.js
│ ├── declare.d.ts
│ ├── demos
│ │ ├── _theme.tsx
│ │ ├── basic$.tsx
│ │ ├── long-title$.tsx
│ │ ├── width-overflow$.tsx
│ │ ├── with-custom-back-arrow-render$.tsx
│ │ ├── with-menu$.tsx
│ │ ├── with-scenery-theme$.tsx
│ │ └── without-title$.tsx
│ ├── index.html
│ ├── package.json
│ ├── src
│ │ ├── BackArrow.tsx
│ │ ├── Breadcrumb.tsx
│ │ ├── Content.tsx
│ │ ├── Header.tsx
│ │ ├── Menu.tsx
│ │ ├── MenuContainer.tsx
│ │ ├── Page.tsx
│ │ ├── index.ts
│ │ ├── styles
│ │ │ ├── BackArrow.tsx
│ │ │ ├── Content.tsx
│ │ │ ├── Header.tsx
│ │ │ ├── Menu.tsx
│ │ │ ├── Page.tsx
│ │ │ ├── Partial.tsx
│ │ │ ├── index.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ ├── tsconfig.json
│ └── vite.demos.ts
├── fake-browser
│ ├── .gitignore
│ ├── README.md
│ ├── breezr.config.js
│ ├── declare.d.ts
│ ├── demos
│ │ ├── _theme.tsx
│ │ ├── basic$.tsx
│ │ └── withWrapper$.tsx
│ ├── index.html
│ ├── package.json
│ ├── src
│ │ ├── FakeBrowser.tsx
│ │ ├── WithWrapper.tsx
│ │ ├── index.ts
│ │ └── tsconfig.json
│ ├── tsconfig.json
│ └── vite.demos.ts
└── truncate
│ ├── .gitignore
│ ├── README.md
│ ├── breezr.config.js
│ ├── declare.d.ts
│ ├── demos
│ ├── _theme.tsx
│ ├── auto-width$.tsx
│ ├── basic$.tsx
│ ├── custom-omission$.tsx
│ ├── dynamic-children$.tsx
│ ├── legacyProps$.tsx
│ ├── multi-lines$.tsx
│ ├── non-string$.tsx
│ ├── popupStyle$.tsx
│ └── tooltip-max-width$.tsx
│ ├── index.html
│ ├── package.json
│ ├── src
│ ├── MultiLines.tsx
│ ├── Truncate.tsx
│ ├── TruncateByLength.tsx
│ ├── TruncateByWidth.tsx
│ ├── constants.ts
│ ├── index.tsx
│ ├── styles.tsx
│ ├── tsconfig.json
│ └── utils.tsx
│ ├── tsconfig.json
│ └── vite.demos.ts
├── image
└── dingtalk-group.jpg
├── lerna.json
├── package.json
├── tsconfig.json
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | .vscode
4 | build
5 | doc-dist
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | # Use internal registry
2 | # @see http://web.npm.alibaba-inc.com/
3 | # registry = https://registry.npm.taobao.org
4 | registry = https://registry.npm.alibaba-inc.com
5 |
6 | sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
7 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true,
4 | "printWidth": 80,
5 | "trailingComma": "none"
6 | }
7 |
--------------------------------------------------------------------------------
/base-components/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | dist
4 | es
5 | lib
6 | docs-dist
7 | types
--------------------------------------------------------------------------------
/base-components/.npmrc:
--------------------------------------------------------------------------------
1 | # Use internal registry
2 | # @see http://web.npm.alibaba-inc.com/
3 | # registry = https://registry.npm.taobao.org
4 | # registry = https://registry.npm.alibaba-inc.com
5 |
6 | sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
7 |
--------------------------------------------------------------------------------
/base-components/breezr.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | [
4 | '@alicloud/console-toolkit-preset-component',
5 | {
6 | moduleName: 'AliCloudComponents',
7 | useTypescript: true,
8 | disableStyleRemove: true,
9 | externals: ['moment'],
10 | webpack(config) {
11 | config.entry['index-with-locale'] = './index-with-locale'
12 | return config
13 | }
14 | }
15 | ]
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/base-components/fixtures/breezr/.gitignore:
--------------------------------------------------------------------------------
1 | build
--------------------------------------------------------------------------------
/base-components/fixtures/breezr/.npmrc:
--------------------------------------------------------------------------------
1 | # registry = http://registry.npm.alibaba-inc.com
--------------------------------------------------------------------------------
/base-components/fixtures/breezr/breezr.config.js:
--------------------------------------------------------------------------------
1 | const config = {
2 | // 请自己加入 wepback-merge 自定义
3 | // webpack: (config) => (webpack-merge(config, {}))
4 | analyze: true
5 | }
6 |
7 | module.exports = {
8 | presets: [['@alicloud/console-toolkit-preset-official', config]]
9 | }
10 |
--------------------------------------------------------------------------------
/base-components/fixtures/breezr/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "build": "../../node_modules/.bin/breezr build --engine webpack --analyze"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/base-components/fixtures/breezr/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Document
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/base-components/fixtures/breezr/src/index.js:
--------------------------------------------------------------------------------
1 | import './index.less'
2 | import { Button } from '@alicloudfe/components'
3 | // import
4 |
5 | console.log(Button)
6 |
7 | // import * as all from '@alicloudfe/components'
8 |
9 | // console.log(all)
10 |
--------------------------------------------------------------------------------
/base-components/fixtures/breezr/src/index.less:
--------------------------------------------------------------------------------
1 | @import '~@alicloudfe/components/dist/xconsole.css';
2 |
--------------------------------------------------------------------------------
/base-components/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
11 | 📘阿里云组件库demo
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/base-components/pages/404$.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Redirect } from 'react-router-dom'
3 |
4 | const Page404: React.FC = (props) => {
5 | return
6 | }
7 |
8 | export default Page404
9 |
--------------------------------------------------------------------------------
/base-components/pages/declare.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*?pureCSS'
--------------------------------------------------------------------------------
/base-components/pages/dynamic-theme-base/wind.scss:
--------------------------------------------------------------------------------
1 | // 云组件库的自定义var要比fusionVar权重高
2 | $css-var-scope: '.theme-wind-dynamic.theme-wind-dynamic';
3 | @import '../../src/theme/wind/css-var-custom.scss';
4 | @import '../../src/theme/xconsole/index-no-var.scss';
5 |
--------------------------------------------------------------------------------
/base-components/pages/dynamic-theme-base/xconsole-dark.scss:
--------------------------------------------------------------------------------
1 | // 云组件库的自定义var要比fusionVar权重高
2 | $css-var-scope: '.theme-xconsole-dark-dynamic.theme-xconsole-dark-dynamic';
3 | @import '../../src/theme/xconsole-dark/css-var-custom.scss';
4 | @import '../../src/theme/xconsole/index-no-var.scss';
5 |
--------------------------------------------------------------------------------
/base-components/pages/dynamic-theme-base/xconsole.scss:
--------------------------------------------------------------------------------
1 | // 云组件库的自定义var要比fusionVar权重高
2 | $css-var-scope: '.theme-xconsole-dynamic.theme-xconsole-dynamic';
3 | @import '../../src/theme/xconsole/css-var-custom.scss';
4 | @import '../../src/theme/xconsole/index-no-var.scss';
5 |
--------------------------------------------------------------------------------
/base-components/pages/index$.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 开发环境说明
3 | ---
4 |
5 | # 开发环境说明
6 |
7 | 这是组件的本地开发环境。你可以开发用例将组件的 demo 目录下,这个目录下的每个 tsx/jsx/mdx 会成为一个页面。
8 |
9 | 在 demo 中,你可以 `import {xxx} from '@alicloudfe/components'`,从用户的视角来 import 组件库,而不应该用相对路径,以便我们将 demo 通过文档透出给用户。`@alicloudfe/components`会被映射到`src/index.ts`
10 |
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/aone.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-aone';
2 | @import '../../src/theme/yunxiao/css-var-custom.scss';
3 | @import '../../src/theme/yunxiao/css-var-definition.scss';
4 | // 引入颜色覆盖变量
5 | @import '../../src/theme/aone/overwite-var.scss';
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/atomgit.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-atomgit';
2 | @import '../../src/theme/atomgit/css-var-all.scss';
3 |
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/b-design.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-b-design';
2 | @import '../../src/theme/b-design/css-var-definition.scss';
3 | @import '../../src/theme/b-design/css-var-custom.scss';
4 |
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/hybridcloud-dark.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-hybridcloud-dark';
2 | @import '../../src/theme/hybridcloud-dark/css-var-definition.scss';
3 | @import '../../src/theme/hybridcloud-dark/css-var-custom.scss';
4 |
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-hybridcloud';
2 | @import '../../src/theme/hybridcloud/css-var-all.scss';
3 |
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/teamix.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-teamix';
2 | @import '../../src/theme/yunxiao/css-var-custom.scss';
3 | @import '../../src/theme/yunxiao/css-var-definition.scss';
4 | // 引入颜色覆盖变量
5 | @import '../../src/theme/teamix/overwite-var.scss';
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/wind.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-wind, .theme-wind *:before, .theme-wind *:after';
2 | @import '../../src/theme/wind/css-var-all.scss';
3 |
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/xconsole-dark.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-xconsole-dark';
2 | @import '../../src/theme/xconsole-dark/css-var-all.scss';
3 |
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/xconsole.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-xconsole, .theme-xconsole *:before, .theme-xconsole *:after';
2 | @import '../../src/theme/xconsole/css-var-all.scss';
3 |
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/yunxiao-dark.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-yunxiao-dark';
2 | @import '../../src/theme/yunxiao-dark/css-var-all.scss';
3 |
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-yunxiao-v5';
2 | @import '../../src/theme/yunxiao-v5/css-var-all.scss';
3 |
--------------------------------------------------------------------------------
/base-components/pages/theme-vars/yunxiao.scss:
--------------------------------------------------------------------------------
1 | $css-var-scope: '.theme-yunxiao';
2 | @import '../../src/theme/yunxiao/css-var-all.scss';
3 |
--------------------------------------------------------------------------------
/base-components/scripts/add-fusion-type-export.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs-extra')
2 | const path = require('path')
3 | const { getComponentNames } = require('./utils')
4 |
5 | // 不是fusion组件
6 | const EXCLUDE = ['modal']
7 |
8 | getComponentNames()
9 | .filter((name) => !EXCLUDE.includes(name))
10 | .forEach((name) => {
11 | const dtsPath = path.resolve(__dirname, `../types/${name}/index.d.ts`)
12 | let content = fs.readFileSync(dtsPath, 'utf-8')
13 | content += `\nexport * from '@alifd/next/types/${name}'\n`
14 | fs.writeFileSync(dtsPath, content)
15 | })
16 |
--------------------------------------------------------------------------------
/base-components/scripts/publish-wind/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | esm
4 | lib
5 |
6 |
--------------------------------------------------------------------------------
/base-components/scripts/publish-wind/.npmignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aliyun/cloud-design/525f156c3c68f8e8bd117c020558779bfd0cab69/base-components/scripts/publish-wind/.npmignore
--------------------------------------------------------------------------------
/base-components/scripts/publish-wind/index-noreset.scss:
--------------------------------------------------------------------------------
1 | // 这个文件允许用户通过`import '@alicloud/console-components/index-noreset.scss'来导入样式`
2 | @import './dist/wind-noreset.css';
3 |
--------------------------------------------------------------------------------
/base-components/scripts/publish-wind/index.scss:
--------------------------------------------------------------------------------
1 | // 这个文件允许用户通过`import '@alicloud/console-components/index.scss'来全量导入样式`
2 | @import './dist/wind.css';
3 |
--------------------------------------------------------------------------------
/base-components/scripts/publish-xconsole/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | esm
4 | lib
5 |
6 |
--------------------------------------------------------------------------------
/base-components/scripts/publish-xconsole/.npmignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aliyun/cloud-design/525f156c3c68f8e8bd117c020558779bfd0cab69/base-components/scripts/publish-xconsole/.npmignore
--------------------------------------------------------------------------------
/base-components/src/affix/demo/basic.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 基本
3 | * @description 默认情况下,Affix 的默认目标容器元素是整个 `window`,并且 `offsetTop = 0`,
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Affix, Button } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 |
16 |
17 |
18 |
Scroll window to see button affixed.
19 |
20 | )
21 | return
22 | }
23 | const Style = styled.div``
24 |
--------------------------------------------------------------------------------
/base-components/src/affix/demo/custom-offset.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 自定义偏移量
3 | * @description 可以通过 `offsetTop` 或 `offsetBottom` 自定义偏移量。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Affix, Button } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 |
16 | )
17 | return
18 | }
19 | const Style = styled.div``
20 |
--------------------------------------------------------------------------------
/base-components/src/affix/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Affix as NextAffix } from '@alifd/next'
3 |
4 | export default NextAffix;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/animate/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Animate as NextAnimate } from '@alifd/next'
3 |
4 | export default NextAnimate;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/avatar/demo/with-badge.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 徽标
3 | * @description 通常用于消息提示。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Avatar, Badge } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | )
26 | return
27 | }
28 | const Style = styled.div``
29 |
--------------------------------------------------------------------------------
/base-components/src/avatar/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Avatar as NextAvatar } from '@alifd/next'
3 |
4 | export default NextAvatar;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/badge/demo/clickable.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 徽标可点击
3 | * @description 用``标签包裹组件,实现徽标本身可点击。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Badge } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 |
16 |
17 |
18 | )
19 | return
20 | }
21 | const Style = styled.div`
22 | .basic-example {
23 | display: inline-block;
24 | width: 42px;
25 | height: 42px;
26 | border-radius: 8px;
27 | background: #eee;
28 | }
29 |
30 | .next-badge {
31 | margin-right: 16px;
32 | }
33 | `
34 |
--------------------------------------------------------------------------------
/base-components/src/badge/demo/dot.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 讨嫌的小红点
3 | * @description 没有具体的数字,仅展示小红点。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Badge, Icon } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | A Link
22 |
23 |
24 | )
25 | return
26 | }
27 | const Style = styled.div`
28 | .next-badge {
29 | margin-right: 16px;
30 | }
31 | `
32 |
--------------------------------------------------------------------------------
/base-components/src/badge/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Badge as NextBadge } from '@alifd/next'
3 |
4 | export default NextBadge;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/badge/main.scss:
--------------------------------------------------------------------------------
1 | $badge-prefix: '.' + $css-prefix + 'badge';
2 |
3 | #{$badge-prefix} {
4 | & &-count, & &-dot {
5 | box-shadow: 0 0 0 2px var(--badge-border-color, #fff);
6 | }
7 | }
--------------------------------------------------------------------------------
/base-components/src/balloon/custom.scss:
--------------------------------------------------------------------------------
1 | .next-balloon-content.next-balloon-content {
2 | word-break: break-word;
3 | }
--------------------------------------------------------------------------------
/base-components/src/balloon/xconsole.scss:
--------------------------------------------------------------------------------
1 | .#{$css-prefix}balloon {
2 | &-close {
3 | display: inline-flex;
4 | justify-content: center;
5 | align-items: center;
6 | width: 18px;
7 | height: 18px;
8 | border-radius: 50%;
9 | &:hover {
10 | background-color: var(--balloon-hover-bg, #f7f9fa);
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/base-components/src/box/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Box as NextBox } from '@alifd/next'
3 |
4 | type NextBoxProps = React.ComponentProps
5 |
6 | const Box: typeof NextBox = React.forwardRef((props: NextBoxProps, ref) => {
7 | return
8 | }) as any
9 |
10 | export default Box
11 |
--------------------------------------------------------------------------------
/base-components/src/breadcrumb/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Breadcrumb as NextBreadcrumb } from '@alifd/next'
3 |
4 | export default NextBreadcrumb;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/breadcrumb/xconsole.scss:
--------------------------------------------------------------------------------
1 | .#{$css-prefix}breadcrumb-icon-sep {
2 | &::before {
3 | // 修复wind主题下的图标渲染问题
4 | // fusion会将这个icon的content写死为配置平台的配置结果
5 | // 这个content是NextIcon的字体码,而不是WindIcon的字体码
6 | font-family: NextIcon;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/base-components/src/breadcrumb/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | .#{$css-prefix}breadcrumb .#{$css-prefix}breadcrumb-item .#{$css-prefix}breadcrumb-text {
2 | height: var(--s-5, 20px);
3 | }
--------------------------------------------------------------------------------
/base-components/src/breadcrumb/yunxiao.scss:
--------------------------------------------------------------------------------
1 | .#{$css-prefix}breadcrumb .#{$css-prefix}breadcrumb-item .#{$css-prefix}breadcrumb-text {
2 | line-height: var(--font-lineheight-2, 1.5);
3 | height: var(--s-5, 20px);
4 | }
--------------------------------------------------------------------------------
/base-components/src/button/demo/only-icon.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 仅图标按钮
3 | * @description Button只有图标时,应该显示为正方形
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Button, Icon } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
17 |
20 |
21 | )
22 | return
23 | }
24 | const Style = styled.div``
25 |
--------------------------------------------------------------------------------
/base-components/src/button/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | .next-btn.next-btn-normal.isOnlyIcon:not(:disabled) {
2 | &:not(.next-btn-text) {
3 | i {
4 | color: var(--color-text1-2, #5a5a5a);
5 | }
6 | }
7 | &.next-btn-text {
8 | i {
9 | color: var(--color-fill1-6, #848484);
10 | }
11 | }
12 | &:hover {
13 | &.next-btn-text {
14 | i {
15 | color: var(--color-brand1-5);
16 | }
17 | }
18 | }
19 | &:focus {
20 | &.next-btn-text {
21 | i {
22 | color: var(--color-brand1-7);
23 | }
24 | }
25 | }
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/base-components/src/button/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | .next-btn {
2 | font-weight: var(--btn-font-weight, 500);
3 | }
4 | .next-btn-group {
5 | .next-btn.next-btn-primary:not(:first-child) {
6 | border-left-color: var(--color-line1-1, #e8e8e8);
7 | }
8 | .next-btn.next-btn-normal:not(:first-child) {
9 | border-left-color: var(--color-line1-1, #e8e8e8);
10 | }
11 | }
--------------------------------------------------------------------------------
/base-components/src/calendar/demo/basic.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 全屏日历
3 | * @description 最简单的日历用法,用户可以切换年/月。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Calendar } from '@alicloudfe/components'
10 | import moment from 'moment'
11 |
12 | function onDateChange(value) {
13 | console.log(value.format('L'))
14 | }
15 |
16 | export default function DemoComponent() {
17 | const content = (
18 |
19 |
23 |
24 | )
25 | return
26 | }
27 | const Style = styled.div``
28 |
--------------------------------------------------------------------------------
/base-components/src/calendar/demo/card.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 日历卡片
3 | * @description 可以将 `card` 形态的日历组件嵌套在宽高受限的容器中。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Calendar } from '@alicloudfe/components'
10 |
11 | function onDateChange(value) {
12 | console.log(value)
13 | }
14 |
15 | export default function DemoComponent() {
16 | const content = (
17 |
18 |
19 |
20 | )
21 | return
22 | }
23 | const Style = styled.div`
24 | .wrapped-calendar {
25 | width: 300px;
26 | border: 1px solid #c4c6cf;
27 | border-radius: 3px;
28 | padding: 8px;
29 | }
30 | `
31 |
--------------------------------------------------------------------------------
/base-components/src/calendar/demo/disabled.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 禁用日期
3 | * @description 可以通过 `disabledDate` 属性禁止用户选择某些日期。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Calendar } from '@alicloudfe/components'
10 | import moment from 'moment'
11 |
12 | const currentDate = moment()
13 | const disabledDate = function (date) {
14 | return date.valueOf() > currentDate.valueOf()
15 | }
16 |
17 | export default function DemoComponent() {
18 | const content = (
19 |
20 |
21 |
22 | )
23 | return
24 | }
25 | const Style = styled.div`
26 | .wrapped-calendar {
27 | width: 300px;
28 | border: 1px solid #c4c6cf;
29 | border-radius: 3px;
30 | padding: 8px;
31 | }
32 | `
33 |
--------------------------------------------------------------------------------
/base-components/src/calendar/demo/locale.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 多语言
3 | * @description 日期时间的多语言来源于 moment ,可以通过 `moment.locale('zh-cn')` 来设置显示中文。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Calendar } from '@alicloudfe/components'
10 | import moment from 'moment'
11 |
12 | // Setting moment locale to Chinese
13 | moment.locale('zh-cn')
14 |
15 | export default function DemoComponent() {
16 | const content =
17 | return
18 | }
19 | const Style = styled.div``
20 |
--------------------------------------------------------------------------------
/base-components/src/calendar/demo/panel.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 日历面板
3 | * @description 日历面板通用用于嵌套在弹层容器中。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Calendar } from '@alicloudfe/components'
10 | import moment from 'moment'
11 |
12 | export default function DemoComponent() {
13 | const content = (
14 |
15 |
16 |
17 | )
18 | return
19 | }
20 | const Style = styled.div``
21 |
--------------------------------------------------------------------------------
/base-components/src/calendar/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Calendar as NextCalendar } from '@alifd/next'
3 |
4 | export default NextCalendar;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/calendar/main.scss:
--------------------------------------------------------------------------------
1 | // 去掉选中日期动画,修复文字抖动的问题
2 |
3 | .next-calendar-card .next-calendar-cell.next-selected .next-calendar-date,
4 | .next-calendar-card .next-calendar-cell.next-selected .next-calendar-month,
5 | .next-calendar-card .next-calendar-cell.next-selected .next-calendar-year,
6 | .next-calendar-panel .next-calendar-cell.next-selected .next-calendar-date,
7 | .next-calendar-panel .next-calendar-cell.next-selected .next-calendar-month,
8 | .next-calendar-panel .next-calendar-cell.next-selected .next-calendar-year,
9 | .next-calendar-range .next-calendar-cell.next-selected .next-calendar-date,
10 | .next-calendar-range .next-calendar-cell.next-selected .next-calendar-month,
11 | .next-calendar-range .next-calendar-cell.next-selected .next-calendar-year {
12 | animation: none;
13 | }
14 |
--------------------------------------------------------------------------------
/base-components/src/calendar2/demo/basic.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 基础日历
3 | * @description 最简单的日历用法,用户可以切换年/月。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Calendar2 } from '@alicloudfe/components'
10 | import dayjs from 'dayjs'
11 |
12 | function onDateChange(value) {
13 | console.log(value.format('L'))
14 | }
15 |
16 | export default function DemoComponent() {
17 | const content = (
18 |
19 |
23 |
24 | )
25 | return
26 | }
27 | const Style = styled.div``
28 |
--------------------------------------------------------------------------------
/base-components/src/calendar2/demo/card.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 卡片日历
3 | * @description 卡片日历通常用来被嵌套在宽高受限的容器中。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Calendar2 } from '@alicloudfe/components'
10 |
11 | function onDateChange(value) {
12 | console.log(value)
13 | }
14 |
15 | export default function DemoComponent() {
16 | const content = (
17 |
18 |
19 |
20 | )
21 | return
22 | }
23 | const Style = styled.div`
24 | .wrapped-calendar {
25 | width: 300px;
26 | border: 1px solid #eee;
27 | border-radius: 3px;
28 | }
29 | `
30 |
--------------------------------------------------------------------------------
/base-components/src/calendar2/demo/disabled.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 禁用日期
3 | * @description 可以通过 `disabledDate` 属性禁止用户选择某些日期。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Calendar2 } from '@alicloudfe/components'
10 | import dayjs from 'dayjs'
11 |
12 | const currentDate = dayjs()
13 | const disabledDate = function (date) {
14 | return date.valueOf() > currentDate.valueOf()
15 | }
16 |
17 | export default function DemoComponent() {
18 | const content = (
19 |
20 |
21 |
22 | )
23 | return
24 | }
25 | const Style = styled.div`
26 | .wrapped-calendar {
27 | width: 300px;
28 | border: 1px solid #f0f0f0;
29 | border-radius: 3px;
30 | padding: 8px;
31 | }
32 | `
33 |
--------------------------------------------------------------------------------
/base-components/src/calendar2/demo/panel.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 面板日历
3 | * @description 面板日历通常用来被嵌套在弹层容器中。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Calendar2 } from '@alicloudfe/components'
10 | import dayjs from 'dayjs'
11 |
12 | export default function DemoComponent() {
13 | const content = (
14 |
15 |
16 |
17 | )
18 | return
19 | }
20 | const Style = styled.div``
21 |
--------------------------------------------------------------------------------
/base-components/src/calendar2/index.tsx:
--------------------------------------------------------------------------------
1 | import { Calendar2 } from '@alifd/next'
2 |
3 | export default Calendar2 as any
4 |
--------------------------------------------------------------------------------
/base-components/src/calendar2/main.scss:
--------------------------------------------------------------------------------
1 | .next-calendar2 {
2 | background: var(--date-picker-panel-background);
3 | }
--------------------------------------------------------------------------------
/base-components/src/calendar2/xconsole.scss:
--------------------------------------------------------------------------------
1 | .#{$css-prefix}calendar2,
2 | .#{$css-prefix}calendar2-panel {
3 | --color-brand1-9: #0064c8;
4 | }
5 |
--------------------------------------------------------------------------------
/base-components/src/card/demo/collapsable-head.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 收展框(向下推出)
3 | */
4 |
5 | import React, { useState } from 'react'
6 | import { Card } from '@alicloudfe/components'
7 |
8 | interface IProps {}
9 |
10 | const Demo: React.FC = (props) => {
11 | const [collapsed, setCollapsed] = useState(true)
12 | return (
13 |
14 |
18 | 项目标题
19 |
20 | {collapsed && (
21 |
22 | 阿里云公共云控制台是一个包含了100+云产品的庞大产品集群,是一个结构复杂且庞大,目前仍在快速迭代更新的产品体系。我们通过大量实践、梳理和打磨,呈现出公共云控制台设计系统。将为阿里云公共云提供前沿创新、包容且智能的产品解决方案。提供轻松、可信赖的使用体验。呈现简洁有序、精致的视觉体验。
23 |
24 | )}
25 |
26 | )
27 | }
28 |
29 | export default Demo
30 |
--------------------------------------------------------------------------------
/base-components/src/card/hybridcloud-dark.scss:
--------------------------------------------------------------------------------
1 | .next-card-header {
2 | margin-top: 16px;
3 | }
--------------------------------------------------------------------------------
/base-components/src/card/yunxiao.scss:
--------------------------------------------------------------------------------
1 | .yunxiao-card-dropdown-actions-icon.yunxiao-card-dropdown-actions-icon,
2 | .theme-yunxiao .yunxiao-card-dropdown-actions-icon,
3 | .theme-yunxiao-dark .yunxiao-card-dropdown-actions-icon {
4 | color: var(--color-fill1-6, #8B8B8B);
5 | cursor: pointer;
6 | margin-top: 2px;
7 | &::before {
8 | font-size: 16px;
9 | width: 16px;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/base-components/src/cascader-select/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | $cascader-select-prefix: '.' + $css-prefix + 'cascader-select';
2 | $menu-prefix: '.' + $css-prefix + 'menu';
3 |
4 | #{$cascader-select-prefix} {
5 | &-dropdown {
6 | .#{$css-prefix}cascader-menu-wrapper {
7 | @include hybridcloud-scrollbar;
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/base-components/src/cascader-select/index.tsx:
--------------------------------------------------------------------------------
1 | import { CascaderSelect as NextCascaderSelect } from '@alifd/next'
2 | import HOC from '../utils/popupHoc'
3 |
4 | export default HOC(NextCascaderSelect, false)
5 |
--------------------------------------------------------------------------------
/base-components/src/cascader-select/main.scss:
--------------------------------------------------------------------------------
1 | $cascader-select-prefix: '.' + $css-prefix + 'cascader-select';
2 | $menu-prefix: '.' + $css-prefix + 'menu';
3 |
4 | #{$cascader-select-prefix} {
5 | &-dropdown {
6 | background-color: var(--dropdown-bg-color, #fff);
7 |
8 | .#{$css-prefix}cascader-menu-wrapper {
9 | border-left: none;
10 | overflow-y: scroll;
11 | @include alicloud-scrollbar;
12 | }
13 |
14 | #{$menu-prefix} {
15 | border: none;
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/base-components/src/cascader/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | // 混合云主题滚动条样式覆盖
2 | $cascader-prefix: '.' + $css-prefix + 'cascader';
3 |
4 | #{$cascader-prefix} {
5 | #{$cascader-prefix}-menu-wrapper {
6 | @include hybridcloud-scrollbar;
7 | }
8 | }
--------------------------------------------------------------------------------
/base-components/src/cascader/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Cascader as NextCascader } from '@alifd/next'
3 |
4 | export default NextCascader;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/cascader/main.scss:
--------------------------------------------------------------------------------
1 | $cascader-prefix: '.' + $css-prefix + 'cascader';
2 |
3 | #{$cascader-prefix} {
4 | &:not(.multiple) #{$cascader-prefix}-menu {
5 | // 可选择的menu,增加padding以便容纳勾选图标
6 | // 多选menu不需要额外的padding来容纳图标
7 | #{$menu-prefix}-item {
8 | --menu-padding-horizontal: var(--menu-padding-horizontal-selectable);
9 | padding: 0 var(--menu-padding-horizontal) 0 var(--menu-padding-horizontal);
10 | }
11 | }
12 |
13 | #{$cascader-prefix}-menu-wrapper {
14 | @include alicloud-scrollbar;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/base-components/src/checkbox/demo/basic.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 基本
3 | * @description 使用 `Checkbox` 渲染的基本组件。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Checkbox } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = Checkbox
13 | return
14 | }
15 | const Style = styled.div``
16 |
--------------------------------------------------------------------------------
/base-components/src/checkbox/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Checkbox as NextCheckbox } from '@alifd/next'
3 |
4 | export default NextCheckbox;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/checkbox/main.scss:
--------------------------------------------------------------------------------
1 | $checkbox-prefix: '.' + $css-prefix + 'checkbox';
2 | $icon-prefix: '.' + $css-prefix + 'icon';
3 |
4 | #{$checkbox-prefix} {
5 | &-inner {
6 | {&}#{&}#{&}#{&} > #{$icon-prefix} {
7 | transform: scale(var(--checkbox-icon-scale, 0.8));
8 | margin-top: 0;
9 | }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/base-components/src/checkbox/xconsole.scss:
--------------------------------------------------------------------------------
1 | $checkbox-prefix: '.' + $css-prefix + 'checkbox';
2 | $icon-prefix: '.' + $css-prefix + 'icon';
3 |
4 | #{$checkbox-prefix} {
5 | &-inner {
6 | position: relative;
7 | {&}#{&}#{&}#{&}#{&}#{&} > #{$icon-prefix} {
8 | // icon垂直据中
9 | position: absolute;
10 | left: 50%;
11 | top: 50%;
12 | transform: translate(-50%, -50%) scale(var(--checkbox-icon-scale, 0.8));
13 | margin: 0;
14 | &::before {
15 | display: inline-block;
16 | width: var(--checkbox-icon-size, 16px);
17 | height: var(--checkbox-icon-size, 16px);
18 | font-size: var(--checkbox-icon-size, 16px);
19 | line-height: inherit;
20 | }
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/base-components/src/checkbox/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | .next-checkbox-wrapper.disabled .next-checkbox >.next-checkbox-inner {
2 | border-color: var(--checkbox-disabled-border-color, #dae0e5);
3 | background: var(--checkbox-disabled-bg-color, #f2f5f7);
4 | }
--------------------------------------------------------------------------------
/base-components/src/collapse/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | .next-collapse .next-collapse-panel-icon {
2 | margin-top: -1px;
3 | }
--------------------------------------------------------------------------------
/base-components/src/collapse/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Collapse as NextCollapse } from '@alifd/next'
3 |
4 | export default NextCollapse;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/collapse/main.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aliyun/cloud-design/525f156c3c68f8e8bd117c020558779bfd0cab69/base-components/src/collapse/main.scss
--------------------------------------------------------------------------------
/base-components/src/collapse/xconsole.scss:
--------------------------------------------------------------------------------
1 | $collapse-prefix: '.' + $css-prefix + 'collapse';
2 |
3 | #{$collapse-prefix} {
4 | &-panel-expanded {
5 | > #{$collapse-prefix}-panel-content {
6 | padding-bottom: 8px;
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/base-components/src/collapse/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | .next-collapse-panel {
2 | border-radius: 4px;
3 | .next-collapse-panel-title {
4 | border-radius: 4px;
5 | }
6 | &.next-collapse-panel-expanded {
7 | .next-collapse-panel-title {
8 | background-color: var(--color-fill1-3, #e8e8e8);
9 | }
10 | }
11 | }
12 |
13 | .next-collapse{
14 | .next-collapse-panel-icon {
15 | margin-top: -1px;
16 | }
17 | .next-collapse-panel:not(:last-child) {
18 | margin-bottom: 2px;
19 | }
20 | }
--------------------------------------------------------------------------------
/base-components/src/config-provider/ctx.ts:
--------------------------------------------------------------------------------
1 | import { createContext } from 'react'
2 | import { getInitialRefElement } from './utils'
3 |
4 | export interface ICtxType {
5 | refElement: HTMLElement
6 | }
7 |
8 | const ctx = createContext({ refElement: getInitialRefElement() })
9 |
10 | export default ctx
11 |
--------------------------------------------------------------------------------
/base-components/src/config-provider/utils.ts:
--------------------------------------------------------------------------------
1 | export const getInitialRefElement = () => {
2 | if (typeof document === 'undefined') {
3 | // this is executed in SSR
4 | // document is not defined
5 | return null
6 | }
7 | return document.body as HTMLElement
8 | }
--------------------------------------------------------------------------------
/base-components/src/date-picker/demo/disabled.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 禁用状态
3 | * @description 当开启 `disabled` 属性时,选择框处于完全禁用状态。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { DatePicker } from '@alicloudfe/components'
10 |
11 | const { RangePicker } = DatePicker
12 |
13 | export default function DemoComponent() {
14 | const content = (
15 |
16 |
17 |
18 |
19 |
20 |
21 | )
22 | return
23 | }
24 | const Style = styled.div``
25 |
--------------------------------------------------------------------------------
/base-components/src/date-picker/demo/popup.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 自定义日期选择器弹层
3 | * @description 组件对外透出了 `visible`, `defaultVisible`, `onVisibleChange`, `popupTriggerType`, `popupAlign`, `popupContainer`, `popupStyle`, `popupClassName` 等属性用于直接定制弹层。此外,如果这些属性仍然无法满足需求,可以通过 `popupProps` 进行透传。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { DatePicker } from '@alicloudfe/components'
10 |
11 | const { RangePicker } = DatePicker
12 |
13 | export default function DemoComponent() {
14 | const content = (
15 |
16 |
Change popup align
17 |
18 |
Change popup container
19 |
target.parentNode} />
20 |
21 | )
22 | return
23 | }
24 | const Style = styled.div``
25 |
--------------------------------------------------------------------------------
/base-components/src/date-picker/demo/size.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 不同尺寸
3 | * @description 通过 `size` 属性可以改变 Input 组件的尺寸,默认为 `medium`。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { DatePicker, Box } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 |
16 |
17 |
18 | )
19 | return
20 | }
21 | const Style = styled.div``
22 |
--------------------------------------------------------------------------------
/base-components/src/date-picker/xconsole.scss:
--------------------------------------------------------------------------------
1 | .#{$css-prefix}range-picker {
2 | // https://github.com/alibaba-fusion/next/issues/2770
3 | width: auto;
4 |
5 | &-trigger-input {
6 | &.#{$css-prefix}input {
7 | min-width: 200px;
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/base-components/src/date-picker2/demo/noborder.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 无边框
3 | * @description 无边框样式。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { DatePicker2 } from '@alicloudfe/components'
10 |
11 | const { RangePicker } = DatePicker2
12 |
13 | function App() {
14 | return (
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | )
24 | }
25 |
26 | export default function DemoComponent() {
27 | const content =
28 | return
29 | }
30 | const Style = styled.div`
31 | .app > div {
32 | margin-bottom: 20px;
33 | }
34 | `
35 |
--------------------------------------------------------------------------------
/base-components/src/date-picker2/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | .next-date-picker2-wrapper {
2 | background: var(--date-picker-panel-background);
3 | .next-range-picker2-arrow {
4 | background: var(--date-picker-panel-background);
5 | }
6 | }
7 | .next-time-picker2-menu {
8 | ul li {
9 | background: var(--date-picker-panel-background);
10 | }
11 | ul li.next-selected {
12 | background: var(--date-picker2-time-bg, var(--color-brand1-1, #001A33));
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/base-components/src/date-picker2/index.tsx:
--------------------------------------------------------------------------------
1 | import { DatePicker2 } from '@alifd/next'
2 |
3 | export default DatePicker2
4 |
--------------------------------------------------------------------------------
/base-components/src/date-picker2/xconsole.scss:
--------------------------------------------------------------------------------
1 | .#{$css-prefix}date-picker2,
2 | .#{$css-prefix}range-picker2-panel {
3 | --color-brand1-9: #0064c8;
4 | }
5 |
6 | .#{$css-prefix}date-picker2 {
7 | & &-input-range {
8 | .#{$css-prefix}input {
9 | box-shadow: none;
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/base-components/src/date-picker2/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | .next-time-picker2-menu ul:after {
2 | height: 0px;
3 | }
--------------------------------------------------------------------------------
/base-components/src/declare.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.css'
2 | declare module '*.scss'
3 |
--------------------------------------------------------------------------------
/base-components/src/dialog/hybridcloud-dark.scss:
--------------------------------------------------------------------------------
1 | .next-dialog-close {
2 | &:hover {
3 | background-color: var(--color-fill1-2, #383838);
4 | .next-dialog-close-icon {
5 | color: var(--color-fill1-8, #8a8a8a);
6 | }
7 | }
8 |
9 | &:active {
10 | background-color: var(--color-fill1-5, #4d4d4d) !important;
11 | .next-dialog-close-icon {
12 | color: var(--color-text1-3, #ccc);
13 | }
14 | }
15 |
16 | .next-dialog-close-icon {
17 | color: var(--color-fill1-6, #6b6b6b);
18 | }
19 | }
--------------------------------------------------------------------------------
/base-components/src/dialog/main.scss:
--------------------------------------------------------------------------------
1 | $dialog-prefix: '.' + $css-prefix + 'dialog';
2 |
3 | #{$dialog-prefix} {
4 | &-footer {
5 | .#{$css-prefix}btn {
6 | // 调整 footer 中的行动按钮间距
7 | margin-left: var(--s-2, 8px);
8 | &:first-child {
9 | margin-left: 0;
10 | }
11 | }
12 | }
13 |
14 | // Dialog.show的body是不包含Message组件的,所以padding应该按照正常的来,
15 | // 而不应该像Dialog.confirm一样
16 | // 这里覆盖掉fusion的这一行错误样式:https://github.com/alibaba-fusion/next/blob/c6139f50b50036872ce8ecc487cc80429abd93e6/src/dialog/main.scss#L124
17 | {$dialog-prefix}-quick.quick-show {
18 | #{$dialog-prefix}-body {
19 | padding: var(--dialog-content-padding-top, 0px)
20 | var(--dialog-content-padding-left-right, 24px)
21 | var(--dialog-content-padding-bottom, 16px)
22 | var(--dialog-content-padding-left-right, 24px);
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/base-components/src/dialog/xconsole.scss:
--------------------------------------------------------------------------------
1 | $dialog-prefix: '.' + $css-prefix + 'dialog';
2 |
3 | $dialog-prefix: '.' + $css-prefix + 'dialog';
4 |
5 | #{$dialog-prefix} {
6 | &-header {
7 | padding-right: calc(var(--dialog-title-padding-left-right) + var(--dialog-close-right))
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/base-components/src/divider/custom.scss:
--------------------------------------------------------------------------------
1 | // 混合云云效样式覆盖
2 | .next-divider-ver {
3 | top: 0;
4 | }
--------------------------------------------------------------------------------
/base-components/src/divider/demo/direction.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 垂直展示
3 | * @description 通过`direction`设置垂直分隔符展示。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Divider } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
20 | )
21 | return
22 | }
23 | const Style = styled.div``
24 |
--------------------------------------------------------------------------------
/base-components/src/divider/index.md:
--------------------------------------------------------------------------------
1 | # Divider
2 |
3 | ## 开发指南
4 |
5 | 区隔内容的分割线, 支持 1.19+
6 |
7 | ### 何时使用
8 |
9 | 对不同章节的文本段落进行分割。
10 | 对行内文字/链接进行分割,例如表格的操作列。
11 |
12 | ## API
13 |
14 | ### Divider
15 |
16 | | 参数 | 说明 | 类型 | 默认值 |
17 | | ----------- | ----------------------------------------------------- | ------- | -------- |
18 | | dashed | 是否为虚线 | Boolean | false |
19 | | direction | 线是水平还是垂直类型
**可选值**:
'hoz', 'ver' | Enum | 'hoz' |
20 | | orientation | 分割线标题的位置
**可选值**:
'left', 'right', 'center' | Enum | 'center' |
21 |
--------------------------------------------------------------------------------
/base-components/src/divider/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Divider as NextDivider } from '@alifd/next'
3 |
4 | export default NextDivider;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/drawer/custom.scss:
--------------------------------------------------------------------------------
1 | //混合云、云效主题样式覆盖
2 | .next-drawer-header {
3 | font-weight: var(--font-weight-medium, 500);
4 | }
5 |
6 | .next-drawer-close .next-drawer-close-icon.next-icon {
7 | margin-left: var(--drawer-close-icon-ml, -16px);
8 | margin-top: var(--drawer-close-icon-mt, -6px);
9 | }
10 |
11 | .next-drawer .next-drawer-header {
12 | .next-drawer-header-container {
13 | display: flex;
14 | align-items: center;
15 | justify-content: space-between;
16 | }
17 | .next-drawer-header-extra {
18 | display: flex;
19 | align-items: center;
20 | margin-right: 24px;
21 | }
22 |
23 | .next-drawer-header-line {
24 | width: 1px;
25 | height: 18px;
26 | background-color: var(--color-fill1-4);
27 | display: inline-block;
28 | margin-left: 12px;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/base-components/src/drawer/hybridcloud-dark.scss:
--------------------------------------------------------------------------------
1 | .next-drawer-header {
2 | .next-drawer-close {
3 | &:hover {
4 | background-color: var(--color-fill1-2, #383838);
5 | .next-drawer-close-icon {
6 | color: var(--color-fill1-8, #8a8a8a);
7 | }
8 | }
9 |
10 | &:active {
11 | background-color: var(--color-fill1-5, #4d4d4d);
12 | .next-drawer-close-icon {
13 | color: var(--color-text1-3, #ccc);
14 | }
15 | }
16 |
17 | .next-drawer-close-icon {
18 | color: var(--color-fill1-6, #6b6b6b);
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/base-components/src/drawer/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | .next-drawer-has-sidebar {
2 | .next-drawer-body {
3 | display: flex;
4 | .next-drawer-sidebar {
5 | margin: -16px 20px -16px -20px;
6 | padding: 16px 20px;
7 | width: 160px;
8 | border-right: 1px solid var(--color-line1-1, #e8e8e8);
9 | }
10 | }
11 | }
12 |
13 | .next-drawer-header {
14 | line-height: 24px;
15 | }
16 |
17 | .next-drawer-large {
18 | min-width: 800px;
19 | }
20 |
--------------------------------------------------------------------------------
/base-components/src/dropdown/demo/trigger-type.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 触发的事件类型
3 | * @description 使用 triggerType 设置触发的事件类型。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Dropdown, Menu } from '@alicloudfe/components'
10 |
11 | const menu = (
12 |
18 | )
19 |
20 | export default function DemoComponent() {
21 | const content = (
22 | Click me} triggerType="click">
23 | {menu}
24 |
25 | )
26 | return
27 | }
28 | const Style = styled.div``
29 |
--------------------------------------------------------------------------------
/base-components/src/dropdown/index.tsx:
--------------------------------------------------------------------------------
1 | import { Dropdown as NextDropdown } from '@alifd/next'
2 | import { OverlayHOC } from '../utils/popupHoc'
3 |
4 | export default OverlayHOC(NextDropdown)
5 |
--------------------------------------------------------------------------------
/base-components/src/field/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Field as NextField } from '@alifd/next'
3 |
4 | export default NextField;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/form/yunxiao.scss:
--------------------------------------------------------------------------------
1 | // 混合云form样式覆盖
2 | .next-form.next-medium .next-switch {
3 | margin-top: 3px;
4 | }
5 | .next-top.next-form-item {
6 | .next-form-item-label {
7 | line-height: 1.5;
8 | }
9 | }
10 |
11 | [class*="next-col-fixed-"] {
12 | &.next-form-item-label {
13 | label {
14 | word-break: break-all;
15 | }
16 | }
17 | }
--------------------------------------------------------------------------------
/base-components/src/grid/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Grid as NextGrid } from '@alifd/next'
3 |
4 | export default NextGrid;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/icon/custom.scss:
--------------------------------------------------------------------------------
1 | // icon改成方形的,暂时先手动覆盖
2 | .next-icon.next-icon.next-icon.next-icon::before {
3 | line-height: 1em;
4 | }
--------------------------------------------------------------------------------
/base-components/src/icon/demo/basic.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 基本用法
3 | * @description 展示图标基本使用方法。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Box, Icon } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 |
16 |
17 |
18 |
19 | )
20 | return
21 | }
22 | const Style = styled.div``
23 |
--------------------------------------------------------------------------------
/base-components/src/icon/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Icon as NextIcon } from '@alifd/next'
3 |
4 | export default NextIcon;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/input/custom.scss:
--------------------------------------------------------------------------------
1 | // 混合云&云效input覆盖样式
2 | .next-input {
3 | span.next-input-inner.next-before {
4 | color: var(--color-line1-5);
5 | padding-left: 8px;
6 | }
7 | span.next-input-inner.next-after {
8 | color: var(--color-line1-5);
9 | padding-right: 8px;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/base-components/src/input/demo/accessibility.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 无障碍支持
3 | * @description 通过`aria-label`对`Input`组件进行描述。关于键盘操作请参考[#无障碍键盘操作指南](#无障碍键盘操作指南)。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Input } from '@alicloudfe/components'
10 |
11 | function onChange(v) {
12 | console.log(v)
13 | }
14 | function onKeyDown(v) {
15 | console.log(v)
16 | }
17 |
18 | export default function DemoComponent() {
19 | const content = (
20 |
21 |
28 |
29 | )
30 | return
31 | }
32 | const Style = styled.div``
33 |
--------------------------------------------------------------------------------
/base-components/src/input/demo/autoheight.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 自动高度
3 | * @description 设置 `Input` 为 多行文本域;
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Input } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 | {
19 | console.log('onKeyDown', opts)
20 | }}
21 | />
22 |
23 |
24 |
25 |
29 |
30 | )
31 | return
32 | }
33 | const Style = styled.div``
34 |
--------------------------------------------------------------------------------
/base-components/src/input/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | .next-input.next-input-textarea textarea {
2 | @include hybridcloud-scrollbar;
3 | }
4 |
5 | #password:-webkit-autofill, #username:-webkit-autofill {
6 | -webkit-text-fill-color: var(--input-text-color) !important;
7 | }
--------------------------------------------------------------------------------
/base-components/src/input/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Input as NextInput } from '@alifd/next'
3 |
4 | export default NextInput;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/input/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | // 云效input样式覆盖
2 | .next-input-control .next-input-len {
3 | vertical-align: middle;
4 | }
5 | .next-input {
6 | &:hover {
7 | border-width: 1px;
8 | }
9 | &:active {
10 | border-width: 1px;
11 | }
12 | &:hover,
13 | &.#{$css-prefix}focus {
14 | box-shadow: none;
15 | }
16 | }
17 |
18 | .next-input-group:hover {
19 | box-shadow: none;
20 | }
--------------------------------------------------------------------------------
/base-components/src/input/yunxiao.scss:
--------------------------------------------------------------------------------
1 | // 云效input样式覆盖
2 | .next-input-control .next-input-len {
3 | vertical-align: middle;
4 | }
--------------------------------------------------------------------------------
/base-components/src/list/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { List as NextList } from '@alifd/next'
3 |
4 | export default NextList;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/loading/demo/basic.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 基本
3 | * @description 简单的 Loading 状态,包裹需要显示加载态的组件。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Loading } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 | basic usage
16 |
17 |
18 | )
19 | return
20 | }
21 | const Style = styled.div`
22 | .demo-title-basic {
23 | margin: 0 60px 0 60px;
24 | }
25 |
26 | .demo-basic {
27 | width: 120px;
28 | text-align: center;
29 | padding: 50px;
30 | }
31 | `
32 |
--------------------------------------------------------------------------------
/base-components/src/loading/demo/skeleton.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 骨架屏
3 | */
4 |
5 | import React from 'react'
6 | import { Skeleton } from '@alicloudfe/components'
7 |
8 | interface IProps {}
9 |
10 | const Demo: React.FC = (props) => {
11 | return (
12 |
27 | )
28 | }
29 |
30 | export default Demo
31 |
--------------------------------------------------------------------------------
/base-components/src/loading/hybridcloud-dark.scss:
--------------------------------------------------------------------------------
1 | .next-loading .next-loading-component {
2 | opacity: unset;
3 | filter: blur(2px);
4 | .next-loading-masker {
5 | background: #0A0A0A;
6 | opacity: 0.2;
7 | }
8 | }
--------------------------------------------------------------------------------
/base-components/src/loading/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | .react-loading-skeleton.react-loading-skeleton {
2 | background-color: var(--color-skeleton-bg-normal);
3 | background-image: linear-gradient(90deg, var(--color-skeleton-bg-normal), var(--color-skeleton-bg-light), var(--color-skeleton-bg-normal));
4 | }
5 |
6 | .theme-hybridcloud-dark {
7 | .next-loading .next-loading-component {
8 | opacity: unset;
9 | filter: blur(2px);
10 | .next-loading-masker {
11 | background: #0A0A0A;
12 | opacity: 0.2;
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/base-components/src/loading/index.tsx:
--------------------------------------------------------------------------------
1 | import { Loading as NextLoading } from '@alifd/next'
2 |
3 | export default NextLoading
4 |
5 | import Skeleton from 'react-loading-skeleton'
6 |
7 | export { Skeleton }
8 |
--------------------------------------------------------------------------------
/base-components/src/menu-button/b-design.scss:
--------------------------------------------------------------------------------
1 | // menu-button相关
2 | .next-menu-btn.next-btn-text.next-btn-normal .next-menu-btn-arrow{
3 | color: var(--btn-text-normal-color, #1B58F4)
4 | }
5 | .next-menu-btn.next-btn-text.next-btn-primary .next-menu-btn-arrow{
6 | color: var(--btn-text-primary-color, #1B58F4);
7 | }
8 | .next-menu-btn.next-btn-text.next-btn-secondary .next-menu-btn-arrow{
9 | color: var(--btn-text-secondary-color, #595959);
10 | }
11 | .next-menu-btn.next-btn-text.next-btn-secondary:hover .next-menu-btn-arrow{
12 | color: var(--btn-text-secondary-color-hover, #1B58F4);
13 | }
--------------------------------------------------------------------------------
/base-components/src/menu-button/custom.scss:
--------------------------------------------------------------------------------
1 | // 混合云&云效menubutton样式覆盖
2 |
3 | .next-menu-btn.next-menu-btn.next-menu-btn {
4 | .next-menu-btn-arrow.next-icon {
5 | margin-left: 8px;
6 | margin-right: -4px;
7 | }
8 | }
--------------------------------------------------------------------------------
/base-components/src/menu-button/index.tsx:
--------------------------------------------------------------------------------
1 | import { MenuButton as NextMenuButton } from '@alifd/next'
2 | import hoistNonReactStatics from 'hoist-non-react-statics'
3 | import HOC from '../utils/popupHoc'
4 |
5 | // type NextMenuButtonProps = React.ComponentProps
6 |
7 | // let MenuButton: typeof NextMenuButton = ((props: NextMenuButtonProps) => {
8 | // return
9 | // }) as any
10 |
11 | const MenuButton: typeof NextMenuButton = HOC(NextMenuButton) as any
12 |
13 | hoistNonReactStatics(MenuButton, NextMenuButton)
14 |
15 | export default MenuButton
16 |
--------------------------------------------------------------------------------
/base-components/src/menu-button/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | .next-menu-btn {
2 | .next-menu-btn-arrow {
3 | opacity: 0.5;
4 | }
5 | &.next-btn-primary {
6 | .next-menu-btn-arrow {
7 | color: var(--color-white, #fff);
8 | }
9 | }
10 |
11 | &.next-btn-text {
12 | .next-menu-btn-arrow {
13 | color: var(--color-fill1-6, #8b8b8b);
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/base-components/src/menu/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | // 混合云主题滚动条覆盖
2 | .next-menu.next-menu {
3 | @include hybridcloud-scrollbar;
4 | }
5 | .next-menu-item.next-menu-item[aria-haspopup="true"][aria-expanded] {
6 | padding-right: 16px;
7 | .next-menu-item-inner {
8 | width: 100%;
9 | }
10 | .next-menu-icon-arrow.next-icon {
11 | right: 0;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/base-components/src/menu/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Menu as NextMenu } from '@alifd/next'
3 |
4 | export default NextMenu;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/menu/xconsole.scss:
--------------------------------------------------------------------------------
1 | $menu-prefix: '.' + $css-prefix + 'menu';
2 |
3 | #{$menu-prefix} {
4 | padding: var(--menu-padding);
5 | {&}#{&}#{&}#{&} #{&}-symbol-icon-selected {
6 | color: var(--menu-icon-selected-color);
7 | }
8 | &-item:focus-visible {
9 | background-color: var(--menu-background-hover, #f7f9fa);
10 | }
11 | #{$menu-prefix}-group-label {
12 | color: var(--menu-group-label-color, #888888);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/base-components/src/menu/yunxiao-v5.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aliyun/cloud-design/525f156c3c68f8e8bd117c020558779bfd0cab69/base-components/src/menu/yunxiao-v5.scss
--------------------------------------------------------------------------------
/base-components/src/message/custom.scss:
--------------------------------------------------------------------------------
1 | // 混合云&云效样式覆盖
2 | .next-message.next-toast.next-medium {
3 | .next-message-title {
4 | --message-size-m-title-content-padding-right: 6px;
5 | }
6 | }
7 |
8 | .next-message.next-large .next-message-content,
9 | .next-message.next-medium .next-message-content {
10 | line-height: 1.5;
11 | }
12 |
13 |
14 | // loading 图标局中
15 | .next-message.next-message-loading {
16 | .next-message-symbol::before {
17 | font-size: 18px;
18 | width: 18px;
19 | }
20 | }
21 |
22 | // 调整关闭图标位置
23 | .next-message.next-message .next-message-close {
24 | top: 11px;
25 | }
26 | .next-message.next-large .next-message-close {
27 | top: 14px;
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/base-components/src/message/demo/accessibility.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 无障碍支持
3 | * @description 通过`Enter`键点击`button`时,自动聚焦到`Message`上读取信息。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Message, Button } from '@alicloudfe/components'
10 |
11 | const showSuccess = () => Message.success('success')
12 |
13 | export default function DemoComponent() {
14 | const content = (
15 |
16 |
19 |
20 | )
21 | return
22 | }
23 | const Style = styled.div``
24 |
--------------------------------------------------------------------------------
/base-components/src/message/demo/inline-close.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 可关闭提示
3 | * @description 通过`closeable`设置用户手动关闭提示框。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Message } from '@alicloudfe/components'
10 |
11 | const onClose = () => console.log('onClose triggered!')
12 | const afterClose = () => console.log('afterClose triggered!')
13 |
14 | export default function DemoComponent() {
15 | const content = (
16 |
17 |
24 | Content Content Content Content
25 |
26 |
27 | )
28 | return
29 | }
30 | const Style = styled.div``
31 |
--------------------------------------------------------------------------------
/base-components/src/message/demo/update-message.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 更新消息内容
3 | * @description 通过唯一的 `key` 来动态更新内容。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Message, Button } from '@alicloudfe/components'
10 |
11 | const key = 'updatable'
12 |
13 | const openMessage = () => {
14 | Message.loading({ content: 'Loading...', key })
15 | setTimeout(() => {
16 | Message.success({ content: 'Loaded!', key, duration: 2000 })
17 | }, 1000)
18 | }
19 |
20 | export default function DemoComponent() {
21 | const content = (
22 |
25 | )
26 | return
27 | }
28 | const Style = styled.div``
29 |
--------------------------------------------------------------------------------
/base-components/src/message/demo/withContext.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title withContext
3 | * @description 此功能1.21.6版本添加。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | export default function DemoComponent() {
10 | const content = (
11 |
16 | 点击查看 Message.withContext Demo
17 |
18 | )
19 | return
20 | }
21 | const Style = styled.div``
22 |
--------------------------------------------------------------------------------
/base-components/src/message/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | // 无标题。只有一行content修正位置
2 | .next-message-content {
3 | margin-top: 0.5px;
4 | }
5 | // 有标题。取消content位置的修正
6 | .next-title-content {
7 | .next-message-content {
8 | margin-top: 0;
9 | }
10 | }
11 | // 修正标题
12 | // .next-message-title {
13 | // margin-top: -0.5px;
14 | // }
15 |
16 | // message content 局中
17 | .next-message.next-medium .next-message-symbol {
18 | font-size: 0;
19 | }
--------------------------------------------------------------------------------
/base-components/src/message/main.scss:
--------------------------------------------------------------------------------
1 | $message-prefix: '.' + $css-prefix + 'message';
2 |
3 | #{$message-prefix} {
4 | &-title {
5 | font-weight: var(--message-title-weight, 500);
6 | }
7 | #{$message-prefix}-close .#{$css-prefix}icon-close {
8 | display: flex;
9 | align-items: center;
10 | justify-content: center;
11 | &:before {
12 | width: var(--message-close-icon-size, 12px);
13 | height: var(--message-close-icon-size, 12px);
14 | font-size: var(--message-close-icon-size, 12px);
15 | line-height: var(--message-close-icon-size, 12px);
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/base-components/src/message/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | // 调整关闭图标位置
2 | .next-message.next-message .next-message-close {
3 | top: 6.5px;
4 | }
5 |
6 | .next-message {
7 | .next-message-content,
8 | .next-message-title {
9 | .next-message-extra,
10 | .next-message-link {
11 | &.right {
12 | float: right;
13 | }
14 | }
15 | }
16 | .next-message-close + .next-message-symbol-icon + .next-message-title {
17 | .next-message-extra,
18 | .next-message-link {
19 | &.right {
20 | margin-right: 24px;
21 | }
22 | }
23 | }
24 |
25 | .next-message-close + .next-message-symbol-icon + .next-message-content {
26 | .next-message-extra,
27 | .next-message-link {
28 | &.right {
29 | margin-right: 24px;
30 | }
31 | }
32 | }
33 | }
--------------------------------------------------------------------------------
/base-components/src/modal/hybridcloud-dark.scss:
--------------------------------------------------------------------------------
1 | .next-modal-header {
2 | .next-modal-close.next-modal-close.next-modal-close.next-modal-close {
3 | &:hover {
4 | background-color: var(--color-fill1-2, #383838);
5 | color: var(--color-fill1-8, #8a8a8a);
6 | }
7 |
8 | &:active {
9 | background-color: var(--color-fill1-5, #4d4d4d);
10 | color: var(--color-text1-3, #ccc);
11 | }
12 |
13 | .next-modal-close-icon {
14 | color: var(--color-fill1-6, #6b6b6b);
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/base-components/src/modal/hybridcloud.scss:
--------------------------------------------------------------------------------
1 | .next-modal-close.next-modal-close.next-modal-close.next-modal-close.next-modal-close {
2 | width: var(--modal-header-close-bg-width, 20px);
3 | height: var(--modal-header-close-bg-height, 20px);
4 | border-radius: var(--modal-header-close-border-radius, 2px);
5 |
6 | &:hover {
7 | background-color: var(--color-fill1-2, #f7f7f7);
8 | color: var(--color-text1-2, #5a5a5a);
9 | }
10 |
11 | &:active {
12 | background-color: var(--color-fill1-3, #eaeaea);
13 | color: var(--color-text1-5, #292929);
14 | }
15 |
16 | .next-dialog-close-icon {
17 | color: var(--color-fill1-6, #848484);
18 | }
19 | }
20 | .next-modal {
21 | .right-part {
22 | margin-right: var(--modal-header-close-margin-right, 18px);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/base-components/src/modal/yunxiao-dark.scss:
--------------------------------------------------------------------------------
1 | .next-modal-header {
2 | .next-modal-title-box {
3 | .next-modal-title-icon {
4 | &::before {
5 | font-size: var(--modal-title-icon-font-size, 20px);
6 | }
7 | }
8 | }
9 | }
--------------------------------------------------------------------------------
/base-components/src/nav/demo/fixed.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title fixed模式
3 | * @description 固定导航下的使用方式
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Nav } from '@alicloudfe/components'
10 |
11 | const { Item, SubNav } = Nav
12 |
13 | const header = FUSION
14 | const footer = (
15 |
16 | Login in
17 |
18 | )
19 |
20 | export default function DemoComponent() {
21 | const content = (
22 |
32 | )
33 | return
34 | }
35 | const Style = styled.div``
36 |
--------------------------------------------------------------------------------
/base-components/src/nav/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Nav as NextNav } from '@alifd/next'
3 | import hoistNonReactStatics from 'hoist-non-react-statics'
4 |
5 | type NavProps = React.ComponentProps
6 |
7 | const Nav: React.FC = ({ direction, activeDirection, ...rest }) => {
8 | if (!activeDirection && direction === 'ver') {
9 | activeDirection = 'right'
10 | }
11 | return (
12 |
17 | )
18 | }
19 |
20 | hoistNonReactStatics(Nav, NextNav)
21 |
22 | const exported: typeof NextNav = Nav as any
23 |
24 | export default exported
25 |
--------------------------------------------------------------------------------
/base-components/src/nav/main.scss:
--------------------------------------------------------------------------------
1 | $nav-prefix: '.' + $css-prefix + 'nav';
2 | $menu-prefix: '.' + $css-prefix + 'menu';
3 | #{$nav-prefix} {
4 | {&}#{&}#{&}#{$menu-prefix} {
5 | // 去掉menu中的padding
6 | padding: 0;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/base-components/src/notification/custom.scss:
--------------------------------------------------------------------------------
1 | // 混合云&云效主题样式覆盖
2 | $message-prefix: '.' + $css-prefix + 'message';
3 | $toast-prefix: '.' + $css-prefix + 'toast';
4 |
5 | .next-notification {
6 | {$message-prefix}-success#{$toast-prefix} {
7 | border-left: 4px solid var(--message-success-border-color, #00a700);
8 | }
9 | {$message-prefix}-warning#{$toast-prefix} {
10 | border-left: 4px solid var(--message-warning-border-color, #fac800);
11 | }
12 | {$message-prefix}-error#{$toast-prefix} {
13 | border-left: 4px solid var(--message-error-border-color, #c80000);
14 | }
15 | {$message-prefix}-notice#{$toast-prefix} {
16 | border-left: 4px solid var(--message-notice-border-color, #0064c8);
17 | }
18 | {$message-prefix}-help#{$toast-prefix} {
19 | border-left: 4px solid var(--message-help-border-color, #888888);
20 | }
21 | }
--------------------------------------------------------------------------------
/base-components/src/notification/index.tsx:
--------------------------------------------------------------------------------
1 | import { Notification as NextNotification } from '@alifd/next'
2 |
3 | export default NextNotification
4 |
--------------------------------------------------------------------------------
/base-components/src/number-picker/demo/basic.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 基本用法
3 | * @description onChange 第二个参数 e.type 可以获取事件类型。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { NumberPicker } from '@alicloudfe/components'
10 |
11 | function onChange(value, e) {
12 | console.log(value, e.type, e.triggerType)
13 | }
14 |
15 | export default function DemoComponent() {
16 | const content = (
17 |
18 |
19 |
20 |
21 |
22 |
23 | )
24 | return
25 | }
26 | const Style = styled.div``
27 |
--------------------------------------------------------------------------------
/base-components/src/number-picker/demo/disabled.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 不可用
3 | * @description 不可用的 number picker。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { NumberPicker } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 |
16 |
17 |
18 |
19 | )
20 | return
21 | }
22 | const Style = styled.div``
23 |
--------------------------------------------------------------------------------
/base-components/src/number-picker/demo/format.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 格式化
3 | * @description
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { NumberPicker } from '@alicloudfe/components'
10 |
11 | const intlize = (val) => Intl.NumberFormat('en-US').format(val)
12 |
13 | export default function DemoComponent() {
14 | const content = (
15 |
16 |
17 |
18 |
19 | `${val}%`} defaultValue={85} />
20 |
21 |
22 |
23 |
24 | )
25 | return
26 | }
27 | const Style = styled.div``
28 |
--------------------------------------------------------------------------------
/base-components/src/number-picker/demo/limit.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 最大最小值
3 | * @description min max 来限制value的最大最小值。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { NumberPicker } from '@alicloudfe/components'
10 |
11 | function onChange(value, e) {
12 | console.log('onChange', value, e)
13 | }
14 |
15 | function onCorrect(obj) {
16 | console.log('onCorrect', obj)
17 | }
18 |
19 | export default function DemoComponent() {
20 | const content = (
21 |
22 |
31 |
32 | )
33 | return
34 | }
35 | const Style = styled.div``
36 |
--------------------------------------------------------------------------------
/base-components/src/number-picker/demo/precision.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 精度
3 | * @description 通过 precision 控制小数点位数
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { NumberPicker } from '@alicloudfe/components'
10 |
11 | function onChange(value) {
12 | console.log('changed', value)
13 | }
14 | function onCorrect(obj) {
15 | console.log(obj)
16 | }
17 |
18 | export default function DemoComponent() {
19 | const content = (
20 |
21 |
28 |
29 | )
30 | return
31 | }
32 | const Style = styled.div``
33 |
--------------------------------------------------------------------------------
/base-components/src/number-picker/demo/step.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 步长
3 | * @description 通过step控制每次加减步长
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { NumberPicker } from '@alicloudfe/components'
10 |
11 | function onChange(value) {
12 | console.log('changed', value)
13 | }
14 | function onCorrect(obj) {
15 | console.log(obj)
16 | }
17 |
18 | export default function DemoComponent() {
19 | const content = (
20 |
21 |
27 |
28 | )
29 | return
30 | }
31 | const Style = styled.div``
32 |
--------------------------------------------------------------------------------
/base-components/src/number-picker/demo/trigger.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 按钮控制
3 | * @description 控制按钮一致显示、隐藏
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { NumberPicker } from '@alicloudfe/components'
10 |
11 | function onChange(value) {
12 | console.log('changed', value)
13 | }
14 | function onCorrect(obj) {
15 | console.log(obj)
16 | }
17 |
18 | export default function DemoComponent() {
19 | const content = (
20 |
21 |
22 |
23 |
24 |
25 |
26 | )
27 | return
28 | }
29 | const Style = styled.div``
30 |
--------------------------------------------------------------------------------
/base-components/src/number-picker/index.tsx:
--------------------------------------------------------------------------------
1 | import { NumberPicker as NextNumberPicker } from '@alifd/next'
2 | import { withThemeClass } from '../utils/withThemeClass'
3 |
4 | export default withThemeClass(NextNumberPicker)
5 |
--------------------------------------------------------------------------------
/base-components/src/number-picker/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | // 云效主题numberpicker样式覆盖
2 | .next-number-picker-handler .next-icon.next-icon.next-icon::before {
3 | line-height: inherit;
4 | }
5 |
6 | .next-number-picker {
7 | .next-input-group {
8 | &:hover {
9 | border: 1px solid var(--color-brand1-6, #1b9aee);
10 | }
11 | .next-btn {
12 | background-color: var(--color-white, #fff);
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/base-components/src/number-picker/yunxiao.scss:
--------------------------------------------------------------------------------
1 | // 云效主题numberpicker样式覆盖
2 | .next-number-picker-handler .next-icon.next-icon.next-icon::before {
3 | line-height: inherit;
4 | }
--------------------------------------------------------------------------------
/base-components/src/overlay/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Overlay as NextOverlay } from '@alifd/next'
3 | import {
4 | OverlayProps as NextOverlayProps,
5 | PopupProps as NextPopupProps
6 | } from '@alifd/next/types/overlay'
7 |
8 | const { Popup: NextPopup } = NextOverlay
9 |
10 | const Overlay: typeof NextOverlay = React.forwardRef(
11 | (props: NextOverlayProps, ref) => {
12 | return
13 | }
14 | ) as any
15 |
16 | const Popup: typeof NextPopup = React.forwardRef(
17 | (props: NextPopupProps, ref) => {
18 | return
19 | }
20 | ) as any
21 |
22 | Overlay.Popup = Popup
23 |
24 | export default Overlay
25 |
--------------------------------------------------------------------------------
/base-components/src/pagination/demo/link.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 分页按钮链接
3 | * @description 可以通过指定 `link` 属性来设置页码按钮的跳转链接,方便 SEO,link 属性的值为一个包含 `{page}` 的模板字符串,Pagination 组件会将该占位符替换为具体的页码数字。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Pagination } from '@alicloudfe/components'
10 |
11 | const format = `${window.location.href}#/{page}`
12 |
13 | export default function DemoComponent() {
14 | const content =
15 | return
16 | }
17 | const Style = styled.div``
18 |
--------------------------------------------------------------------------------
/base-components/src/pagination/demo/more.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 更多分页
3 | * @description 当分页数大于5时,自动展示 `...`
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Pagination } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content =
13 | return
14 | }
15 | const Style = styled.div``
16 |
--------------------------------------------------------------------------------
/base-components/src/pagination/demo/show-jump.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 跳转
3 | * @description 快速跳转到某一页,可以设置 `false` 来隐藏。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Pagination } from '@alicloudfe/components'
10 |
11 | const change = function (value) {
12 | console.log(value)
13 | }
14 |
15 | export default function DemoComponent() {
16 | const content = (
17 |
18 |
Hide jump forcibly
19 |
20 |
21 | )
22 | return
23 | }
24 | const Style = styled.div``
25 |
--------------------------------------------------------------------------------
/base-components/src/pagination/demo/show-total.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 显示总数
3 | * @description 分页组件默认不显示总数,你可以通过 totalRender 自定义总数的显示结果。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Pagination } from '@alicloudfe/components'
10 |
11 | const total = 50
12 |
13 | export default function DemoComponent() {
14 | const content = (
15 | `Total: ${total}`}
19 | />
20 | )
21 | return
22 | }
23 | const Style = styled.div`
24 | .custom-pagination {
25 | display: inline-block;
26 | margin-left: 10px;
27 | }
28 | `
29 |
--------------------------------------------------------------------------------
/base-components/src/pagination/demo/size.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 分页尺寸
3 | * @description 可以通过指定 `size` 属性来设置分页的尺寸。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Pagination } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
small
15 |
16 |
medium
17 |
18 |
large
19 |
20 |
21 | )
22 | return
23 | }
24 | const Style = styled.div``
25 |
--------------------------------------------------------------------------------
/base-components/src/pagination/demo/type.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 简洁/迷你 风格
3 | * @description 可以通过指定 `type` 属性来设置分页器的类型。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Pagination } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
normal
15 |
16 |
simple
17 |
18 |
mini
19 |
20 |
21 | )
22 | return
23 | }
24 | const Style = styled.div``
25 |
--------------------------------------------------------------------------------
/base-components/src/pagination/demo/uncontrol.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 非受控分页
3 | * @description 非受控分页,是指分页组件的状态由自己维护,组件值的改变可以通过 `onChange` 事件通知父组件,默认值由 `defaultCurrent` 初始化。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Pagination } from '@alicloudfe/components'
10 |
11 | const change = function (value) {
12 | console.log(value)
13 | }
14 |
15 | export default function DemoComponent() {
16 | const content =
17 | return
18 | }
19 | const Style = styled.div``
20 |
--------------------------------------------------------------------------------
/base-components/src/pagination/index.tsx:
--------------------------------------------------------------------------------
1 | import { Pagination as NextPagination } from '@alifd/next'
2 | import type { PaginationProps } from '@alifd/next/types/pagination'
3 | import { withThemeClass } from '../utils/withThemeClass'
4 | import React from 'react'
5 | import { useCssVar } from '../utils/useCssVar'
6 |
7 | const Pagination: typeof NextPagination = ((props: PaginationProps) => {
8 | const theme = useCssVar('--alicloudfe-components-theme').trim()
9 | // 混合云云效主题默认不显示下一页
10 | const shape = (() => {
11 | if (theme.startsWith('hybridcloud') || theme.startsWith('yunxiao')) {
12 | return 'arrow-only'
13 | }
14 | return 'normal'
15 | })()
16 |
17 | return
18 | }) as any
19 |
20 | export default withThemeClass(Pagination)
21 |
--------------------------------------------------------------------------------
/base-components/src/paragraph/index.md:
--------------------------------------------------------------------------------
1 | # Paragraph
2 |
3 | ## Guide
4 |
5 | (已废弃,请使用Typography)段落用于控制页面整体的文本视觉,主要由行间距及文本大小体现。
6 |
7 | ## 何时使用
8 |
9 | - 页面文本展示需要一致体验。
10 | - 一般短文本和长文本的行间距是有差别的,短文本的行间距会更小(一般为三行以内)
11 |
12 | ## API
13 |
14 | ### Paragraph
15 |
16 | | 参数 | 说明 | 类型 | 默认值 |
17 | | ---- | ------------------------------------------------------------------ | ---- | -------- |
18 | | size | 组件大小。
**可选值**:
'medium'(中号)
'small'(小号) | Enum | 'medium' |
19 | | type | 什么方式展示段落
**可选值**:
'long'(展示所有文本)
'short'(展示三行以内(非强制)) | Enum | 'long' |
20 |
--------------------------------------------------------------------------------
/base-components/src/paragraph/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Paragraph as NextParagraph } from '@alifd/next'
3 |
4 | export default NextParagraph;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/progress/demo/basic.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 基本进度条
3 | * @description 普通模式的进度条,通过 `percent` 属性指定进度,通过 `textRender` 控制右侧文本信息的展示,
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Progress } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
18 | )
19 | return
20 | }
21 | const Style = styled.div``
22 |
--------------------------------------------------------------------------------
/base-components/src/progress/demo/circle.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 圆形进度条
3 | * @description 通过 `shape` 属性可以改变进度指示器的外观,当取值为 `circle` 时为圆形进度条。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Progress, Icon, Box } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 | ''} />
16 | }
20 | />
21 |
22 | )
23 | return
24 | }
25 | const Style = styled.div``
26 |
--------------------------------------------------------------------------------
/base-components/src/progress/demo/progressive.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title Progressive
3 | * @description 当开启 `progressive` 模式时,Progress 组件会根据自身的进度自动设置展现的颜色值。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Progress } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
18 | )
19 | return
20 | }
21 | const Style = styled.div``
22 |
--------------------------------------------------------------------------------
/base-components/src/progress/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Progress as NextProgress } from '@alifd/next'
3 |
4 | export default NextProgress;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/radio/demo/basic.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 基本
3 | * @description 使用 `Radio` 渲染的基本组件。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Radio } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = Fusion Radio
13 | return
14 | }
15 | const Style = styled.div``
16 |
--------------------------------------------------------------------------------
/base-components/src/radio/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { Radio as NextRadio } from '@alifd/next'
3 |
4 | export default NextRadio;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/range/b-design.scss:
--------------------------------------------------------------------------------
1 | .next-range:not(.disabled) .next-range-selected{
2 | background-image: linear-gradient(90deg, #7EA3FF 0%, #1B58F4 100%);
3 | }
--------------------------------------------------------------------------------
/base-components/src/range/custom.scss:
--------------------------------------------------------------------------------
1 | // 混合云&云效主题覆盖样式
2 | .next-range .next-balloon-tooltip .next-balloon-content.next-balloon-content {
3 | word-break: normal;
4 | }
--------------------------------------------------------------------------------
/base-components/src/range/demo/reverse.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 选择态反转
3 | * @description 设置 reverse 为true, 选中态会反转。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Range } from '@alicloudfe/components'
10 |
11 | const style = {
12 | marginBottom: '15px'
13 | }
14 |
15 | export default function DemoComponent() {
16 | const content = (
17 |
18 |
19 |
20 |
21 | )
22 | return
23 | }
24 | const Style = styled.div``
25 |
--------------------------------------------------------------------------------
/base-components/src/range/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Range as NextRange } from '@alifd/next'
3 |
4 | type NextRangeProps = React.ComponentProps
5 |
6 | const Range: React.FC = React.forwardRef(
7 | ({ marksPosition = 'below', ...restProps }, ref) => {
8 | return (
9 |
14 | )
15 | }
16 | )
17 |
18 | export default Range
19 |
--------------------------------------------------------------------------------
/base-components/src/range/main.scss:
--------------------------------------------------------------------------------
1 | .#{$css-prefix}range {
2 | &-scale-item {
3 | {&}#{&}#{&} {
4 | top: var(--range-scale-item-position-top, 0px);
5 | width: var(--range-scale-item-width, 1px);
6 | }
7 | }
8 | // &-track {
9 | // {&} {
10 | // width: calc(100% + 12px);
11 | // left: -6px;
12 | // }
13 | // }
14 | }
15 | .next-range {
16 | .next-range-slider-inner {
17 | &:hover {
18 | transform: scale(1.38);
19 | }
20 | }
21 | .next-range-slider-moving {
22 | .next-range-slider-inner.next-range-slider-inner.next-range-slider-inner {
23 | transform: scale(1.38);
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/base-components/src/rating/demo/basic.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 基本
3 | * @description 最简单的用法。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Rating } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 | console.log('change:', val)}
17 | onHoverChange={(val) => console.log('hover:', val)}
18 | />
19 |
20 | )
21 | return
22 | }
23 | const Style = styled.div``
24 |
--------------------------------------------------------------------------------
/base-components/src/rating/demo/disabled.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 只读模式
3 | * @description 设置 `disabled` 属性后,评分组件仅展示模式,不可选择。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Rating } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content =
13 | return
14 | }
15 | const Style = styled.div``
16 |
--------------------------------------------------------------------------------
/base-components/src/rating/demo/grade.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 等级提示
3 | * @description 添加 `showGrade` 属性,使评分组件具有等级提示信息。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Rating } from '@alicloudfe/components'
10 |
11 | const starMap = {
12 | 1: 'Bad',
13 | 2: 'OK',
14 | 3: 'Good',
15 | 4: 'Great',
16 | 5: 'Perfect'
17 | }
18 |
19 | export default function DemoComponent() {
20 | const content = (
21 | starMap[val]} />
22 | )
23 | return
24 | }
25 | const Style = styled.div``
26 |
--------------------------------------------------------------------------------
/base-components/src/rating/demo/half.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 半星评分
3 | * @description 默认情况下评分组件只支持整数评分,通过开启 `allowHalf` 属性可以支持半星评分。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Rating } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content =
13 | return
14 | }
15 | const Style = styled.div``
16 |
--------------------------------------------------------------------------------
/base-components/src/rating/demo/size.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 尺寸
3 | * @description 通过 `size` 属性可以控制评分组件的大小,支持三种尺寸 `small`, `medium`, `large`。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Rating } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | )
23 | return
24 | }
25 | const Style = styled.div``
26 |
--------------------------------------------------------------------------------
/base-components/src/rating/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Rating as NextRating } from '@alifd/next'
3 | import RatingProps from '@alifd/next/types/rating'
4 |
5 | const Rating: typeof NextRating = ((props: RatingProps) => {
6 | return
7 | }) as any
8 |
9 | export default Rating;
10 |
11 |
--------------------------------------------------------------------------------
/base-components/src/rating/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | .next-rating-underlay .next-icon {
2 | color: var(--color-brand3-8, #494e54);
3 | opacity: 0.2;
4 | }
--------------------------------------------------------------------------------
/base-components/src/responsive-grid/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import { ResponsiveGrid as NextResponsiveGrid } from '@alifd/next'
3 |
4 | export default NextResponsiveGrid;
5 |
6 |
--------------------------------------------------------------------------------
/base-components/src/search/demo/accessibility.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 无障碍支持
3 | * @description 按下Enter键调用`onSearch`事件去处理,请参考[无障碍键盘操作指南](#无障碍键盘操作指南)。
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Search } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 | console.log(v)}
18 | searchText={search}
19 | style={{ width: '400px' }}
20 | />
21 |
22 | )
23 | return
24 | }
25 | const Style = styled.div``
26 |
--------------------------------------------------------------------------------
/base-components/src/search/demo/size.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 大小
3 | * @description 通过size进行大小设置,支持large、medium
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Search } from '@alicloudfe/components'
10 |
11 | export default function DemoComponent() {
12 | const content = (
13 |
14 |
20 |
21 |
22 |
28 |
29 | )
30 | return
31 | }
32 | const Style = styled.div``
33 |
--------------------------------------------------------------------------------
/base-components/src/search/xconsole.scss:
--------------------------------------------------------------------------------
1 | $search-prefix: '.' + $css-prefix + 'search';
2 | $input-prefix: '.' + $css-prefix + 'input';
3 | $next-normal: '.' + $css-prefix + 'normal';
4 |
5 | #{$search-prefix} {
6 | {$next-normal},{$search-prefix}-normal {
7 | .#{$css-prefix}after {
8 | .#{$css-prefix}btn-normal {
9 | --btn-medium-min-width: 32px;
10 | }
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/base-components/src/search/yunxiao-v5.scss:
--------------------------------------------------------------------------------
1 | .next-input {
2 | span.next-input-inner.next-before{
3 | padding-left: 4px;
4 | }
5 | .next-input-inner.next-before+input {
6 | padding-left: 0;
7 | }
8 | }
9 | .next-search.next-search {
10 | .next-input-group {
11 | .next-input-inner.next-after {
12 | padding-left: 8px;
13 | padding-right: 4px;
14 | i {
15 | padding: 0;
16 | }
17 | }
18 | }
19 | }
20 |
21 | .next-search-simple.next-normal.next-medium .next-search-icon:before, .next-search-simple.next-normal.next-medium .next-search-icon .next-icon-remote {
22 | font-size: 18px;
23 | }
24 |
25 | .next-search.next-search.next-search {
26 | &:hover,
27 | &.focusing,
28 | &.visible {
29 | box-shadow: none;
30 | }
31 | }
--------------------------------------------------------------------------------
/base-components/src/search/yunxiao.scss:
--------------------------------------------------------------------------------
1 | .next-input {
2 | span.next-input-inner.next-before{
3 | padding-left: 4px;
4 | }
5 | .next-input-inner.next-before+input {
6 | padding-left: 0;
7 | }
8 | }
9 | .next-search.next-search {
10 | .next-input-group {
11 | .next-input-inner.next-after {
12 | padding-left: 8px;
13 | padding-right: 4px;
14 | i {
15 | padding: 0;
16 | }
17 | }
18 | }
19 | }
20 |
21 | .next-search-simple.next-normal.next-medium .next-search-icon:before, .next-search-simple.next-normal.next-medium .next-search-icon .next-icon-remote {
22 | font-size: 18px;
23 | }
--------------------------------------------------------------------------------
/base-components/src/select/custom.scss:
--------------------------------------------------------------------------------
1 | // 混合云、云效主题样式覆盖
2 |
3 | .next-select-multiple .next-select-compact .next-select-tag-compact {
4 | color: var(--color-fill1-6);
5 | }
6 |
7 | .next-select-all {
8 | padding-left: 12px;
9 | }
--------------------------------------------------------------------------------
/base-components/src/select/demo/select-label.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @title 前后缀
3 | * @description Select 增加前后缀
4 | */
5 |
6 | import * as React from 'react'
7 | import styled from 'styled-components'
8 |
9 | import { Select } from '@alicloudfe/components'
10 |
11 | const dataSource = [
12 | { label: '1', value: 1 },
13 | { label: '10', value: 10 },
14 | { label: '50', value: 50 },
15 | { label: '100', value: 100 }
16 | ]
17 |
18 | const handleChange = (value) => {
19 | console.log('handleChange: ', value)
20 | }
21 |
22 | export default function DemoComponent() {
23 | const content = (
24 |