2020-10-14 02:28:46 +00:00
|
|
|
import classNames from '../classNames';
|
2023-08-30 13:44:03 +00:00
|
|
|
import { isVNode, Fragment, Comment, Text } from 'vue';
|
2020-10-14 02:28:46 +00:00
|
|
|
import { camelize, hyphenate, isOn, resolvePropValue } from '../util';
|
|
|
|
import isValid from '../isValid';
|
2021-09-25 08:51:32 +00:00
|
|
|
import initDefaultProps from './initDefaultProps';
|
2023-08-30 13:44:03 +00:00
|
|
|
import type { VueInstance } from '../hooks/_vueuse/unrefElement';
|
2020-05-27 15:56:00 +00:00
|
|
|
// function getType(fn) {
|
|
|
|
// const match = fn && fn.toString().match(/^\s*function (\w+)/);
|
|
|
|
// return match ? match[1] : '';
|
|
|
|
// }
|
2018-05-06 13:50:05 +00:00
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
const splitAttrs = (attrs: any) => {
|
2020-05-28 11:45:50 +00:00
|
|
|
const allAttrs = Object.keys(attrs);
|
2023-08-30 13:44:03 +00:00
|
|
|
const eventAttrs: Record<string, any> = {};
|
|
|
|
const onEvents: Record<string, any> = {};
|
|
|
|
const extraAttrs: Record<string, any> = {};
|
2020-05-28 11:45:50 +00:00
|
|
|
for (let i = 0, l = allAttrs.length; i < l; i++) {
|
|
|
|
const key = allAttrs[i];
|
|
|
|
if (isOn(key)) {
|
2020-06-10 10:21:16 +00:00
|
|
|
eventAttrs[key[2].toLowerCase() + key.slice(3)] = attrs[key];
|
|
|
|
onEvents[key] = attrs[key];
|
2020-05-28 11:45:50 +00:00
|
|
|
} else {
|
2020-06-10 10:21:16 +00:00
|
|
|
extraAttrs[key] = attrs[key];
|
2020-05-28 11:45:50 +00:00
|
|
|
}
|
|
|
|
}
|
2020-06-10 10:21:16 +00:00
|
|
|
return { onEvents, events: eventAttrs, extraAttrs };
|
2020-05-28 11:45:50 +00:00
|
|
|
};
|
2023-08-30 13:44:03 +00:00
|
|
|
const parseStyleText = (cssText = '', camel = false) => {
|
2020-10-02 07:44:10 +00:00
|
|
|
const res = {};
|
2019-01-12 03:33:27 +00:00
|
|
|
const listDelimiter = /;(?![^(]*\))/g;
|
|
|
|
const propertyDelimiter = /:(.+)/;
|
2021-09-25 08:51:32 +00:00
|
|
|
if (typeof cssText === 'object') return cssText;
|
2021-06-23 15:08:16 +00:00
|
|
|
cssText.split(listDelimiter).forEach(function (item) {
|
2018-03-01 11:09:45 +00:00
|
|
|
if (item) {
|
2019-01-12 03:33:27 +00:00
|
|
|
const tmp = item.split(propertyDelimiter);
|
2018-03-08 05:55:49 +00:00
|
|
|
if (tmp.length > 1) {
|
2019-01-12 03:33:27 +00:00
|
|
|
const k = camel ? camelize(tmp[0].trim()) : tmp[0].trim();
|
|
|
|
res[k] = tmp[1].trim();
|
2018-03-08 05:55:49 +00:00
|
|
|
}
|
2018-03-01 11:09:45 +00:00
|
|
|
}
|
2019-01-12 03:33:27 +00:00
|
|
|
});
|
|
|
|
return res;
|
|
|
|
};
|
2018-03-01 11:09:45 +00:00
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
const hasProp = (instance: any, prop: string) => {
|
2021-09-25 08:51:32 +00:00
|
|
|
return instance[prop] !== undefined;
|
2019-01-12 03:33:27 +00:00
|
|
|
};
|
2020-06-30 10:31:58 +00:00
|
|
|
|
Feat v4 (#6329)
* refactor(icon): remove style dir (#6215)
* refactor: rename locale
* refactor: locale-provider
* refactor: modal
* refactor: menu
* fix: custom class (#6217)
* refactor: tooltip
* refactor: grid (#6220)
* refactor: grid
* fix(grid): align & justify responsive
* chore: update demo and snapshot
* fix: row ts type not work
* doc: update demo
* refactor: ts
* refactor: spin (#6222)
* fix: typo (#6218)
* fix: typo
* docs<upload>: docs update
* refactor: spin
* refactor: spin
* refactor: spin
* refactor: spinnn
* refactor: spin
---------
Co-authored-by: lyn <76365499@qq.com>
* fix: spin error #6222
* test: test case error (#6225)
* fix: inject value maybe undefined
* fix: tootip emit correct value
* fix: rollback warning suffix avoid test break
* doc(grid): remove unused type="flex"
* refactor: skeleton (#6224)
* refactor: skeleton
* refactor: skeleton style
* chore: modify skeleton demo style
* fix(button): link and text should not have wave (#6226)
* refactor: dropdown
* refactor: popover & popconfirm
* refactor(tag): less to cssinjs (#6227)
* refactor(empty): less to cssinjs (#6230)
* refactor(empty): less to cssinjs
* chore: remove unuse code
* fix: reactivity lose
* fix: empty props #6230
* refactor: progress style (#6234)
* refactor: progress
* refactor: progress style
* fix: progress attrs
* refactor: progress #6234
* refactor: switch (#6236)
* refactor: switch style
* refactor: delete switch style
* refactor:input (#6237)
* refactor:input
* fix inheritAttrs:false
* fix attrs.class
* feat: input add disabled
* refactor:comment (#6238)
* refactor:comment
* fix inheritAttrs: false & attrs.class
* refactor:pageheader (#6239)
* refactor:pageheader
* fix inheritAttrs: false & attrs.class
* refactor:statistic (#6240)
* refactor:statistic
* fix inheritAttrs: false & attrs.class
* refactor:list (#6241)
* refactor:list
* fix inheritAttrs: false & attrs.class
* feat: update type
* refactor(Space): less to cssinjs & add compact mode (#6229)
* refactor(Space): less to cssinjs & add compact mode
* chore(space): update md
* chore(space): add demo
* chore(space): add some demo
* feat(button): add compact mode
* fix: reactivity lose
* docs: fix props version
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* perf: space compact
* refactor:typography (#6244)
* refactor:typography
* fix return
* fix import type
* fix: typography #6244
* refactor:datepicker (#6245)
* refactor: datepicker type
* refactor: rate style (#6254)
* refactor(layout): less to cssinjs (#6249)
* doc: update layout cover
* refactor(result): less to cssinjs (#6246)
* refactor(result): less to cssinjs
* fix: class name is overridden
* docs: update result cover
* refactor:slider (#6250)
* feat: slider deprecated tooltipVisible
* refactor(crad): less to cssinjs (#6258)
* update
* switch
* Style adjustment
* refactor(Card): less to cssinjs
* Eliminate invalid code
* optimization and adjustment css
* Adjust the css
* Optimize each item
* adjustment css
* refactor: card #6258
* refactor:carousel (#6262)
* refactor:carousel
* docs:update & refactor: carousel type
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* refactor:transfer (#6247)
* refactor:transfer
* merge v4 branch & fix theme interface conflict
* docs:update & refactor: transfer type
* perf: transfer
* refactor:checkbox (#6248)
* refactor:checkbox
* docs:update & refactor: checkbox type
* feat: checkbox add disabled context
* refactor:pagination (#6251)
* refactor:pagination
* docs:update & refactor: pagination type
* style: update pagination props type
* refactor: mentions (#6255)
* refactor: mentions
* refactor: mentions menu provider
* doc: update mentions demo
* refcator:upload (#6261)
* refcator:upload
* docs:update & refactor: upload type
* Update style.ts
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* perf: upload motion
* refactor:timeline (#6263)
* refactor:timeline
* docs:update & refactor: timeline type
* perf: timeline
* refactor:steps (#6264)
* refactor:steps
* fix ...attrs
* fix StepsToken error
* docs:update & refactor: steps type
* fix: steps icon clss error
* refactor:collapse (#6266)
* refactor:collapse
* fix collapse props version
* docs:update & refactor: collapse type & fix collapsible
* feat: update collapse type
* refactor:inputnumber (#6265)
* refactor:inputnumber
* docs:update & refactor: inputnumber type
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* feat: number add compactSize & disabledContext
* refactor:table (#6267)
* refactor:table
* docs:update & refactor: table type
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* refactor: table
* feat: table add expandColumnTitle slot
* refactor:calendar (#6269)
* refactor:calendar
* docs:update
* refactor:timepicker (#6270)
* refactor:timepicker
* docs:update & refactor: timepicker type
* refactor:tree (#6276)
* Feat v4 fix type errors (#6285)
* fix compile type errors
* fix menuprops type import
* fix lint errors
* fix lint errors
* fix format error
* fix node version
* fix run dist error
* fix run lint
* fix as any
* fix string type
* refactor: rename locale file
* feat: tree add leafIcon
* [tabs] :less to cssinjs (#6288)
* update
* switch
* Style adjustment
* refactor(Card): less to cssinjs
* tabs: less to cssinjs 开发ing
* add function cssinjs
* Eliminate irrelevant code
* Eliminate irrelevant code 2
* update components
* Eliminate irrelevant input code
* refactor: tabs #6288
* feat: add segmented (#6286)
* refactor: segmented #6286
* refactor:select (#6295)
* refactor:select
* update doc
* delete useless
* feat: select add context size
* refactor: tree select (#6296)
* feat: tree-select add context size
* perf: table
* docs: update doc toc
* refactor: cascader
* refactor: auto-complete
* refactor: image
* refactor: drawer
* refactor:radio (#6299)
* refactor:radio
* fix attrs
* feat: radio add disabled context
* fix: some type & doc (#6292)
* fix: typo (#6218)
* fix: typo
* docs<upload>: docs update
* fix: type of minute in props disabledDateTime of DatePicker (#6233)
* docs: typo (#6256)
* feat: tooltip added overlayInnerStyle attribute
* Update abstractTooltipProps.ts
* Update Tooltip.tsx
---------
Co-authored-by: lyn <76365499@qq.com>
Co-authored-by: H1mple <35363759+baohangxing@users.noreply.github.com>
Co-authored-by: tangjinzhou <415800467@qq.com>
* refactor: form
* fix: directive not work
* fix: use open, remove visible
* doc: update cover
* refactor: remove not use code
* chore: update build script
* doc: update doc
* doc: refactor doc
* chore: update token error
* chore: update style
* refactor: rename _style to style
* fix: tag warning
* fix(dropdown): open invalid (#6316)
* feat: add watermark (#6300)
* feat: add watermark
* feat: add watermark demo
* feat: add mutationObserver
* feat: add watermark demo
* refactor: watermark type
* doc: add theme-editor
* fix: inject value maybe undefined && tag style invalid (#6320)
* fix: inject value maybe undefined
* fix(tag): style invalid
* feat: add qrcode (#6315)
* feat: add qrcode
* fix: qrcode bug
* fix: qrcode value required
* refactor: props deconstruct
* Feat v4 floatbutton (#6294)
* feat: add float-button components
* fix type & demo display
* fix components entry
* fix review bug
* fix bug
* fix .value
* refactor: qrcode #6315
* refactor: float-button
* fix: groupsize context error
* fix: floatbutton animation not work
* Feat v4 theme editor (#6348)
* feat: add theme editor container
* feat: add theme editor layout
* add left panel
* add vue-colorful & fix bug
* 修复hue组件抖动问题
* fix bug && add demo
* fix bug
* fix demo preview
* fix theme editor components demo
* fix: token effect error
* Feat v4 theme editor (#6349)
* feat: add theme editor container
* feat: add theme editor layout
* add left panel
* add vue-colorful & fix bug
* 修复hue组件抖动问题
* fix bug && add demo
* fix bug
* fix demo preview
* fix theme editor components demo
* add theme editor token drawer
* add theme editor token drawer
* fix bug
* open commment
* fix error demo
* fix theme editor bug
* fix: cssinjs effect error
* doc: format code
* fix: tag click event not trigger
* release 4.0.0-alpha.1
* fix: qrcode type
* fix: remove not use file
* doc: update doc site
* doc: update site
* doc: fix theme editor bgcolor (#6358)
* fix: motion not work
* release 4.0.0-alpha.2
* fix: qrcode ; error, close #6362
* fix docs dark theme & add docs coverDark (#6367)
* fix docs dark theme & add docs coverDark
* fix theme Editor edit
* fix: dropdown divider disappear, close #6365 (#6369)
* doc: update baner
* fix: button wave not work
* fix: ant-piker-cell-range-hover-end style error (#6373)
* fix: ant-piker-cell-range-hover-end style error
* feat: be consistent with antd
* feat: be consistent with antd
* fix: ConfigProvider error for style, close #6368
* release 4.0.0-alpha.4
* style: add dark style for `pre` and `code` (#6382)
* docs: version menu (#6390)
* Feat(DatePicker): increase presets prop (#6387)
* feat(date-picker): add PresetDate type
* feat(date-picker): add usePresets hook
* feat(date-picker): add PresetPanel Component
* feat(date-picker): add PresetPanel Component
* feat(demo): update Preset Ranges Examples
* feat(docs): add new prop presets
* feat(docs): add new prop presets with english
* fix(RangePicker): footer is not managed by panels
* chore(Picker): prefixCls default rc-picker
* chore(date-picker): update presetted-ranges demo
* chore(date-picker): update rangePickerProps'presets
* feat(date-picker): presets reactively processing
* chore(date-picker): update type
* refactor(RangePicker): deprecated ranges prop
* chore(date-picker): update type
* chore(PickerPanel): del notuse panelRef
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* fix: datepicker presets error #6387
* docs: update datepicker doc #6387
* feat(Steps): add items prop and variants (#6406)
* refactor(steps): add items prop and variants
* feat(steps): add Label Placement and Inline Steps demo
* feat(steps): Label Placement and Inline Steps snap
* test(steps): Steps demo snap
* feat(Steps): update docs
* fix(Step): progressDot
* chore(useLegacyItems): change from warning to devWarning
* refactor(Steps): Remove useLegacyItems
* refactor(Steps): renderStep
* test(Steps): update test snapshot
* chore(Steps): filterEmpty
* feat(Steps): update docs
* docs: update site
* refactor: steps #6406
* test: update steps
* perf: shallowRef instead ref
* fix(Modal): fix modal locale (#6423)
* feat(StyleProvider): add StyleProvider handle cssinjs features (#6415)
* feat(StyleProvider): StyleProvider
* feat(StyleProvider): refactor to use context
* chore(StyleProvider): update AStyleProviderProps type
* chore(App): reback
* chore(StyleProvider): export StyleProvider
* feat(StyleProvider): update StyleProvider docs
* feat(StyleProvider): update StyleProvider docs
* feat(StyleProvider): add StyleProvider docs routes
* chore(StyleProvider): with useStyleProvider
* docs: update compatiple #6415
* feat(Progress): enhance size prop and add variants (#6409)
* refactor(progress): Progress size and add variants
* feat(progress): add `getsize`
* refactor(progress): Progress size and add variants
* chore(progress): update props type
* chore(progress): update props type
* feat(progress): update demo
* feat(progress): update docs
* test(progress): update test snap
* fix(Circle): Merging classes
* test(progress): update test snap
* feat(progress): add size demo
* test(progress): add size snapshot
* chore(Progress): reback Circle svg class change
* fix: progress borderRadius reactive #6409
* fix(defaultConfigProvider): add getPopupContainer (#6425), close #6419
* fix: qrcode size error, close #6418
* release 4.0.0-alpha.4
* fix: picker import error
* test: add QRCode unit testing (#6441)
* fix
* fix compile type errors
* fix menuprops type import
* fix lint errors
* fix lint errors
* fix format error
* fix node version
* fix run dist error
* fix run lint
* fix as any
* fix string type
* fix steps error & fix docs version select option & fix theme editor error
* fix(badge): badge props count default value error (#6433)
* docs: update site responsive
* fix: modal api method i18n not work, close #6438
* release 4.0.0-alpha.5
* chore(docs): update docs (#6446)
* docs(space): update demo
* docs(affix): update docs
* fix: cssinjs compatibility (#6454)
* feat: add convertLegacyToken
* docs: v4 vuedocs (#6468)
* fix introduce doc
* fix getting-started doc
* add migration-v4 doc
* fix docs
* Update migration-v4.zh-CN.md
* Update migration-v4.zh-CN.md
* Update migration-v4.en-US.md
* Update migration-v4.zh-CN.md
* Update getting-started.en-US.md
* Update getting-started.zh-CN.md
* Update introduce.en-US.md
* Update introduce.zh-CN.md
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* feat: remove backtop
* feat(anchor): add direction action (#6447)
* refactor(anchor): direction show
* refactor(anchor): update anchor css
* feat(anchor): update demo
* test(anchor): update demo test snap
* feat(anchor): update docs
* Update index.zh-CN.md
* Update index.en-US.md
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* feat: anchor add customTitle slot #6447
* docs: update doc anchor
* feat(menu): icon support function components with items and update demo (#6457)
* fix(menu): icon do not show problem
* fix(menu): icon do not show problem
* feat(menu): update demo
* test(menu): update demo snap
* chore(Menu): update docs
* test(Menu): update demo
* Update MenuItem.tsx
* Update SubMenu.tsx
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* doc: update menu icon
* feat: menu items icon add arg
* fix: antd.min error
* release 4.0.0-alpha.6
* fix: table resizable not work && type error (#6514)
* Refactor(demo): change options to composition api (#6499)
* feat(demo): A-B
* feat(demo): update B-checkbox
* feat(demo): update CheckBox -DatePicker
* feat(demo): update DatePicker - Form
* feat(demo): update Form - List
* feat(demo): update List-pagination
* feat(demo): update List - skeleton
* feat(demo): update skeleton - switch
* feat(demo): update skeleton - switch
* feat(demo): update switch - upload
* feat(demo): update watermark
* fix(demo): del hashId
* fix: submenu type lose theme
* fix: dropdown menu hide error
* fix: dealing with switching topics modal, notification, message does not take effect close #6512 (#6518)
* fix: resolve dark mode not support
* fix: unified expression
* feat(modal): add useModal (#6517)
* feat(modal): add useModal hook
* feat(modal): add HookModal demo
* test(modal): update HookModal demo snap
* feat(modal): update modal docs
* chore(modal): update modal type
* perf: useModal #6517
* release 4.0.0-beta.1
* docs: fix tab demo error
* fix(config-provider): fix ConfigProvider.config is not function close #6528 (#6529)
* Feat(use): add useMessage useNotification (#6527)
* feat(Message): add useMessage hook
* feat(Notification): add useNotification hook
* feat(Message): add Hook demo
* feat(Notification): add Hook demo
* test(Message): update demo snap
* test(Notification): update demo snap
* docs(Message): update docs with FAQ
* docs(Notification): update docs with FAQ
* refactor: useMessage #6527
* refactor: useNotification #6527
* release 4.0.0-beta.2
* docs(button): update demo with space (#6536)
* feat(button): demo space
* test(button): update demo snap
* chore(button): disabled demo Ghost space
* test(button): update disabled demo snap
* docs(introduce): update docs (#6539)
* docs(introduce): update docs
* docs(introduce): add Dollar
* Update introduce.zh-CN.md
* Update introduce.en-US.md
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* docs(customize-theme): update docs (#6540)
* fix introduce doc
* fix getting-started doc
* add migration-v4 doc
* fix docs
* Update migration-v4.zh-CN.md
* Update migration-v4.zh-CN.md
* Update migration-v4.en-US.md
* Update migration-v4.zh-CN.md
* Update getting-started.en-US.md
* Update getting-started.zh-CN.md
* Update introduce.en-US.md
* Update introduce.zh-CN.md
* update customize-theme doc & fix migration-v4 error
* update customize-theme doc
* fix migration-v4 error
* remove SSR & shadowDom
* Update customize-theme.zh-CN.md
* Update customize-theme.en-US.md
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* fix: getPopupContainer not work
* release 4.0.0-beta.3
* release 4.0.0-beta.4
* docs: update grid docs (#6549)
Co-authored-by: zhuzhengjian <zhuzhengjian@hoteamsoft.com>
* test(alert): update demo with space (#6541)
* docs(alert): update demo with space
* docs(alert): update alert test snap
---------
Co-authored-by: zhuzhengjian <zhuzhengjian@hoteamsoft.com>
* fix: components bug & update docs (#6548)
* fix bug
* fix test case and update snapshot,fix space merge class
* docs(grid): update migrate docs && delete xxxl in grid docs (#6562)
* fix: segmentd disabled label is undefined (#6556)
* fix: segmentd disabled label is undefined
* fix: segmentd disabled label is undefined
* fix: segmentd disabled label is undefined
* fix(grid): remove grid xxxl attribute (#6572)
* fix: remove grid xxxl attribute
* docs: remove xxxl in grid docs
* fix: tooltip custom color error
* feat: remove Step __legacy
* feat: add tour (#6332)
* feat v4 add tour
* fix type error
* sync tour from antd5.4.6 & fix type error
* fix error
* refactor: tour #6332
* fix: tour center
* fix: picker support v-show
* test: update snap
* test: update tour test
* fix: tour-mask attrs pointer-events (#6577)
* fix: tour animated
* feat: support vue 3.3 slot type
* release 4.0.0-rc.1
* release 4.0.0-rc.2, close #6588
* 4.0.0-rc.3
* chore: remove vue private api
* fix: paginantion error, close #6590
* release 4.0.0-rc.4
* fix: checxbox style
* fix: pagination mini size style
* release 4.0.0-rc.5
* docs: update v4 tabs doc error(#6606) (#6607)
* docs: add ant-design-vue nuxt module (#6620)
* fix: layout-sider and menu transition style(#6637) (#6640)
* docs: fixed the style error of online demo (#6630)
* feat: ✨checkbox label slot support use option label (#6642)
* docs: 📃change the default setting of "treeNodeFilterProp" from "value" to "label"
* revert: ↩revert this config and create another pr to commit
* feat: ✨checkbox label slot support use option label
* test: 🧪update checkbox *.snap file
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* fix: add disabledContext override with form components (#6618)
* fix: add disabledContext override with form components
* test: update snap
* fix: LabelWidth demo filename
* fix: fontsize spelling mistake
* fix(tour): target position (#6629)
* style: format lint
* docs(form): add form disabled demo (#6658)
* fix: comment node error
* release 4.0
* fix: portalWrapper add autoLock prop (#6687), close #6649
* fix: image animation & zindex, close #6675
* docs(QRCode): Synchronize QR code demonstration and add SVG (#6660)
* fix: Synchronize QR code demonstration and add SVG
* fix: responsive loss and invalid border style
* docs: synchronize antd5.6.3 QRCode color in dark mode
* feat: calendar select support info.source param (#6697)
* docs: add ant-design-vue nuxt module
* feat: calendar select support info.source param
* docs: synchronous config-provider demo (#6706)
* revert: #6706
* docs: export space-compact types (#6716)
* release 4.0.0
---------
Co-authored-by: bqy_fe <1743369777@qq.com>
Co-authored-by: zkwolf <chenhao5866@gmail.com>
Co-authored-by: Zev Zhu <45655660+aibayanyu20@users.noreply.github.com>
Co-authored-by: lyn <76365499@qq.com>
Co-authored-by: 果冻橙 <shifeng199307@gmail.com>
Co-authored-by: songsong0707 <74165917+songsong0707@users.noreply.github.com>
Co-authored-by: yang <30883395+webvs2@users.noreply.github.com>
Co-authored-by: selicens <1244620067@qq.com>
Co-authored-by: 一堆菠萝 <53335668+JavanShen@users.noreply.github.com>
Co-authored-by: H1mple <35363759+baohangxing@users.noreply.github.com>
Co-authored-by: Cherry7 <79909910+CCherry07@users.noreply.github.com>
Co-authored-by: Konv Suu <2583695112@qq.com>
Co-authored-by: luoawai <32483950+luoawai@users.noreply.github.com>
Co-authored-by: 鱼见 <657715602@qq.com>
Co-authored-by: zhuzhengjian <zhuzhengjian@hoteamsoft.com>
Co-authored-by: Cupid Valentine <53572196+valcosmos@users.noreply.github.com>
Co-authored-by: 专业逮虾户aa <30494925+waldonUB@users.noreply.github.com>
Co-authored-by: PanStar <PanStar@users.noreply.github.com>
2023-07-14 03:58:27 +00:00
|
|
|
export const skipFlattenKey = Symbol('skipFlatten');
|
2020-06-30 10:31:58 +00:00
|
|
|
const flattenChildren = (children = [], filterEmpty = true) => {
|
|
|
|
const temp = Array.isArray(children) ? children : [children];
|
|
|
|
const res = [];
|
|
|
|
temp.forEach(child => {
|
|
|
|
if (Array.isArray(child)) {
|
|
|
|
res.push(...flattenChildren(child, filterEmpty));
|
|
|
|
} else if (child && child.type === Fragment) {
|
Feat v4 (#6329)
* refactor(icon): remove style dir (#6215)
* refactor: rename locale
* refactor: locale-provider
* refactor: modal
* refactor: menu
* fix: custom class (#6217)
* refactor: tooltip
* refactor: grid (#6220)
* refactor: grid
* fix(grid): align & justify responsive
* chore: update demo and snapshot
* fix: row ts type not work
* doc: update demo
* refactor: ts
* refactor: spin (#6222)
* fix: typo (#6218)
* fix: typo
* docs<upload>: docs update
* refactor: spin
* refactor: spin
* refactor: spin
* refactor: spinnn
* refactor: spin
---------
Co-authored-by: lyn <76365499@qq.com>
* fix: spin error #6222
* test: test case error (#6225)
* fix: inject value maybe undefined
* fix: tootip emit correct value
* fix: rollback warning suffix avoid test break
* doc(grid): remove unused type="flex"
* refactor: skeleton (#6224)
* refactor: skeleton
* refactor: skeleton style
* chore: modify skeleton demo style
* fix(button): link and text should not have wave (#6226)
* refactor: dropdown
* refactor: popover & popconfirm
* refactor(tag): less to cssinjs (#6227)
* refactor(empty): less to cssinjs (#6230)
* refactor(empty): less to cssinjs
* chore: remove unuse code
* fix: reactivity lose
* fix: empty props #6230
* refactor: progress style (#6234)
* refactor: progress
* refactor: progress style
* fix: progress attrs
* refactor: progress #6234
* refactor: switch (#6236)
* refactor: switch style
* refactor: delete switch style
* refactor:input (#6237)
* refactor:input
* fix inheritAttrs:false
* fix attrs.class
* feat: input add disabled
* refactor:comment (#6238)
* refactor:comment
* fix inheritAttrs: false & attrs.class
* refactor:pageheader (#6239)
* refactor:pageheader
* fix inheritAttrs: false & attrs.class
* refactor:statistic (#6240)
* refactor:statistic
* fix inheritAttrs: false & attrs.class
* refactor:list (#6241)
* refactor:list
* fix inheritAttrs: false & attrs.class
* feat: update type
* refactor(Space): less to cssinjs & add compact mode (#6229)
* refactor(Space): less to cssinjs & add compact mode
* chore(space): update md
* chore(space): add demo
* chore(space): add some demo
* feat(button): add compact mode
* fix: reactivity lose
* docs: fix props version
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* perf: space compact
* refactor:typography (#6244)
* refactor:typography
* fix return
* fix import type
* fix: typography #6244
* refactor:datepicker (#6245)
* refactor: datepicker type
* refactor: rate style (#6254)
* refactor(layout): less to cssinjs (#6249)
* doc: update layout cover
* refactor(result): less to cssinjs (#6246)
* refactor(result): less to cssinjs
* fix: class name is overridden
* docs: update result cover
* refactor:slider (#6250)
* feat: slider deprecated tooltipVisible
* refactor(crad): less to cssinjs (#6258)
* update
* switch
* Style adjustment
* refactor(Card): less to cssinjs
* Eliminate invalid code
* optimization and adjustment css
* Adjust the css
* Optimize each item
* adjustment css
* refactor: card #6258
* refactor:carousel (#6262)
* refactor:carousel
* docs:update & refactor: carousel type
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* refactor:transfer (#6247)
* refactor:transfer
* merge v4 branch & fix theme interface conflict
* docs:update & refactor: transfer type
* perf: transfer
* refactor:checkbox (#6248)
* refactor:checkbox
* docs:update & refactor: checkbox type
* feat: checkbox add disabled context
* refactor:pagination (#6251)
* refactor:pagination
* docs:update & refactor: pagination type
* style: update pagination props type
* refactor: mentions (#6255)
* refactor: mentions
* refactor: mentions menu provider
* doc: update mentions demo
* refcator:upload (#6261)
* refcator:upload
* docs:update & refactor: upload type
* Update style.ts
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* perf: upload motion
* refactor:timeline (#6263)
* refactor:timeline
* docs:update & refactor: timeline type
* perf: timeline
* refactor:steps (#6264)
* refactor:steps
* fix ...attrs
* fix StepsToken error
* docs:update & refactor: steps type
* fix: steps icon clss error
* refactor:collapse (#6266)
* refactor:collapse
* fix collapse props version
* docs:update & refactor: collapse type & fix collapsible
* feat: update collapse type
* refactor:inputnumber (#6265)
* refactor:inputnumber
* docs:update & refactor: inputnumber type
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* feat: number add compactSize & disabledContext
* refactor:table (#6267)
* refactor:table
* docs:update & refactor: table type
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* refactor: table
* feat: table add expandColumnTitle slot
* refactor:calendar (#6269)
* refactor:calendar
* docs:update
* refactor:timepicker (#6270)
* refactor:timepicker
* docs:update & refactor: timepicker type
* refactor:tree (#6276)
* Feat v4 fix type errors (#6285)
* fix compile type errors
* fix menuprops type import
* fix lint errors
* fix lint errors
* fix format error
* fix node version
* fix run dist error
* fix run lint
* fix as any
* fix string type
* refactor: rename locale file
* feat: tree add leafIcon
* [tabs] :less to cssinjs (#6288)
* update
* switch
* Style adjustment
* refactor(Card): less to cssinjs
* tabs: less to cssinjs 开发ing
* add function cssinjs
* Eliminate irrelevant code
* Eliminate irrelevant code 2
* update components
* Eliminate irrelevant input code
* refactor: tabs #6288
* feat: add segmented (#6286)
* refactor: segmented #6286
* refactor:select (#6295)
* refactor:select
* update doc
* delete useless
* feat: select add context size
* refactor: tree select (#6296)
* feat: tree-select add context size
* perf: table
* docs: update doc toc
* refactor: cascader
* refactor: auto-complete
* refactor: image
* refactor: drawer
* refactor:radio (#6299)
* refactor:radio
* fix attrs
* feat: radio add disabled context
* fix: some type & doc (#6292)
* fix: typo (#6218)
* fix: typo
* docs<upload>: docs update
* fix: type of minute in props disabledDateTime of DatePicker (#6233)
* docs: typo (#6256)
* feat: tooltip added overlayInnerStyle attribute
* Update abstractTooltipProps.ts
* Update Tooltip.tsx
---------
Co-authored-by: lyn <76365499@qq.com>
Co-authored-by: H1mple <35363759+baohangxing@users.noreply.github.com>
Co-authored-by: tangjinzhou <415800467@qq.com>
* refactor: form
* fix: directive not work
* fix: use open, remove visible
* doc: update cover
* refactor: remove not use code
* chore: update build script
* doc: update doc
* doc: refactor doc
* chore: update token error
* chore: update style
* refactor: rename _style to style
* fix: tag warning
* fix(dropdown): open invalid (#6316)
* feat: add watermark (#6300)
* feat: add watermark
* feat: add watermark demo
* feat: add mutationObserver
* feat: add watermark demo
* refactor: watermark type
* doc: add theme-editor
* fix: inject value maybe undefined && tag style invalid (#6320)
* fix: inject value maybe undefined
* fix(tag): style invalid
* feat: add qrcode (#6315)
* feat: add qrcode
* fix: qrcode bug
* fix: qrcode value required
* refactor: props deconstruct
* Feat v4 floatbutton (#6294)
* feat: add float-button components
* fix type & demo display
* fix components entry
* fix review bug
* fix bug
* fix .value
* refactor: qrcode #6315
* refactor: float-button
* fix: groupsize context error
* fix: floatbutton animation not work
* Feat v4 theme editor (#6348)
* feat: add theme editor container
* feat: add theme editor layout
* add left panel
* add vue-colorful & fix bug
* 修复hue组件抖动问题
* fix bug && add demo
* fix bug
* fix demo preview
* fix theme editor components demo
* fix: token effect error
* Feat v4 theme editor (#6349)
* feat: add theme editor container
* feat: add theme editor layout
* add left panel
* add vue-colorful & fix bug
* 修复hue组件抖动问题
* fix bug && add demo
* fix bug
* fix demo preview
* fix theme editor components demo
* add theme editor token drawer
* add theme editor token drawer
* fix bug
* open commment
* fix error demo
* fix theme editor bug
* fix: cssinjs effect error
* doc: format code
* fix: tag click event not trigger
* release 4.0.0-alpha.1
* fix: qrcode type
* fix: remove not use file
* doc: update doc site
* doc: update site
* doc: fix theme editor bgcolor (#6358)
* fix: motion not work
* release 4.0.0-alpha.2
* fix: qrcode ; error, close #6362
* fix docs dark theme & add docs coverDark (#6367)
* fix docs dark theme & add docs coverDark
* fix theme Editor edit
* fix: dropdown divider disappear, close #6365 (#6369)
* doc: update baner
* fix: button wave not work
* fix: ant-piker-cell-range-hover-end style error (#6373)
* fix: ant-piker-cell-range-hover-end style error
* feat: be consistent with antd
* feat: be consistent with antd
* fix: ConfigProvider error for style, close #6368
* release 4.0.0-alpha.4
* style: add dark style for `pre` and `code` (#6382)
* docs: version menu (#6390)
* Feat(DatePicker): increase presets prop (#6387)
* feat(date-picker): add PresetDate type
* feat(date-picker): add usePresets hook
* feat(date-picker): add PresetPanel Component
* feat(date-picker): add PresetPanel Component
* feat(demo): update Preset Ranges Examples
* feat(docs): add new prop presets
* feat(docs): add new prop presets with english
* fix(RangePicker): footer is not managed by panels
* chore(Picker): prefixCls default rc-picker
* chore(date-picker): update presetted-ranges demo
* chore(date-picker): update rangePickerProps'presets
* feat(date-picker): presets reactively processing
* chore(date-picker): update type
* refactor(RangePicker): deprecated ranges prop
* chore(date-picker): update type
* chore(PickerPanel): del notuse panelRef
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* fix: datepicker presets error #6387
* docs: update datepicker doc #6387
* feat(Steps): add items prop and variants (#6406)
* refactor(steps): add items prop and variants
* feat(steps): add Label Placement and Inline Steps demo
* feat(steps): Label Placement and Inline Steps snap
* test(steps): Steps demo snap
* feat(Steps): update docs
* fix(Step): progressDot
* chore(useLegacyItems): change from warning to devWarning
* refactor(Steps): Remove useLegacyItems
* refactor(Steps): renderStep
* test(Steps): update test snapshot
* chore(Steps): filterEmpty
* feat(Steps): update docs
* docs: update site
* refactor: steps #6406
* test: update steps
* perf: shallowRef instead ref
* fix(Modal): fix modal locale (#6423)
* feat(StyleProvider): add StyleProvider handle cssinjs features (#6415)
* feat(StyleProvider): StyleProvider
* feat(StyleProvider): refactor to use context
* chore(StyleProvider): update AStyleProviderProps type
* chore(App): reback
* chore(StyleProvider): export StyleProvider
* feat(StyleProvider): update StyleProvider docs
* feat(StyleProvider): update StyleProvider docs
* feat(StyleProvider): add StyleProvider docs routes
* chore(StyleProvider): with useStyleProvider
* docs: update compatiple #6415
* feat(Progress): enhance size prop and add variants (#6409)
* refactor(progress): Progress size and add variants
* feat(progress): add `getsize`
* refactor(progress): Progress size and add variants
* chore(progress): update props type
* chore(progress): update props type
* feat(progress): update demo
* feat(progress): update docs
* test(progress): update test snap
* fix(Circle): Merging classes
* test(progress): update test snap
* feat(progress): add size demo
* test(progress): add size snapshot
* chore(Progress): reback Circle svg class change
* fix: progress borderRadius reactive #6409
* fix(defaultConfigProvider): add getPopupContainer (#6425), close #6419
* fix: qrcode size error, close #6418
* release 4.0.0-alpha.4
* fix: picker import error
* test: add QRCode unit testing (#6441)
* fix
* fix compile type errors
* fix menuprops type import
* fix lint errors
* fix lint errors
* fix format error
* fix node version
* fix run dist error
* fix run lint
* fix as any
* fix string type
* fix steps error & fix docs version select option & fix theme editor error
* fix(badge): badge props count default value error (#6433)
* docs: update site responsive
* fix: modal api method i18n not work, close #6438
* release 4.0.0-alpha.5
* chore(docs): update docs (#6446)
* docs(space): update demo
* docs(affix): update docs
* fix: cssinjs compatibility (#6454)
* feat: add convertLegacyToken
* docs: v4 vuedocs (#6468)
* fix introduce doc
* fix getting-started doc
* add migration-v4 doc
* fix docs
* Update migration-v4.zh-CN.md
* Update migration-v4.zh-CN.md
* Update migration-v4.en-US.md
* Update migration-v4.zh-CN.md
* Update getting-started.en-US.md
* Update getting-started.zh-CN.md
* Update introduce.en-US.md
* Update introduce.zh-CN.md
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* feat: remove backtop
* feat(anchor): add direction action (#6447)
* refactor(anchor): direction show
* refactor(anchor): update anchor css
* feat(anchor): update demo
* test(anchor): update demo test snap
* feat(anchor): update docs
* Update index.zh-CN.md
* Update index.en-US.md
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* feat: anchor add customTitle slot #6447
* docs: update doc anchor
* feat(menu): icon support function components with items and update demo (#6457)
* fix(menu): icon do not show problem
* fix(menu): icon do not show problem
* feat(menu): update demo
* test(menu): update demo snap
* chore(Menu): update docs
* test(Menu): update demo
* Update MenuItem.tsx
* Update SubMenu.tsx
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* doc: update menu icon
* feat: menu items icon add arg
* fix: antd.min error
* release 4.0.0-alpha.6
* fix: table resizable not work && type error (#6514)
* Refactor(demo): change options to composition api (#6499)
* feat(demo): A-B
* feat(demo): update B-checkbox
* feat(demo): update CheckBox -DatePicker
* feat(demo): update DatePicker - Form
* feat(demo): update Form - List
* feat(demo): update List-pagination
* feat(demo): update List - skeleton
* feat(demo): update skeleton - switch
* feat(demo): update skeleton - switch
* feat(demo): update switch - upload
* feat(demo): update watermark
* fix(demo): del hashId
* fix: submenu type lose theme
* fix: dropdown menu hide error
* fix: dealing with switching topics modal, notification, message does not take effect close #6512 (#6518)
* fix: resolve dark mode not support
* fix: unified expression
* feat(modal): add useModal (#6517)
* feat(modal): add useModal hook
* feat(modal): add HookModal demo
* test(modal): update HookModal demo snap
* feat(modal): update modal docs
* chore(modal): update modal type
* perf: useModal #6517
* release 4.0.0-beta.1
* docs: fix tab demo error
* fix(config-provider): fix ConfigProvider.config is not function close #6528 (#6529)
* Feat(use): add useMessage useNotification (#6527)
* feat(Message): add useMessage hook
* feat(Notification): add useNotification hook
* feat(Message): add Hook demo
* feat(Notification): add Hook demo
* test(Message): update demo snap
* test(Notification): update demo snap
* docs(Message): update docs with FAQ
* docs(Notification): update docs with FAQ
* refactor: useMessage #6527
* refactor: useNotification #6527
* release 4.0.0-beta.2
* docs(button): update demo with space (#6536)
* feat(button): demo space
* test(button): update demo snap
* chore(button): disabled demo Ghost space
* test(button): update disabled demo snap
* docs(introduce): update docs (#6539)
* docs(introduce): update docs
* docs(introduce): add Dollar
* Update introduce.zh-CN.md
* Update introduce.en-US.md
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* docs(customize-theme): update docs (#6540)
* fix introduce doc
* fix getting-started doc
* add migration-v4 doc
* fix docs
* Update migration-v4.zh-CN.md
* Update migration-v4.zh-CN.md
* Update migration-v4.en-US.md
* Update migration-v4.zh-CN.md
* Update getting-started.en-US.md
* Update getting-started.zh-CN.md
* Update introduce.en-US.md
* Update introduce.zh-CN.md
* update customize-theme doc & fix migration-v4 error
* update customize-theme doc
* fix migration-v4 error
* remove SSR & shadowDom
* Update customize-theme.zh-CN.md
* Update customize-theme.en-US.md
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* fix: getPopupContainer not work
* release 4.0.0-beta.3
* release 4.0.0-beta.4
* docs: update grid docs (#6549)
Co-authored-by: zhuzhengjian <zhuzhengjian@hoteamsoft.com>
* test(alert): update demo with space (#6541)
* docs(alert): update demo with space
* docs(alert): update alert test snap
---------
Co-authored-by: zhuzhengjian <zhuzhengjian@hoteamsoft.com>
* fix: components bug & update docs (#6548)
* fix bug
* fix test case and update snapshot,fix space merge class
* docs(grid): update migrate docs && delete xxxl in grid docs (#6562)
* fix: segmentd disabled label is undefined (#6556)
* fix: segmentd disabled label is undefined
* fix: segmentd disabled label is undefined
* fix: segmentd disabled label is undefined
* fix(grid): remove grid xxxl attribute (#6572)
* fix: remove grid xxxl attribute
* docs: remove xxxl in grid docs
* fix: tooltip custom color error
* feat: remove Step __legacy
* feat: add tour (#6332)
* feat v4 add tour
* fix type error
* sync tour from antd5.4.6 & fix type error
* fix error
* refactor: tour #6332
* fix: tour center
* fix: picker support v-show
* test: update snap
* test: update tour test
* fix: tour-mask attrs pointer-events (#6577)
* fix: tour animated
* feat: support vue 3.3 slot type
* release 4.0.0-rc.1
* release 4.0.0-rc.2, close #6588
* 4.0.0-rc.3
* chore: remove vue private api
* fix: paginantion error, close #6590
* release 4.0.0-rc.4
* fix: checxbox style
* fix: pagination mini size style
* release 4.0.0-rc.5
* docs: update v4 tabs doc error(#6606) (#6607)
* docs: add ant-design-vue nuxt module (#6620)
* fix: layout-sider and menu transition style(#6637) (#6640)
* docs: fixed the style error of online demo (#6630)
* feat: ✨checkbox label slot support use option label (#6642)
* docs: 📃change the default setting of "treeNodeFilterProp" from "value" to "label"
* revert: ↩revert this config and create another pr to commit
* feat: ✨checkbox label slot support use option label
* test: 🧪update checkbox *.snap file
---------
Co-authored-by: tangjinzhou <415800467@qq.com>
* fix: add disabledContext override with form components (#6618)
* fix: add disabledContext override with form components
* test: update snap
* fix: LabelWidth demo filename
* fix: fontsize spelling mistake
* fix(tour): target position (#6629)
* style: format lint
* docs(form): add form disabled demo (#6658)
* fix: comment node error
* release 4.0
* fix: portalWrapper add autoLock prop (#6687), close #6649
* fix: image animation & zindex, close #6675
* docs(QRCode): Synchronize QR code demonstration and add SVG (#6660)
* fix: Synchronize QR code demonstration and add SVG
* fix: responsive loss and invalid border style
* docs: synchronize antd5.6.3 QRCode color in dark mode
* feat: calendar select support info.source param (#6697)
* docs: add ant-design-vue nuxt module
* feat: calendar select support info.source param
* docs: synchronous config-provider demo (#6706)
* revert: #6706
* docs: export space-compact types (#6716)
* release 4.0.0
---------
Co-authored-by: bqy_fe <1743369777@qq.com>
Co-authored-by: zkwolf <chenhao5866@gmail.com>
Co-authored-by: Zev Zhu <45655660+aibayanyu20@users.noreply.github.com>
Co-authored-by: lyn <76365499@qq.com>
Co-authored-by: 果冻橙 <shifeng199307@gmail.com>
Co-authored-by: songsong0707 <74165917+songsong0707@users.noreply.github.com>
Co-authored-by: yang <30883395+webvs2@users.noreply.github.com>
Co-authored-by: selicens <1244620067@qq.com>
Co-authored-by: 一堆菠萝 <53335668+JavanShen@users.noreply.github.com>
Co-authored-by: H1mple <35363759+baohangxing@users.noreply.github.com>
Co-authored-by: Cherry7 <79909910+CCherry07@users.noreply.github.com>
Co-authored-by: Konv Suu <2583695112@qq.com>
Co-authored-by: luoawai <32483950+luoawai@users.noreply.github.com>
Co-authored-by: 鱼见 <657715602@qq.com>
Co-authored-by: zhuzhengjian <zhuzhengjian@hoteamsoft.com>
Co-authored-by: Cupid Valentine <53572196+valcosmos@users.noreply.github.com>
Co-authored-by: 专业逮虾户aa <30494925+waldonUB@users.noreply.github.com>
Co-authored-by: PanStar <PanStar@users.noreply.github.com>
2023-07-14 03:58:27 +00:00
|
|
|
if (child.key === skipFlattenKey) {
|
|
|
|
res.push(child);
|
|
|
|
} else {
|
|
|
|
res.push(...flattenChildren(child.children, filterEmpty));
|
|
|
|
}
|
2020-06-30 10:31:58 +00:00
|
|
|
} else if (child && isVNode(child)) {
|
|
|
|
if (filterEmpty && !isEmptyElement(child)) {
|
|
|
|
res.push(child);
|
|
|
|
} else if (!filterEmpty) {
|
|
|
|
res.push(child);
|
|
|
|
}
|
2020-07-01 16:24:44 +00:00
|
|
|
} else if (isValid(child)) {
|
|
|
|
res.push(child);
|
2020-06-30 10:31:58 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
return res;
|
|
|
|
};
|
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
const getSlot = (self: any, name = 'default', options = {}) => {
|
2020-06-30 10:31:58 +00:00
|
|
|
if (isVNode(self)) {
|
|
|
|
if (self.type === Fragment) {
|
2023-08-30 13:44:03 +00:00
|
|
|
return name === 'default' ? flattenChildren(self.children as any[]) : [];
|
2020-06-30 10:31:58 +00:00
|
|
|
} else if (self.children && self.children[name]) {
|
|
|
|
return flattenChildren(self.children[name](options));
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
} else {
|
2023-08-30 13:44:03 +00:00
|
|
|
const res = self.$slots[name] && self.$slots[name](options);
|
2020-06-30 10:31:58 +00:00
|
|
|
return flattenChildren(res);
|
2020-06-14 13:41:29 +00:00
|
|
|
}
|
2019-02-13 14:11:27 +00:00
|
|
|
};
|
2019-08-07 13:56:30 +00:00
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
const findDOMNode = (instance: any) => {
|
2021-06-07 09:35:03 +00:00
|
|
|
let node = instance?.vnode?.el || (instance && (instance.$el || instance));
|
2020-06-29 10:43:43 +00:00
|
|
|
while (node && !node.tagName) {
|
2020-06-18 10:51:56 +00:00
|
|
|
node = node.nextSibling;
|
|
|
|
}
|
|
|
|
return node;
|
|
|
|
};
|
2023-08-30 13:44:03 +00:00
|
|
|
const getOptionProps = (instance: VueInstance) => {
|
2020-06-10 15:06:43 +00:00
|
|
|
const res = {};
|
|
|
|
if (instance.$ && instance.$.vnode) {
|
|
|
|
const props = instance.$.vnode.props || {};
|
|
|
|
Object.keys(instance.$props).forEach(k => {
|
|
|
|
const v = instance.$props[k];
|
2020-06-12 10:27:07 +00:00
|
|
|
const hyphenateKey = hyphenate(k);
|
|
|
|
if (v !== undefined || hyphenateKey in props) {
|
|
|
|
res[k] = v; // 直接取 $props[k]
|
2020-06-10 15:06:43 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
} else if (isVNode(instance) && typeof instance.type === 'object') {
|
2020-06-17 16:19:14 +00:00
|
|
|
const originProps = instance.props || {};
|
|
|
|
const props = {};
|
|
|
|
Object.keys(originProps).forEach(key => {
|
|
|
|
props[camelize(key)] = originProps[key];
|
|
|
|
});
|
2023-08-30 13:44:03 +00:00
|
|
|
const options = (instance.type as any).props || {};
|
2020-06-12 10:27:07 +00:00
|
|
|
Object.keys(options).forEach(k => {
|
2020-06-17 16:19:14 +00:00
|
|
|
const v = resolvePropValue(options, props, k, props[k]);
|
|
|
|
if (v !== undefined || k in props) {
|
2020-06-12 10:27:07 +00:00
|
|
|
res[k] = v;
|
2020-06-10 15:06:43 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return res;
|
2019-01-12 03:33:27 +00:00
|
|
|
};
|
2023-08-30 13:44:03 +00:00
|
|
|
const getComponent = (instance: any, prop = 'default', options = instance, execute = true) => {
|
2020-06-30 10:31:58 +00:00
|
|
|
let com = undefined;
|
2020-06-16 14:55:02 +00:00
|
|
|
if (instance.$) {
|
|
|
|
const temp = instance[prop];
|
|
|
|
if (temp !== undefined) {
|
|
|
|
return typeof temp === 'function' && execute ? temp(options) : temp;
|
|
|
|
} else {
|
2020-06-30 10:31:58 +00:00
|
|
|
com = instance.$slots[prop];
|
2020-06-16 14:55:02 +00:00
|
|
|
com = execute && com ? com(options) : com;
|
|
|
|
}
|
|
|
|
} else if (isVNode(instance)) {
|
|
|
|
const temp = instance.props && instance.props[prop];
|
2020-06-30 10:31:58 +00:00
|
|
|
if (temp !== undefined && instance.props !== null) {
|
2020-06-16 14:55:02 +00:00
|
|
|
return typeof temp === 'function' && execute ? temp(options) : temp;
|
2020-06-30 10:31:58 +00:00
|
|
|
} else if (instance.type === Fragment) {
|
|
|
|
com = instance.children;
|
2020-06-24 08:07:03 +00:00
|
|
|
} else if (instance.children && instance.children[prop]) {
|
2020-06-30 10:31:58 +00:00
|
|
|
com = instance.children[prop];
|
2020-06-16 14:55:02 +00:00
|
|
|
com = execute && com ? com(options) : com;
|
|
|
|
}
|
2020-06-02 15:21:24 +00:00
|
|
|
}
|
2020-06-30 10:31:58 +00:00
|
|
|
if (Array.isArray(com)) {
|
|
|
|
com = flattenChildren(com);
|
|
|
|
com = com.length === 1 ? com[0] : com;
|
|
|
|
com = com.length === 0 ? undefined : com;
|
|
|
|
}
|
|
|
|
return com;
|
2020-06-02 15:21:24 +00:00
|
|
|
};
|
2018-01-12 11:04:42 +00:00
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
const getKey = (ele: any) => {
|
|
|
|
const key = ele.key;
|
2019-01-12 03:33:27 +00:00
|
|
|
return key;
|
|
|
|
};
|
2018-02-24 10:12:24 +00:00
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
export function getEvents(ele: any = {}, on = true) {
|
2020-06-18 10:51:56 +00:00
|
|
|
let props = {};
|
|
|
|
if (ele.$) {
|
|
|
|
props = { ...props, ...ele.$attrs };
|
|
|
|
} else {
|
|
|
|
props = { ...props, ...ele.props };
|
|
|
|
}
|
|
|
|
return splitAttrs(props)[on ? 'onEvents' : 'events'];
|
2018-02-24 10:12:24 +00:00
|
|
|
}
|
2020-06-18 10:51:56 +00:00
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
export function getClass(ele: any) {
|
2020-06-10 10:21:16 +00:00
|
|
|
const props = (isVNode(ele) ? ele.props : ele.$attrs) || {};
|
2023-08-30 13:44:03 +00:00
|
|
|
const tempCls = props.class || {};
|
2019-01-12 03:33:27 +00:00
|
|
|
let cls = {};
|
2018-03-06 14:53:32 +00:00
|
|
|
if (typeof tempCls === 'string') {
|
2019-01-12 03:33:27 +00:00
|
|
|
tempCls.split(' ').forEach(c => {
|
|
|
|
cls[c.trim()] = true;
|
|
|
|
});
|
2018-12-19 14:57:56 +00:00
|
|
|
} else if (Array.isArray(tempCls)) {
|
2019-01-12 03:33:27 +00:00
|
|
|
classNames(tempCls)
|
|
|
|
.split(' ')
|
|
|
|
.forEach(c => {
|
|
|
|
cls[c.trim()] = true;
|
|
|
|
});
|
2018-03-06 14:53:32 +00:00
|
|
|
} else {
|
2019-01-12 03:33:27 +00:00
|
|
|
cls = { ...cls, ...tempCls };
|
2018-03-06 11:14:41 +00:00
|
|
|
}
|
2019-01-12 03:33:27 +00:00
|
|
|
return cls;
|
2018-02-24 10:12:24 +00:00
|
|
|
}
|
2023-08-30 13:44:03 +00:00
|
|
|
export function getStyle(ele: any, camel?: boolean) {
|
2020-06-10 10:21:16 +00:00
|
|
|
const props = (isVNode(ele) ? ele.props : ele.$attrs) || {};
|
|
|
|
let style = props.style || {};
|
2018-03-07 13:36:15 +00:00
|
|
|
if (typeof style === 'string') {
|
2019-01-12 03:33:27 +00:00
|
|
|
style = parseStyleText(style, camel);
|
|
|
|
} else if (camel && style) {
|
|
|
|
// 驼峰化
|
|
|
|
const res = {};
|
|
|
|
Object.keys(style).forEach(k => (res[camelize(k)] = style[k]));
|
|
|
|
return res;
|
2018-03-07 13:36:15 +00:00
|
|
|
}
|
2019-01-12 03:33:27 +00:00
|
|
|
return style;
|
2018-02-24 10:12:24 +00:00
|
|
|
}
|
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
export function getComponentName(opts: any) {
|
2019-01-12 03:33:27 +00:00
|
|
|
return opts && (opts.Ctor.options.name || opts.tag);
|
2018-02-24 10:12:24 +00:00
|
|
|
}
|
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
export function isFragment(c: any) {
|
2020-06-22 06:21:40 +00:00
|
|
|
return c.length === 1 && c[0].type === Fragment;
|
|
|
|
}
|
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
export function isEmptyContent(c: any) {
|
2021-06-19 14:47:28 +00:00
|
|
|
return c === undefined || c === null || c === '' || (Array.isArray(c) && c.length === 0);
|
|
|
|
}
|
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
export function isEmptyElement(c: any) {
|
2020-06-29 14:22:25 +00:00
|
|
|
return (
|
2021-07-13 02:31:54 +00:00
|
|
|
c &&
|
|
|
|
(c.type === Comment ||
|
|
|
|
(c.type === Fragment && c.children.length === 0) ||
|
|
|
|
(c.type === Text && c.children.trim() === ''))
|
2020-06-29 14:22:25 +00:00
|
|
|
);
|
2018-02-24 10:12:24 +00:00
|
|
|
}
|
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
export function isEmptySlot(c: any) {
|
2021-05-23 12:24:41 +00:00
|
|
|
return !c || c().every(isEmptyElement);
|
|
|
|
}
|
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
export function isStringElement(c: any) {
|
2020-07-31 15:40:06 +00:00
|
|
|
return c && c.type === Text;
|
2020-03-07 11:45:13 +00:00
|
|
|
}
|
|
|
|
|
2020-10-02 07:44:10 +00:00
|
|
|
export function filterEmpty(children = []) {
|
|
|
|
const res = [];
|
2020-06-29 14:22:25 +00:00
|
|
|
children.forEach(child => {
|
|
|
|
if (Array.isArray(child)) {
|
|
|
|
res.push(...child);
|
2022-08-14 01:04:17 +00:00
|
|
|
} else if (child?.type === Fragment) {
|
|
|
|
res.push(...filterEmpty(child.children));
|
2020-06-29 14:22:25 +00:00
|
|
|
} else {
|
|
|
|
res.push(child);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return res.filter(c => !isEmptyElement(c));
|
2018-02-24 10:12:24 +00:00
|
|
|
}
|
2018-03-12 14:13:59 +00:00
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
export function filterEmptyWithUndefined(children: any[]) {
|
2022-04-28 06:06:59 +00:00
|
|
|
if (children) {
|
|
|
|
const coms = filterEmpty(children);
|
|
|
|
return coms.length ? coms : undefined;
|
|
|
|
} else {
|
|
|
|
return children;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
function isValidElement(element: any) {
|
2021-09-25 08:51:32 +00:00
|
|
|
if (Array.isArray(element) && element.length === 1) {
|
|
|
|
element = element[0];
|
|
|
|
}
|
2020-06-10 10:21:16 +00:00
|
|
|
return element && element.__v_isVNode && typeof element.type !== 'symbol'; // remove text node
|
2018-03-25 14:23:04 +00:00
|
|
|
}
|
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
function getPropsSlot(slots: any, props: any, prop = 'default') {
|
2021-06-07 09:35:03 +00:00
|
|
|
return props[prop] ?? slots[prop]?.();
|
2021-04-11 01:57:20 +00:00
|
|
|
}
|
2021-11-03 08:24:35 +00:00
|
|
|
|
2023-08-30 13:44:03 +00:00
|
|
|
export const getTextFromElement = (ele: any) => {
|
2021-11-03 08:24:35 +00:00
|
|
|
if (isValidElement(ele) && isStringElement(ele[0])) {
|
|
|
|
return ele[0].children;
|
|
|
|
}
|
|
|
|
return ele;
|
|
|
|
};
|
2018-02-12 10:10:51 +00:00
|
|
|
export {
|
2020-05-28 11:45:50 +00:00
|
|
|
splitAttrs,
|
2018-02-12 10:10:51 +00:00
|
|
|
hasProp,
|
|
|
|
getOptionProps,
|
2020-06-02 15:21:24 +00:00
|
|
|
getComponent,
|
2018-02-12 10:10:51 +00:00
|
|
|
getKey,
|
2018-03-03 11:14:03 +00:00
|
|
|
parseStyleText,
|
2018-03-06 11:14:41 +00:00
|
|
|
initDefaultProps,
|
2018-03-25 14:23:04 +00:00
|
|
|
isValidElement,
|
2018-03-29 10:18:41 +00:00
|
|
|
camelize,
|
2019-02-13 14:11:27 +00:00
|
|
|
getSlot,
|
2020-06-18 10:51:56 +00:00
|
|
|
findDOMNode,
|
2020-06-30 10:31:58 +00:00
|
|
|
flattenChildren,
|
2021-04-11 01:57:20 +00:00
|
|
|
getPropsSlot,
|
2019-01-12 03:33:27 +00:00
|
|
|
};
|
|
|
|
export default hasProp;
|