@xlabs-store/core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/components/index.d.ts +35 -0
- package/components/index.js +1 -0
- package/components/p-5c86X8JO.js +1 -0
- package/components/p-6KpqCGp9.js +1 -0
- package/components/p-ADwHM_jT.js +1 -0
- package/components/p-AgSyA7Ia.js +1 -0
- package/components/p-B-7Hwizp.js +1 -0
- package/components/p-B-ClGFfy.js +1 -0
- package/components/p-B4R9Mtmk.js +1 -0
- package/components/p-B4rO7Sgt.js +1 -0
- package/components/p-B5Syz0fw.js +1 -0
- package/components/p-B6p-mzW-.js +1 -0
- package/components/p-B8SZP5Xz.js +1 -0
- package/components/p-BBGHXZqR.js +1 -0
- package/components/p-BHLvuyOq.js +1 -0
- package/components/p-BM-ap7lt.js +1 -0
- package/components/p-BOCR5Zk0.js +1 -0
- package/components/p-BPeosvTA.js +1 -0
- package/components/p-BRBrLtOz.js +1 -0
- package/components/p-BSRP2TGa.js +1 -0
- package/components/p-BUjRcJoK.js +1 -0
- package/components/p-BVeQ5W_G.js +1 -0
- package/components/p-BVnVlCcd.js +1 -0
- package/components/p-BZQcq9R_.js +1 -0
- package/components/p-BeIFU-wn.js +1 -0
- package/components/p-BkEgl31q.js +1 -0
- package/components/p-BkPJ1Whr.js +1 -0
- package/components/p-BkevSugc.js +1 -0
- package/components/p-BkiOFW3H.js +1 -0
- package/components/p-BskMfHyY.js +1 -0
- package/components/p-Bu2JqZs8.js +1 -0
- package/components/p-BvjR2Q5Q.js +1 -0
- package/components/p-Bz7MhZ4K.js +1 -0
- package/components/p-C3gvR6nN.js +1 -0
- package/components/p-C70KKm8p.js +1 -0
- package/components/p-C7csgUoA.js +1 -0
- package/components/p-CAPfC5Vn.js +1 -0
- package/components/p-CEBSDVyp.js +1 -0
- package/components/p-CFB6xkAX.js +1 -0
- package/components/p-CGIxdOEm.js +1 -0
- package/components/p-CGYOWZnh.js +1 -0
- package/components/p-CHRrsVXB.js +1 -0
- package/components/p-CKUzvJue.js +1 -0
- package/components/p-CKVSyuIH.js +1 -0
- package/components/p-COpzIi1n.js +1 -0
- package/components/p-CRBPzT4B.js +1 -0
- package/components/p-CSfrs76m.js +1 -0
- package/components/p-C_ZBjXFP.js +1 -0
- package/components/p-Cd919NAP.js +1 -0
- package/components/p-Ce32Mo_Q.js +1 -0
- package/components/p-Ce5L9qbY.js +1 -0
- package/components/p-CeBfFEIa.js +1 -0
- package/components/p-CfhgoXyB.js +1 -0
- package/components/p-Ck6SW8G3.js +1 -0
- package/components/p-Co3Y9VjQ.js +1 -0
- package/components/p-D66tF8_2.js +1 -0
- package/components/p-D7ijqXRY.js +1 -0
- package/components/p-D7n-26Q5.js +1 -0
- package/components/p-D8ew7Rgv.js +1 -0
- package/components/p-DBk4T-b-.js +1 -0
- package/components/p-DD-W_fMF.js +1 -0
- package/components/p-DElCk9ta.js +1 -0
- package/components/p-DEumEVI3.js +1 -0
- package/components/p-DGqQ8PT4.js +1 -0
- package/components/p-DJ1WhSJ4.js +1 -0
- package/components/p-DOxXxhXb.js +1 -0
- package/components/p-DRa4o4c6.js +1 -0
- package/components/p-DTlSrH8_.js +1 -0
- package/components/p-DTvD0UO5.js +1 -0
- package/components/p-DVz50Dd3.js +1 -0
- package/components/p-DZFphzg1.js +1 -0
- package/components/p-DZPUUptR.js +1 -0
- package/components/p-D_xaGiZU.js +1 -0
- package/components/p-DaL42JUi.js +1 -0
- package/components/p-DbRpEXwX.js +1 -0
- package/components/p-DcRlYBIl.js +1 -0
- package/components/p-Dg0xgMke.js +1 -0
- package/components/p-Dgxy93Bg.js +1 -0
- package/components/p-Dky_8i8S.js +1 -0
- package/components/p-DlwlBBr4.js +1 -0
- package/components/p-DoTf8yXn.js +1 -0
- package/components/p-DphUq6Z5.js +1 -0
- package/components/p-DsgWQbJY.js +1 -0
- package/components/p-Dx3yBe39.js +1 -0
- package/components/p-DxKMnrS8.js +1 -0
- package/components/p-O88oQkR1.js +1 -0
- package/components/p-PlUkLT0A.js +1 -0
- package/components/p-QTSiPk0I.js +1 -0
- package/components/p-TC9DZAbC.js +1 -0
- package/components/p-XBF88YT_.js +1 -0
- package/components/p-bVsOg7S9.js +1 -0
- package/components/p-ccpcKv5U.js +1 -0
- package/components/p-en06CSUT.js +1 -0
- package/components/p-g6ZBqIze.js +1 -0
- package/components/p-noTpj1Kh.js +1 -0
- package/components/x-address.d.ts +11 -0
- package/components/x-address.js +1 -0
- package/components/x-affix.d.ts +11 -0
- package/components/x-affix.js +1 -0
- package/components/x-alert.d.ts +11 -0
- package/components/x-alert.js +1 -0
- package/components/x-anchor-link.d.ts +11 -0
- package/components/x-anchor-link.js +1 -0
- package/components/x-anchor.d.ts +11 -0
- package/components/x-anchor.js +1 -0
- package/components/x-app.d.ts +11 -0
- package/components/x-app.js +1 -0
- package/components/x-auto-complete-dropdown-content.d.ts +11 -0
- package/components/x-auto-complete-dropdown-content.js +1 -0
- package/components/x-auto-complete.d.ts +11 -0
- package/components/x-auto-complete.js +1 -0
- package/components/x-avatar.d.ts +11 -0
- package/components/x-avatar.js +1 -0
- package/components/x-back-top.d.ts +11 -0
- package/components/x-back-top.js +1 -0
- package/components/x-badge.d.ts +11 -0
- package/components/x-badge.js +1 -0
- package/components/x-breadcrumb-item.d.ts +11 -0
- package/components/x-breadcrumb-item.js +1 -0
- package/components/x-breadcrumb.d.ts +11 -0
- package/components/x-breadcrumb.js +1 -0
- package/components/x-button.d.ts +11 -0
- package/components/x-button.js +1 -0
- package/components/x-captcha.d.ts +11 -0
- package/components/x-captcha.js +1 -0
- package/components/x-card.d.ts +11 -0
- package/components/x-card.js +1 -0
- package/components/x-carousel.d.ts +11 -0
- package/components/x-carousel.js +1 -0
- package/components/x-cascader-dropdown-content.d.ts +11 -0
- package/components/x-cascader-dropdown-content.js +1 -0
- package/components/x-cascader.d.ts +11 -0
- package/components/x-cascader.js +1 -0
- package/components/x-checkbox.d.ts +11 -0
- package/components/x-checkbox.js +1 -0
- package/components/x-col.d.ts +11 -0
- package/components/x-col.js +1 -0
- package/components/x-collapse-panel.d.ts +11 -0
- package/components/x-collapse-panel.js +1 -0
- package/components/x-collapse.d.ts +11 -0
- package/components/x-collapse.js +1 -0
- package/components/x-color-picker-panel.d.ts +11 -0
- package/components/x-color-picker-panel.js +1 -0
- package/components/x-color-picker.d.ts +11 -0
- package/components/x-color-picker.js +1 -0
- package/components/x-comment.d.ts +11 -0
- package/components/x-comment.js +1 -0
- package/components/x-content.d.ts +11 -0
- package/components/x-content.js +1 -0
- package/components/x-date-picker-dropdown-content.d.ts +11 -0
- package/components/x-date-picker-dropdown-content.js +1 -0
- package/components/x-date-picker.d.ts +11 -0
- package/components/x-date-picker.js +1 -0
- package/components/x-descriptions-item.d.ts +11 -0
- package/components/x-descriptions-item.js +1 -0
- package/components/x-descriptions.d.ts +11 -0
- package/components/x-descriptions.js +1 -0
- package/components/x-divider.d.ts +11 -0
- package/components/x-divider.js +1 -0
- package/components/x-drawer-content.d.ts +11 -0
- package/components/x-drawer-content.js +1 -0
- package/components/x-drawer.d.ts +11 -0
- package/components/x-drawer.js +1 -0
- package/components/x-dropdown-content.d.ts +11 -0
- package/components/x-dropdown-content.js +1 -0
- package/components/x-dropdown.d.ts +11 -0
- package/components/x-dropdown.js +1 -0
- package/components/x-editor.d.ts +11 -0
- package/components/x-editor.js +1 -0
- package/components/x-empty.d.ts +11 -0
- package/components/x-empty.js +1 -0
- package/components/x-finder.d.ts +11 -0
- package/components/x-finder.js +1 -0
- package/components/x-flex.d.ts +11 -0
- package/components/x-flex.js +1 -0
- package/components/x-float-button.d.ts +11 -0
- package/components/x-float-button.js +1 -0
- package/components/x-footer.d.ts +11 -0
- package/components/x-footer.js +1 -0
- package/components/x-form-builder.d.ts +11 -0
- package/components/x-form-builder.js +1 -0
- package/components/x-form-item.d.ts +11 -0
- package/components/x-form-item.js +1 -0
- package/components/x-form.d.ts +11 -0
- package/components/x-form.js +1 -0
- package/components/x-header.d.ts +11 -0
- package/components/x-header.js +1 -0
- package/components/x-icon.d.ts +11 -0
- package/components/x-icon.js +1 -0
- package/components/x-image.d.ts +11 -0
- package/components/x-image.js +1 -0
- package/components/x-infinite-scroll.d.ts +11 -0
- package/components/x-infinite-scroll.js +1 -0
- package/components/x-input-number.d.ts +11 -0
- package/components/x-input-number.js +1 -0
- package/components/x-input.d.ts +11 -0
- package/components/x-input.js +1 -0
- package/components/x-layout.d.ts +11 -0
- package/components/x-layout.js +1 -0
- package/components/x-list-item.d.ts +11 -0
- package/components/x-list-item.js +1 -0
- package/components/x-list.d.ts +11 -0
- package/components/x-list.js +1 -0
- package/components/x-mentions.d.ts +11 -0
- package/components/x-mentions.js +1 -0
- package/components/x-menu-divider.d.ts +11 -0
- package/components/x-menu-divider.js +1 -0
- package/components/x-menu-item-group.d.ts +11 -0
- package/components/x-menu-item-group.js +1 -0
- package/components/x-menu-item.d.ts +11 -0
- package/components/x-menu-item.js +1 -0
- package/components/x-menu-submenu.d.ts +11 -0
- package/components/x-menu-submenu.js +1 -0
- package/components/x-menu.d.ts +11 -0
- package/components/x-menu.js +1 -0
- package/components/x-message.d.ts +11 -0
- package/components/x-message.js +1 -0
- package/components/x-modal-content.d.ts +11 -0
- package/components/x-modal-content.js +1 -0
- package/components/x-modal.d.ts +11 -0
- package/components/x-modal.js +1 -0
- package/components/x-notification.d.ts +11 -0
- package/components/x-notification.js +1 -0
- package/components/x-page-header.d.ts +11 -0
- package/components/x-page-header.js +1 -0
- package/components/x-pagination.d.ts +11 -0
- package/components/x-pagination.js +1 -0
- package/components/x-popconfirm-content.d.ts +11 -0
- package/components/x-popconfirm-content.js +1 -0
- package/components/x-popconfirm.d.ts +11 -0
- package/components/x-popconfirm.js +1 -0
- package/components/x-popover-content.d.ts +11 -0
- package/components/x-popover-content.js +1 -0
- package/components/x-popover.d.ts +11 -0
- package/components/x-popover.js +1 -0
- package/components/x-progress.d.ts +11 -0
- package/components/x-progress.js +1 -0
- package/components/x-qr-code.d.ts +11 -0
- package/components/x-qr-code.js +1 -0
- package/components/x-radio-group.d.ts +11 -0
- package/components/x-radio-group.js +1 -0
- package/components/x-radio.d.ts +11 -0
- package/components/x-radio.js +1 -0
- package/components/x-range-picker-dropdown-content.d.ts +11 -0
- package/components/x-range-picker-dropdown-content.js +1 -0
- package/components/x-range-picker.d.ts +11 -0
- package/components/x-range-picker.js +1 -0
- package/components/x-rate.d.ts +11 -0
- package/components/x-rate.js +1 -0
- package/components/x-result.d.ts +11 -0
- package/components/x-result.js +1 -0
- package/components/x-row.d.ts +11 -0
- package/components/x-row.js +1 -0
- package/components/x-segmented.d.ts +11 -0
- package/components/x-segmented.js +1 -0
- package/components/x-select-dropdown-content.d.ts +11 -0
- package/components/x-select-dropdown-content.js +1 -0
- package/components/x-select-option.d.ts +11 -0
- package/components/x-select-option.js +1 -0
- package/components/x-select.d.ts +11 -0
- package/components/x-select.js +1 -0
- package/components/x-sider.d.ts +11 -0
- package/components/x-sider.js +1 -0
- package/components/x-skeleton.d.ts +11 -0
- package/components/x-skeleton.js +1 -0
- package/components/x-slider.d.ts +11 -0
- package/components/x-slider.js +1 -0
- package/components/x-space.d.ts +11 -0
- package/components/x-space.js +1 -0
- package/components/x-spin.d.ts +11 -0
- package/components/x-spin.js +1 -0
- package/components/x-splitter-panel.d.ts +11 -0
- package/components/x-splitter-panel.js +1 -0
- package/components/x-splitter.d.ts +11 -0
- package/components/x-splitter.js +1 -0
- package/components/x-statistic.d.ts +11 -0
- package/components/x-statistic.js +1 -0
- package/components/x-step.d.ts +11 -0
- package/components/x-step.js +1 -0
- package/components/x-steps.d.ts +11 -0
- package/components/x-steps.js +1 -0
- package/components/x-switch.d.ts +11 -0
- package/components/x-switch.js +1 -0
- package/components/x-tab-pane.d.ts +11 -0
- package/components/x-tab-pane.js +1 -0
- package/components/x-table-cell.d.ts +11 -0
- package/components/x-table-cell.js +1 -0
- package/components/x-table-row.d.ts +11 -0
- package/components/x-table-row.js +1 -0
- package/components/x-table.d.ts +11 -0
- package/components/x-table.js +1 -0
- package/components/x-tabs.d.ts +11 -0
- package/components/x-tabs.js +1 -0
- package/components/x-tag.d.ts +11 -0
- package/components/x-tag.js +1 -0
- package/components/x-textarea.d.ts +11 -0
- package/components/x-textarea.js +1 -0
- package/components/x-time-picker-dropdown-content.d.ts +11 -0
- package/components/x-time-picker-dropdown-content.js +1 -0
- package/components/x-time-picker.d.ts +11 -0
- package/components/x-time-picker.js +1 -0
- package/components/x-timeline-item.d.ts +11 -0
- package/components/x-timeline-item.js +1 -0
- package/components/x-timeline.d.ts +11 -0
- package/components/x-timeline.js +1 -0
- package/components/x-tooltip-content.d.ts +11 -0
- package/components/x-tooltip-content.js +1 -0
- package/components/x-tooltip.d.ts +11 -0
- package/components/x-tooltip.js +1 -0
- package/components/x-tour-panel.d.ts +11 -0
- package/components/x-tour-panel.js +1 -0
- package/components/x-tour.d.ts +11 -0
- package/components/x-tour.js +1 -0
- package/components/x-transfer.d.ts +11 -0
- package/components/x-transfer.js +1 -0
- package/components/x-tree-select-dropdown-content.d.ts +11 -0
- package/components/x-tree-select-dropdown-content.js +1 -0
- package/components/x-tree-select.d.ts +11 -0
- package/components/x-tree-select.js +1 -0
- package/components/x-tree.d.ts +11 -0
- package/components/x-tree.js +1 -0
- package/components/x-typography.d.ts +11 -0
- package/components/x-typography.js +1 -0
- package/components/x-upload.d.ts +11 -0
- package/components/x-upload.js +1 -0
- package/components/x-virtual-scroll.d.ts +11 -0
- package/components/x-virtual-scroll.js +1 -0
- package/components/x-workflow-builder.d.ts +11 -0
- package/components/x-workflow-builder.js +1 -0
- package/components/x-workflow.d.ts +11 -0
- package/components/x-workflow.js +1 -0
- package/dist/cjs/abstract-control-C4D0eNCC.js +277 -0
- package/dist/cjs/config-BP9bROYD.js +63 -0
- package/dist/cjs/index-C7sKs9A2.js +2170 -0
- package/dist/cjs/index.cjs.js +14 -0
- package/dist/cjs/loader.cjs.js +12 -0
- package/dist/cjs/locale.service-Cz-aZQnr.js +8203 -0
- package/dist/cjs/modal-service-BtAF0mFq.js +399 -0
- package/dist/cjs/notification-service-m6I5U9aG.js +602 -0
- package/dist/cjs/portal-controller-CtYVbhXL.js +504 -0
- package/dist/cjs/schema-builder-CYnX7lKi.js +1505 -0
- package/dist/cjs/tree.service-fxLOCSpD.js +339 -0
- package/dist/cjs/types-DQ-V76ZQ.js +255 -0
- package/dist/cjs/x-address_14.cjs.entry.js +12577 -0
- package/dist/cjs/x-affix.cjs.entry.js +182 -0
- package/dist/cjs/x-alert_11.cjs.entry.js +3239 -0
- package/dist/cjs/x-anchor-link.cjs.entry.js +67 -0
- package/dist/cjs/x-anchor.cjs.entry.js +158 -0
- package/dist/cjs/x-app.cjs.entry.js +137 -0
- package/dist/cjs/x-auto-complete-dropdown-content.cjs.entry.js +69 -0
- package/dist/cjs/x-avatar.cjs.entry.js +269 -0
- package/dist/cjs/x-back-top.cjs.entry.js +89 -0
- package/dist/cjs/x-breadcrumb_5.cjs.entry.js +1554 -0
- package/dist/cjs/x-button.cjs.entry.js +174 -0
- package/dist/cjs/x-card_12.cjs.entry.js +1386 -0
- package/dist/cjs/x-carousel.cjs.entry.js +147 -0
- package/dist/cjs/x-cascader-dropdown-content.cjs.entry.js +364 -0
- package/dist/cjs/x-checkbox_5.cjs.entry.js +1376 -0
- package/dist/cjs/x-collapse-panel.cjs.entry.js +243 -0
- package/dist/cjs/x-collapse.cjs.entry.js +291 -0
- package/dist/cjs/x-color-picker-panel_2.cjs.entry.js +873 -0
- package/dist/cjs/x-color-picker_9.cjs.entry.js +3085 -0
- package/dist/cjs/x-comment.cjs.entry.js +189 -0
- package/dist/cjs/x-date-picker-dropdown-content.cjs.entry.js +757 -0
- package/dist/cjs/x-descriptions-item.cjs.entry.js +108 -0
- package/dist/cjs/x-drawer-content.cjs.entry.js +197 -0
- package/dist/cjs/x-drawer.cjs.entry.js +294 -0
- package/dist/cjs/x-dropdown_2.cjs.entry.js +735 -0
- package/dist/cjs/x-empty.cjs.entry.js +64 -0
- package/dist/cjs/x-finder.cjs.entry.js +647 -0
- package/dist/cjs/x-form-builder.cjs.entry.js +807 -0
- package/dist/cjs/x-icon.cjs.entry.js +144 -0
- package/dist/cjs/x-infinite-scroll.cjs.entry.js +129 -0
- package/dist/cjs/x-list-item.cjs.entry.js +27 -0
- package/dist/cjs/x-list.cjs.entry.js +138 -0
- package/dist/cjs/x-mentions.cjs.entry.js +275 -0
- package/dist/cjs/x-menu-divider.cjs.entry.js +49 -0
- package/dist/cjs/x-menu-item-group.cjs.entry.js +149 -0
- package/dist/cjs/x-menu-submenu.cjs.entry.js +373 -0
- package/dist/cjs/x-message.cjs.entry.js +219 -0
- package/dist/cjs/x-modal-content.cjs.entry.js +217 -0
- package/dist/cjs/x-notification.cjs.entry.js +325 -0
- package/dist/cjs/x-page-header.cjs.entry.js +67 -0
- package/dist/cjs/x-popconfirm-content.cjs.entry.js +72 -0
- package/dist/cjs/x-popconfirm.cjs.entry.js +181 -0
- package/dist/cjs/x-progress.cjs.entry.js +136 -0
- package/dist/cjs/x-qr-code.cjs.entry.js +446 -0
- package/dist/cjs/x-range-picker-dropdown-content.cjs.entry.js +821 -0
- package/dist/cjs/x-select_2.cjs.entry.js +1316 -0
- package/dist/cjs/x-skeleton.cjs.entry.js +75 -0
- package/dist/cjs/x-spin.cjs.entry.js +62 -0
- package/dist/cjs/x-splitter-panel.cjs.entry.js +91 -0
- package/dist/cjs/x-splitter.cjs.entry.js +612 -0
- package/dist/cjs/x-statistic.cjs.entry.js +104 -0
- package/dist/cjs/x-step.cjs.entry.js +179 -0
- package/dist/cjs/x-steps.cjs.entry.js +439 -0
- package/dist/cjs/x-tab-pane.cjs.entry.js +73 -0
- package/dist/cjs/x-table-cell.cjs.entry.js +45 -0
- package/dist/cjs/x-table-row.cjs.entry.js +85 -0
- package/dist/cjs/x-tabs.cjs.entry.js +609 -0
- package/dist/cjs/x-time-picker-dropdown-content.cjs.entry.js +389 -0
- package/dist/cjs/x-timeline-item.cjs.entry.js +50 -0
- package/dist/cjs/x-timeline.cjs.entry.js +52 -0
- package/dist/cjs/x-tour-panel.cjs.entry.js +89 -0
- package/dist/cjs/x-tour.cjs.entry.js +344 -0
- package/dist/cjs/x-tree-select-dropdown-content.cjs.entry.js +439 -0
- package/dist/cjs/x-virtual-scroll.cjs.entry.js +203 -0
- package/dist/cjs/x-workflow-builder.cjs.entry.js +366 -0
- package/dist/cjs/xlabs-store.cjs.js +24 -0
- package/dist/collection/collection-manifest.json +130 -0
- package/dist/collection/components/x-address/vietnam-data.js +28 -0
- package/dist/collection/components/x-address/x-address.css +367 -0
- package/dist/collection/components/x-address/x-address.js +403 -0
- package/dist/collection/components/x-affix/x-affix.css +27 -0
- package/dist/collection/components/x-affix/x-affix.js +299 -0
- package/dist/collection/components/x-alert/x-alert.css +475 -0
- package/dist/collection/components/x-alert/x-alert.js +273 -0
- package/dist/collection/components/x-anchor/x-anchor.css +74 -0
- package/dist/collection/components/x-anchor/x-anchor.js +371 -0
- package/dist/collection/components/x-anchor-link/x-anchor-link.css +43 -0
- package/dist/collection/components/x-anchor-link/x-anchor-link.js +145 -0
- package/dist/collection/components/x-app/x-app.css +14 -0
- package/dist/collection/components/x-app/x-app.js +308 -0
- package/dist/collection/components/x-auto-complete/auto-complete-dropdown-content/auto-complete-dropdown-content.css +410 -0
- package/dist/collection/components/x-auto-complete/auto-complete-dropdown-content/auto-complete-dropdown-content.js +166 -0
- package/dist/collection/components/x-auto-complete/auto-complete-dropdown-content/index.js +1 -0
- package/dist/collection/components/x-auto-complete/auto-complete-dropdown-content/types.js +1 -0
- package/dist/collection/components/x-auto-complete/types.js +61 -0
- package/dist/collection/components/x-auto-complete/x-auto-complete.css +535 -0
- package/dist/collection/components/x-auto-complete/x-auto-complete.js +1829 -0
- package/dist/collection/components/x-avatar/types.js +1 -0
- package/dist/collection/components/x-avatar/x-avatar.css +128 -0
- package/dist/collection/components/x-avatar/x-avatar.js +533 -0
- package/dist/collection/components/x-back-top/x-back-top.css +56 -0
- package/dist/collection/components/x-back-top/x-back-top.js +148 -0
- package/dist/collection/components/x-badge/types.js +1 -0
- package/dist/collection/components/x-badge/x-badge.css +233 -0
- package/dist/collection/components/x-badge/x-badge.js +618 -0
- package/dist/collection/components/x-breadcrumb/x-breadcrumb.css +44 -0
- package/dist/collection/components/x-breadcrumb/x-breadcrumb.js +96 -0
- package/dist/collection/components/x-breadcrumb-item/x-breadcrumb-item.css +63 -0
- package/dist/collection/components/x-breadcrumb-item/x-breadcrumb-item.js +147 -0
- package/dist/collection/components/x-button/x-button.css +278 -0
- package/dist/collection/components/x-button/x-button.js +488 -0
- package/dist/collection/components/x-captcha/x-captcha.css +125 -0
- package/dist/collection/components/x-captcha/x-captcha.js +408 -0
- package/dist/collection/components/x-card/x-card.css +523 -0
- package/dist/collection/components/x-card/x-card.js +389 -0
- package/dist/collection/components/x-carousel/x-carousel.css +417 -0
- package/dist/collection/components/x-carousel/x-carousel.js +257 -0
- package/dist/collection/components/x-cascader/cascader-dropdown-content/cascader-dropdown-content.css +529 -0
- package/dist/collection/components/x-cascader/cascader-dropdown-content/cascader-dropdown-content.js +771 -0
- package/dist/collection/components/x-cascader/cascader-dropdown-content/index.js +2 -0
- package/dist/collection/components/x-cascader/cascader-dropdown-content/types.js +1 -0
- package/dist/collection/components/x-cascader/types.js +1 -0
- package/dist/collection/components/x-cascader/x-cascader.css +691 -0
- package/dist/collection/components/x-cascader/x-cascader.js +1841 -0
- package/dist/collection/components/x-checkbox/types.js +1 -0
- package/dist/collection/components/x-checkbox/x-checkbox.css +541 -0
- package/dist/collection/components/x-checkbox/x-checkbox.js +681 -0
- package/dist/collection/components/x-col/x-col.css +1704 -0
- package/dist/collection/components/x-col/x-col.js +479 -0
- package/dist/collection/components/x-collapse/types.js +1 -0
- package/dist/collection/components/x-collapse/x-collapse.css +384 -0
- package/dist/collection/components/x-collapse/x-collapse.js +579 -0
- package/dist/collection/components/x-collapse-panel/x-collapse-panel.css +486 -0
- package/dist/collection/components/x-collapse-panel/x-collapse-panel.js +500 -0
- package/dist/collection/components/x-color-picker/types.js +251 -0
- package/dist/collection/components/x-color-picker/x-color-picker-panel.css +310 -0
- package/dist/collection/components/x-color-picker/x-color-picker-panel.js +575 -0
- package/dist/collection/components/x-color-picker/x-color-picker.css +446 -0
- package/dist/collection/components/x-color-picker/x-color-picker.js +1209 -0
- package/dist/collection/components/x-comment/types.js +1 -0
- package/dist/collection/components/x-comment/x-comment.css +442 -0
- package/dist/collection/components/x-comment/x-comment.js +306 -0
- package/dist/collection/components/x-content/types.js +1 -0
- package/dist/collection/components/x-content/x-content.css +361 -0
- package/dist/collection/components/x-content/x-content.js +402 -0
- package/dist/collection/components/x-date-picker/date-picker-dropdown-content/date-picker-dropdown-content.css +691 -0
- package/dist/collection/components/x-date-picker/date-picker-dropdown-content/date-picker-dropdown-content.js +1496 -0
- package/dist/collection/components/x-date-picker/date-picker-dropdown-content/index.js +1 -0
- package/dist/collection/components/x-date-picker/date-picker-dropdown-content/types.js +1 -0
- package/dist/collection/components/x-date-picker/types.js +1 -0
- package/dist/collection/components/x-date-picker/x-date-picker.css +804 -0
- package/dist/collection/components/x-date-picker/x-date-picker.js +2110 -0
- package/dist/collection/components/x-descriptions/types.js +1 -0
- package/dist/collection/components/x-descriptions/x-descriptions.css +417 -0
- package/dist/collection/components/x-descriptions/x-descriptions.js +494 -0
- package/dist/collection/components/x-descriptions-item/x-descriptions-item.css +387 -0
- package/dist/collection/components/x-descriptions-item/x-descriptions-item.js +238 -0
- package/dist/collection/components/x-divider/x-divider.css +417 -0
- package/dist/collection/components/x-divider/x-divider.js +263 -0
- package/dist/collection/components/x-drawer/x-drawer.css +333 -0
- package/dist/collection/components/x-drawer/x-drawer.js +623 -0
- package/dist/collection/components/x-drawer-content/x-drawer-content.css +481 -0
- package/dist/collection/components/x-drawer-content/x-drawer-content.js +579 -0
- package/dist/collection/components/x-dropdown/dropdown-content/dropdown-content.css +673 -0
- package/dist/collection/components/x-dropdown/dropdown-content/dropdown-content.js +294 -0
- package/dist/collection/components/x-dropdown/dropdown-content/types.js +1 -0
- package/dist/collection/components/x-dropdown/types.js +1 -0
- package/dist/collection/components/x-dropdown/x-dropdown.css +669 -0
- package/dist/collection/components/x-dropdown/x-dropdown.js +1004 -0
- package/dist/collection/components/x-editor/editor-history.js +118 -0
- package/dist/collection/components/x-editor/editor-normalizer.js +263 -0
- package/dist/collection/components/x-editor/editor-parser.js +326 -0
- package/dist/collection/components/x-editor/editor-selection.js +415 -0
- package/dist/collection/components/x-editor/types.js +33 -0
- package/dist/collection/components/x-editor/x-editor.css +599 -0
- package/dist/collection/components/x-editor/x-editor.js +1636 -0
- package/dist/collection/components/x-empty/x-empty.css +357 -0
- package/dist/collection/components/x-empty/x-empty.js +117 -0
- package/dist/collection/components/x-finder/services/finder-service.js +250 -0
- package/dist/collection/components/x-finder/types.js +1 -0
- package/dist/collection/components/x-finder/x-finder.css +633 -0
- package/dist/collection/components/x-finder/x-finder.js +540 -0
- package/dist/collection/components/x-flex/x-flex.css +344 -0
- package/dist/collection/components/x-flex/x-flex.js +285 -0
- package/dist/collection/components/x-float-button/x-float-button.css +389 -0
- package/dist/collection/components/x-float-button/x-float-button.js +265 -0
- package/dist/collection/components/x-footer/x-footer.css +346 -0
- package/dist/collection/components/x-footer/x-footer.js +29 -0
- package/dist/collection/components/x-form/x-form.css +365 -0
- package/dist/collection/components/x-form/x-form.js +355 -0
- package/dist/collection/components/x-form-builder/services/apis/api-client.js +240 -0
- package/dist/collection/components/x-form-builder/services/constants/index.js +33 -0
- package/dist/collection/components/x-form-builder/services/forms/abstract-control.js +175 -0
- package/dist/collection/components/x-form-builder/services/forms/form-array.js +92 -0
- package/dist/collection/components/x-form-builder/services/forms/form-builder.js +40 -0
- package/dist/collection/components/x-form-builder/services/forms/form-control.js +33 -0
- package/dist/collection/components/x-form-builder/services/forms/form-group.js +150 -0
- package/dist/collection/components/x-form-builder/services/forms/index.js +7 -0
- package/dist/collection/components/x-form-builder/services/forms/types.js +1 -0
- package/dist/collection/components/x-form-builder/services/forms/validators.js +83 -0
- package/dist/collection/components/x-form-builder/services/schema/condition-builder.js +337 -0
- package/dist/collection/components/x-form-builder/services/schema/default-registry.js +440 -0
- package/dist/collection/components/x-form-builder/services/schema/form-mapping.js +176 -0
- package/dist/collection/components/x-form-builder/services/schema/form-registry.js +30 -0
- package/dist/collection/components/x-form-builder/services/schema/schema-actions.js +3 -0
- package/dist/collection/components/x-form-builder/services/schema/schema-builder.js +52 -0
- package/dist/collection/components/x-form-builder/services/schema/schema-validator.js +53 -0
- package/dist/collection/components/x-form-builder/types/api/api-common-types.js +1 -0
- package/dist/collection/components/x-form-builder/types/api/api-interfaces.js +1 -0
- package/dist/collection/components/x-form-builder/types/api/index.js +2 -0
- package/dist/collection/components/x-form-builder/types/common/common-types.js +1 -0
- package/dist/collection/components/x-form-builder/types/common/condition-types.js +1 -0
- package/dist/collection/components/x-form-builder/types/common/field-types-enum.js +1 -0
- package/dist/collection/components/x-form-builder/types/common/index.js +7 -0
- package/dist/collection/components/x-form-builder/types/common/shared-interfaces.js +1 -0
- package/dist/collection/components/x-form-builder/types/common/validation-types.js +1 -0
- package/dist/collection/components/x-form-builder/types/common/value-types.js +1 -0
- package/dist/collection/components/x-form-builder/types/event/event-types.js +1 -0
- package/dist/collection/components/x-form-builder/types/event/index.js +1 -0
- package/dist/collection/components/x-form-builder/types/fields/advanced-fields.js +1 -0
- package/dist/collection/components/x-form-builder/types/fields/base-field.js +1 -0
- package/dist/collection/components/x-form-builder/types/fields/datetime-file-fields.js +1 -0
- package/dist/collection/components/x-form-builder/types/fields/display-fields.js +1 -0
- package/dist/collection/components/x-form-builder/types/fields/form-field-union.js +1 -0
- package/dist/collection/components/x-form-builder/types/fields/index.js +9 -0
- package/dist/collection/components/x-form-builder/types/fields/input-fields.js +1 -0
- package/dist/collection/components/x-form-builder/types/fields/layout-fields.js +1 -0
- package/dist/collection/components/x-form-builder/types/fields/selection-fields.js +10 -0
- package/dist/collection/components/x-form-builder/types/fields/special-input-fields.js +1 -0
- package/dist/collection/components/x-form-builder/types/form/events-types.js +1 -0
- package/dist/collection/components/x-form-builder/types/form/form-config.js +50 -0
- package/dist/collection/components/x-form-builder/types/form/index.js +2 -0
- package/dist/collection/components/x-form-builder/types/form/schema-types.js +1 -0
- package/dist/collection/components/x-form-builder/types/index.js +4 -0
- package/dist/collection/components/x-form-builder/utils/condition-engine.js +118 -0
- package/dist/collection/components/x-form-builder/utils/utils.js +138 -0
- package/dist/collection/components/x-form-builder/utils/values.js +36 -0
- package/dist/collection/components/x-form-builder/x-form-builder.css +3 -0
- package/dist/collection/components/x-form-builder/x-form-builder.js +1017 -0
- package/dist/collection/components/x-form-item/x-form-item.css +564 -0
- package/dist/collection/components/x-form-item/x-form-item.js +538 -0
- package/dist/collection/components/x-header/x-header.css +344 -0
- package/dist/collection/components/x-header/x-header.js +29 -0
- package/dist/collection/components/x-icon/fonts/xlabs-outlined.woff2 +0 -0
- package/dist/collection/components/x-icon/fonts/xlabs-rounded.woff2 +0 -0
- package/dist/collection/components/x-icon/fonts/xlabs-solided.woff2 +0 -0
- package/dist/collection/components/x-icon/icons.js +2716 -0
- package/dist/collection/components/x-icon/x-icon.css +378 -0
- package/dist/collection/components/x-icon/x-icon.js +353 -0
- package/dist/collection/components/x-image/types.js +1 -0
- package/dist/collection/components/x-image/x-image.css +556 -0
- package/dist/collection/components/x-image/x-image.js +628 -0
- package/dist/collection/components/x-infinite-scroll/x-infinite-scroll.css +345 -0
- package/dist/collection/components/x-infinite-scroll/x-infinite-scroll.js +294 -0
- package/dist/collection/components/x-input/types.js +1 -0
- package/dist/collection/components/x-input/x-input.css +640 -0
- package/dist/collection/components/x-input/x-input.js +1449 -0
- package/dist/collection/components/x-input-number/types.js +96 -0
- package/dist/collection/components/x-input-number/x-input-number.css +612 -0
- package/dist/collection/components/x-input-number/x-input-number.js +1488 -0
- package/dist/collection/components/x-layout/x-layout.css +361 -0
- package/dist/collection/components/x-layout/x-layout.js +188 -0
- package/dist/collection/components/x-list/x-list.css +382 -0
- package/dist/collection/components/x-list/x-list.js +373 -0
- package/dist/collection/components/x-list-item/x-list-item.css +351 -0
- package/dist/collection/components/x-list-item/x-list-item.js +31 -0
- package/dist/collection/components/x-mentions/types.js +1 -0
- package/dist/collection/components/x-mentions/x-mentions.css +388 -0
- package/dist/collection/components/x-mentions/x-mentions.js +528 -0
- package/dist/collection/components/x-menu/types.js +1 -0
- package/dist/collection/components/x-menu/x-menu.css +78 -0
- package/dist/collection/components/x-menu/x-menu.js +793 -0
- package/dist/collection/components/x-menu-divider/types.js +1 -0
- package/dist/collection/components/x-menu-divider/x-menu-divider.css +31 -0
- package/dist/collection/components/x-menu-divider/x-menu-divider.js +126 -0
- package/dist/collection/components/x-menu-item/types.js +1 -0
- package/dist/collection/components/x-menu-item/x-menu-item.css +183 -0
- package/dist/collection/components/x-menu-item/x-menu-item.js +449 -0
- package/dist/collection/components/x-menu-item-group/types.js +1 -0
- package/dist/collection/components/x-menu-item-group/x-menu-item-group.css +45 -0
- package/dist/collection/components/x-menu-item-group/x-menu-item-group.js +299 -0
- package/dist/collection/components/x-menu-submenu/types.js +1 -0
- package/dist/collection/components/x-menu-submenu/x-menu-submenu.css +236 -0
- package/dist/collection/components/x-menu-submenu/x-menu-submenu.js +775 -0
- package/dist/collection/components/x-message/message-service.js +263 -0
- package/dist/collection/components/x-message/types.js +1 -0
- package/dist/collection/components/x-message/x-message.css +402 -0
- package/dist/collection/components/x-message/x-message.js +487 -0
- package/dist/collection/components/x-modal/modal-service.js +402 -0
- package/dist/collection/components/x-modal/modal-service.types.js +1 -0
- package/dist/collection/components/x-modal/x-modal.css +468 -0
- package/dist/collection/components/x-modal/x-modal.js +683 -0
- package/dist/collection/components/x-modal-content/index.js +1 -0
- package/dist/collection/components/x-modal-content/types.js +1 -0
- package/dist/collection/components/x-modal-content/x-modal-content.css +749 -0
- package/dist/collection/components/x-modal-content/x-modal-content.js +701 -0
- package/dist/collection/components/x-notification/notification-service.js +335 -0
- package/dist/collection/components/x-notification/types.js +1 -0
- package/dist/collection/components/x-notification/x-notification.css +486 -0
- package/dist/collection/components/x-notification/x-notification.js +788 -0
- package/dist/collection/components/x-page-header/x-page-header.css +406 -0
- package/dist/collection/components/x-page-header/x-page-header.js +159 -0
- package/dist/collection/components/x-pagination/types.js +1 -0
- package/dist/collection/components/x-pagination/x-pagination.css +705 -0
- package/dist/collection/components/x-pagination/x-pagination.js +1241 -0
- package/dist/collection/components/x-popconfirm/popconfirm-content/popconfirm-content.css +456 -0
- package/dist/collection/components/x-popconfirm/popconfirm-content/popconfirm-content.js +244 -0
- package/dist/collection/components/x-popconfirm/x-popconfirm.css +412 -0
- package/dist/collection/components/x-popconfirm/x-popconfirm.js +355 -0
- package/dist/collection/components/x-popover/popover-content/popover-content.css +437 -0
- package/dist/collection/components/x-popover/popover-content/popover-content.js +261 -0
- package/dist/collection/components/x-popover/x-popover.css +442 -0
- package/dist/collection/components/x-popover/x-popover.js +390 -0
- package/dist/collection/components/x-portal/debug.js +42 -0
- package/dist/collection/components/x-portal/index.js +1 -0
- package/dist/collection/components/x-portal/portal-controller.js +146 -0
- package/dist/collection/components/x-portal/positioning.js +332 -0
- package/dist/collection/components/x-portal/types.js +1 -0
- package/dist/collection/components/x-portal/x-portal.js +21 -0
- package/dist/collection/components/x-progress/x-progress.css +424 -0
- package/dist/collection/components/x-progress/x-progress.js +326 -0
- package/dist/collection/components/x-qr-code/x-qr-code.css +37 -0
- package/dist/collection/components/x-qr-code/x-qr-code.js +292 -0
- package/dist/collection/components/x-radio/types.js +1 -0
- package/dist/collection/components/x-radio/x-radio.css +523 -0
- package/dist/collection/components/x-radio/x-radio.js +689 -0
- package/dist/collection/components/x-radio-group/types.js +1 -0
- package/dist/collection/components/x-radio-group/x-radio-group.css +326 -0
- package/dist/collection/components/x-radio-group/x-radio-group.js +531 -0
- package/dist/collection/components/x-range-picker/range-picker-dropdown-content/index.js +1 -0
- package/dist/collection/components/x-range-picker/range-picker-dropdown-content/range-picker-dropdown-content.css +609 -0
- package/dist/collection/components/x-range-picker/range-picker-dropdown-content/range-picker-dropdown-content.js +1497 -0
- package/dist/collection/components/x-range-picker/range-picker-dropdown-content/types.js +1 -0
- package/dist/collection/components/x-range-picker/types.js +1 -0
- package/dist/collection/components/x-range-picker/x-range-picker.css +775 -0
- package/dist/collection/components/x-range-picker/x-range-picker.js +1883 -0
- package/dist/collection/components/x-rate/x-rate.css +396 -0
- package/dist/collection/components/x-rate/x-rate.js +445 -0
- package/dist/collection/components/x-result/types.js +1 -0
- package/dist/collection/components/x-result/x-result.css +434 -0
- package/dist/collection/components/x-result/x-result.js +376 -0
- package/dist/collection/components/x-row/x-row.css +345 -0
- package/dist/collection/components/x-row/x-row.js +196 -0
- package/dist/collection/components/x-segmented/types.js +1 -0
- package/dist/collection/components/x-segmented/x-segmented.css +407 -0
- package/dist/collection/components/x-segmented/x-segmented.js +414 -0
- package/dist/collection/components/x-select/select-dropdown-content/index.js +1 -0
- package/dist/collection/components/x-select/select-dropdown-content/select-dropdown-content.css +827 -0
- package/dist/collection/components/x-select/select-dropdown-content/select-dropdown-content.js +163 -0
- package/dist/collection/components/x-select/select-dropdown-content/types.js +1 -0
- package/dist/collection/components/x-select/types.js +9 -0
- package/dist/collection/components/x-select/x-select.css +823 -0
- package/dist/collection/components/x-select/x-select.js +2247 -0
- package/dist/collection/components/x-select-option/x-select-option.css +379 -0
- package/dist/collection/components/x-select-option/x-select-option.js +207 -0
- package/dist/collection/components/x-sider/x-sider.css +379 -0
- package/dist/collection/components/x-sider/x-sider.js +379 -0
- package/dist/collection/components/x-skeleton/x-skeleton.css +400 -0
- package/dist/collection/components/x-skeleton/x-skeleton.js +221 -0
- package/dist/collection/components/x-slider/types.js +1 -0
- package/dist/collection/components/x-slider/x-slider.css +511 -0
- package/dist/collection/components/x-slider/x-slider.js +785 -0
- package/dist/collection/components/x-space/x-space.css +339 -0
- package/dist/collection/components/x-space/x-space.js +228 -0
- package/dist/collection/components/x-spin/x-spin.css +465 -0
- package/dist/collection/components/x-spin/x-spin.js +142 -0
- package/dist/collection/components/x-splitter/types.js +1 -0
- package/dist/collection/components/x-splitter/x-splitter.css +181 -0
- package/dist/collection/components/x-splitter/x-splitter.js +884 -0
- package/dist/collection/components/x-splitter-panel/types.js +1 -0
- package/dist/collection/components/x-splitter-panel/x-splitter-panel.css +25 -0
- package/dist/collection/components/x-splitter-panel/x-splitter-panel.js +292 -0
- package/dist/collection/components/x-statistic/x-statistic.css +366 -0
- package/dist/collection/components/x-statistic/x-statistic.js +291 -0
- package/dist/collection/components/x-step/types.js +1 -0
- package/dist/collection/components/x-step/x-step.css +801 -0
- package/dist/collection/components/x-step/x-step.js +539 -0
- package/dist/collection/components/x-steps/types.js +1 -0
- package/dist/collection/components/x-steps/x-steps.css +830 -0
- package/dist/collection/components/x-steps/x-steps.js +1032 -0
- package/dist/collection/components/x-switch/types.js +1 -0
- package/dist/collection/components/x-switch/x-switch.css +463 -0
- package/dist/collection/components/x-switch/x-switch.js +356 -0
- package/dist/collection/components/x-tab-pane/x-tab-pane.css +337 -0
- package/dist/collection/components/x-tab-pane/x-tab-pane.js +243 -0
- package/dist/collection/components/x-table/column-util.js +87 -0
- package/dist/collection/components/x-table/types.js +1 -0
- package/dist/collection/components/x-table/x-table.css +898 -0
- package/dist/collection/components/x-table/x-table.js +2464 -0
- package/dist/collection/components/x-table-cell/x-table-cell.css +337 -0
- package/dist/collection/components/x-table-cell/x-table-cell.js +167 -0
- package/dist/collection/components/x-table-row/x-table-row.css +336 -0
- package/dist/collection/components/x-table-row/x-table-row.js +172 -0
- package/dist/collection/components/x-tabs/types.js +1 -0
- package/dist/collection/components/x-tabs/x-tabs.css +664 -0
- package/dist/collection/components/x-tabs/x-tabs.js +1264 -0
- package/dist/collection/components/x-tag/types.js +1 -0
- package/dist/collection/components/x-tag/x-tag.css +1047 -0
- package/dist/collection/components/x-tag/x-tag.js +535 -0
- package/dist/collection/components/x-textarea/x-textarea.css +446 -0
- package/dist/collection/components/x-textarea/x-textarea.js +553 -0
- package/dist/collection/components/x-time-picker/time-picker-dropdown-content/index.js +1 -0
- package/dist/collection/components/x-time-picker/time-picker-dropdown-content/time-picker-dropdown-content.css +409 -0
- package/dist/collection/components/x-time-picker/time-picker-dropdown-content/time-picker-dropdown-content.js +855 -0
- package/dist/collection/components/x-time-picker/time-picker-dropdown-content/types.js +1 -0
- package/dist/collection/components/x-time-picker/types.js +1 -0
- package/dist/collection/components/x-time-picker/x-time-picker.css +653 -0
- package/dist/collection/components/x-time-picker/x-time-picker.js +1454 -0
- package/dist/collection/components/x-timeline/x-timeline.css +404 -0
- package/dist/collection/components/x-timeline/x-timeline.js +129 -0
- package/dist/collection/components/x-timeline-item/x-timeline-item.css +400 -0
- package/dist/collection/components/x-timeline-item/x-timeline-item.js +125 -0
- package/dist/collection/components/x-tooltip/types.js +1 -0
- package/dist/collection/components/x-tooltip/x-tooltip.css +528 -0
- package/dist/collection/components/x-tooltip/x-tooltip.js +1006 -0
- package/dist/collection/components/x-tooltip-content/index.js +1 -0
- package/dist/collection/components/x-tooltip-content/types.js +1 -0
- package/dist/collection/components/x-tooltip-content/x-tooltip-content.css +217 -0
- package/dist/collection/components/x-tooltip-content/x-tooltip-content.js +238 -0
- package/dist/collection/components/x-tour/index.js +1 -0
- package/dist/collection/components/x-tour/types.js +1 -0
- package/dist/collection/components/x-tour/x-tour-panel.css +467 -0
- package/dist/collection/components/x-tour/x-tour-panel.js +265 -0
- package/dist/collection/components/x-tour/x-tour.css +353 -0
- package/dist/collection/components/x-tour/x-tour.js +555 -0
- package/dist/collection/components/x-transfer/types.js +1 -0
- package/dist/collection/components/x-transfer/x-transfer.css +626 -0
- package/dist/collection/components/x-transfer/x-transfer.js +956 -0
- package/dist/collection/components/x-tree/types.js +1 -0
- package/dist/collection/components/x-tree/x-tree.css +703 -0
- package/dist/collection/components/x-tree/x-tree.js +1793 -0
- package/dist/collection/components/x-tree-select/tree-select-dropdown-content/index.js +2 -0
- package/dist/collection/components/x-tree-select/tree-select-dropdown-content/tree-select-dropdown-content.css +635 -0
- package/dist/collection/components/x-tree-select/tree-select-dropdown-content/tree-select-dropdown-content.js +890 -0
- package/dist/collection/components/x-tree-select/tree-select-dropdown-content/types.js +1 -0
- package/dist/collection/components/x-tree-select/types.js +2 -0
- package/dist/collection/components/x-tree-select/x-tree-select.css +790 -0
- package/dist/collection/components/x-tree-select/x-tree-select.js +2750 -0
- package/dist/collection/components/x-typography/x-typography.css +409 -0
- package/dist/collection/components/x-typography/x-typography.js +431 -0
- package/dist/collection/components/x-upload/types.js +1 -0
- package/dist/collection/components/x-upload/x-upload.css +774 -0
- package/dist/collection/components/x-upload/x-upload.js +1452 -0
- package/dist/collection/components/x-virtual-scroll/x-virtual-scroll.css +79 -0
- package/dist/collection/components/x-virtual-scroll/x-virtual-scroll.js +478 -0
- package/dist/collection/components/x-workflow/x-workflow.css +486 -0
- package/dist/collection/components/x-workflow/x-workflow.js +1403 -0
- package/dist/collection/components/x-workflow-builder/x-workflow-builder.css +538 -0
- package/dist/collection/components/x-workflow-builder/x-workflow-builder.js +468 -0
- package/dist/collection/index.js +5 -0
- package/dist/collection/locales/index.js +2 -0
- package/dist/collection/locales/languages/ar_EG.js +120 -0
- package/dist/collection/locales/languages/az_AZ.js +120 -0
- package/dist/collection/locales/languages/bg_BG.js +120 -0
- package/dist/collection/locales/languages/bn_BD.js +120 -0
- package/dist/collection/locales/languages/by_BY.js +120 -0
- package/dist/collection/locales/languages/ca_ES.js +120 -0
- package/dist/collection/locales/languages/cs_CZ.js +120 -0
- package/dist/collection/locales/languages/da_DK.js +120 -0
- package/dist/collection/locales/languages/de_DE.js +120 -0
- package/dist/collection/locales/languages/el_GR.js +120 -0
- package/dist/collection/locales/languages/en_AU.js +120 -0
- package/dist/collection/locales/languages/en_GB.js +120 -0
- package/dist/collection/locales/languages/en_US.js +120 -0
- package/dist/collection/locales/languages/es_ES.js +120 -0
- package/dist/collection/locales/languages/et_EE.js +120 -0
- package/dist/collection/locales/languages/fa_IR.js +120 -0
- package/dist/collection/locales/languages/fi_FI.js +120 -0
- package/dist/collection/locales/languages/fr_BE.js +120 -0
- package/dist/collection/locales/languages/fr_CA.js +120 -0
- package/dist/collection/locales/languages/fr_FR.js +120 -0
- package/dist/collection/locales/languages/ga_IE.js +120 -0
- package/dist/collection/locales/languages/gl_ES.js +120 -0
- package/dist/collection/locales/languages/he_IL.js +120 -0
- package/dist/collection/locales/languages/hi_IN.js +120 -0
- package/dist/collection/locales/languages/hr_HR.js +120 -0
- package/dist/collection/locales/languages/hu_HU.js +120 -0
- package/dist/collection/locales/languages/hy_AM.js +120 -0
- package/dist/collection/locales/languages/id_ID.js +120 -0
- package/dist/collection/locales/languages/index.js +137 -0
- package/dist/collection/locales/languages/is_IS.js +120 -0
- package/dist/collection/locales/languages/it_IT.js +120 -0
- package/dist/collection/locales/languages/ja_JP.js +120 -0
- package/dist/collection/locales/languages/ka_GE.js +120 -0
- package/dist/collection/locales/languages/kk_KZ.js +120 -0
- package/dist/collection/locales/languages/km_KH.js +120 -0
- package/dist/collection/locales/languages/kmr_IQ.js +120 -0
- package/dist/collection/locales/languages/kn_IN.js +120 -0
- package/dist/collection/locales/languages/ko_KR.js +120 -0
- package/dist/collection/locales/languages/ku_IQ.js +120 -0
- package/dist/collection/locales/languages/lt_LT.js +120 -0
- package/dist/collection/locales/languages/lv_LV.js +120 -0
- package/dist/collection/locales/languages/mk_MK.js +120 -0
- package/dist/collection/locales/languages/ml_IN.js +120 -0
- package/dist/collection/locales/languages/mn_MN.js +120 -0
- package/dist/collection/locales/languages/ms_MY.js +120 -0
- package/dist/collection/locales/languages/nb_NO.js +120 -0
- package/dist/collection/locales/languages/ne_NP.js +120 -0
- package/dist/collection/locales/languages/nl_BE.js +120 -0
- package/dist/collection/locales/languages/nl_NL.js +120 -0
- package/dist/collection/locales/languages/pl_PL.js +120 -0
- package/dist/collection/locales/languages/pt_BR.js +120 -0
- package/dist/collection/locales/languages/pt_PT.js +120 -0
- package/dist/collection/locales/languages/ro_RO.js +120 -0
- package/dist/collection/locales/languages/ru_RU.js +120 -0
- package/dist/collection/locales/languages/sk_SK.js +120 -0
- package/dist/collection/locales/languages/sl_SI.js +120 -0
- package/dist/collection/locales/languages/sr_RS.js +120 -0
- package/dist/collection/locales/languages/sv_SE.js +120 -0
- package/dist/collection/locales/languages/ta_IN.js +120 -0
- package/dist/collection/locales/languages/th_TH.js +120 -0
- package/dist/collection/locales/languages/tr_TR.js +120 -0
- package/dist/collection/locales/languages/uk_UA.js +120 -0
- package/dist/collection/locales/languages/ur_PK.js +120 -0
- package/dist/collection/locales/languages/vi_VN.js +120 -0
- package/dist/collection/locales/languages/zh_CN.js +120 -0
- package/dist/collection/locales/languages/zh_HK.js +120 -0
- package/dist/collection/locales/languages/zh_TW.js +120 -0
- package/dist/collection/locales/locale.service.js +179 -0
- package/dist/collection/types.js +11 -0
- package/dist/collection/utils/app-service.js +19 -0
- package/dist/collection/utils/cascader.service.js +142 -0
- package/dist/collection/utils/config.js +59 -0
- package/dist/collection/utils/form/core/abstract-control.js +273 -0
- package/dist/collection/utils/form/core/form-array.js +131 -0
- package/dist/collection/utils/form/core/form-builder.js +56 -0
- package/dist/collection/utils/form/core/form-control.js +69 -0
- package/dist/collection/utils/form/core/form-group.js +163 -0
- package/dist/collection/utils/form/frameworks.js +37 -0
- package/dist/collection/utils/form/types.js +1 -0
- package/dist/collection/utils/form/validators/validators.js +198 -0
- package/dist/collection/utils/index.js +3 -0
- package/dist/collection/utils/qr-code/cache/qr.cache.js +20 -0
- package/dist/collection/utils/qr-code/engine/qr.engine.js +130 -0
- package/dist/collection/utils/qr-code/engine/qr.gf.js +22 -0
- package/dist/collection/utils/qr-code/engine/qr.mask.js +54 -0
- package/dist/collection/utils/qr-code/engine/qr.rs.js +29 -0
- package/dist/collection/utils/qr-code/engine/qr.util.js +0 -0
- package/dist/collection/utils/qr-code/engine/qr.version.js +11 -0
- package/dist/collection/utils/qr-code/renderer/canvas.renderer.js +36 -0
- package/dist/collection/utils/qr-code/renderer/svg.renderer.js +33 -0
- package/dist/collection/utils/qr-code/worker/worker.manager.js +24 -0
- package/dist/collection/utils/table.service.js +150 -0
- package/dist/collection/utils/tree.service.js +335 -0
- package/dist/collection/utils/workflow/flow.service.js +382 -0
- package/dist/collection/utils/workflow/types.js +1 -0
- package/dist/esm/abstract-control-XBF88YT_.js +275 -0
- package/dist/esm/config-BPeosvTA.js +60 -0
- package/dist/esm/index-ig_mFsVk.js +2159 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/loader.js +10 -0
- package/dist/esm/locale.service-D66tF8_2.js +8199 -0
- package/dist/esm/modal-service-C_e0SaFZ.js +397 -0
- package/dist/esm/notification-service-DJTSPOq7.js +599 -0
- package/dist/esm/portal-controller-COpzIi1n.js +499 -0
- package/dist/esm/schema-builder-DBPGgJBx.js +1502 -0
- package/dist/esm/tree.service-Dgxy93Bg.js +337 -0
- package/dist/esm/types-C_QdJRdB.js +253 -0
- package/dist/esm/x-address_14.entry.js +12562 -0
- package/dist/esm/x-affix.entry.js +180 -0
- package/dist/esm/x-alert_11.entry.js +3227 -0
- package/dist/esm/x-anchor-link.entry.js +65 -0
- package/dist/esm/x-anchor.entry.js +156 -0
- package/dist/esm/x-app.entry.js +135 -0
- package/dist/esm/x-auto-complete-dropdown-content.entry.js +67 -0
- package/dist/esm/x-avatar.entry.js +267 -0
- package/dist/esm/x-back-top.entry.js +87 -0
- package/dist/esm/x-breadcrumb_5.entry.js +1548 -0
- package/dist/esm/x-button.entry.js +172 -0
- package/dist/esm/x-card_12.entry.js +1373 -0
- package/dist/esm/x-carousel.entry.js +145 -0
- package/dist/esm/x-cascader-dropdown-content.entry.js +362 -0
- package/dist/esm/x-checkbox_5.entry.js +1370 -0
- package/dist/esm/x-collapse-panel.entry.js +241 -0
- package/dist/esm/x-collapse.entry.js +289 -0
- package/dist/esm/x-color-picker-panel_2.entry.js +870 -0
- package/dist/esm/x-color-picker_9.entry.js +3075 -0
- package/dist/esm/x-comment.entry.js +187 -0
- package/dist/esm/x-date-picker-dropdown-content.entry.js +755 -0
- package/dist/esm/x-descriptions-item.entry.js +106 -0
- package/dist/esm/x-drawer-content.entry.js +195 -0
- package/dist/esm/x-drawer.entry.js +292 -0
- package/dist/esm/x-dropdown_2.entry.js +732 -0
- package/dist/esm/x-empty.entry.js +62 -0
- package/dist/esm/x-finder.entry.js +645 -0
- package/dist/esm/x-form-builder.entry.js +805 -0
- package/dist/esm/x-icon.entry.js +142 -0
- package/dist/esm/x-infinite-scroll.entry.js +127 -0
- package/dist/esm/x-list-item.entry.js +25 -0
- package/dist/esm/x-list.entry.js +136 -0
- package/dist/esm/x-mentions.entry.js +273 -0
- package/dist/esm/x-menu-divider.entry.js +47 -0
- package/dist/esm/x-menu-item-group.entry.js +147 -0
- package/dist/esm/x-menu-submenu.entry.js +371 -0
- package/dist/esm/x-message.entry.js +217 -0
- package/dist/esm/x-modal-content.entry.js +215 -0
- package/dist/esm/x-notification.entry.js +323 -0
- package/dist/esm/x-page-header.entry.js +65 -0
- package/dist/esm/x-popconfirm-content.entry.js +70 -0
- package/dist/esm/x-popconfirm.entry.js +179 -0
- package/dist/esm/x-progress.entry.js +134 -0
- package/dist/esm/x-qr-code.entry.js +444 -0
- package/dist/esm/x-range-picker-dropdown-content.entry.js +819 -0
- package/dist/esm/x-select_2.entry.js +1313 -0
- package/dist/esm/x-skeleton.entry.js +73 -0
- package/dist/esm/x-spin.entry.js +60 -0
- package/dist/esm/x-splitter-panel.entry.js +89 -0
- package/dist/esm/x-splitter.entry.js +610 -0
- package/dist/esm/x-statistic.entry.js +102 -0
- package/dist/esm/x-step.entry.js +177 -0
- package/dist/esm/x-steps.entry.js +437 -0
- package/dist/esm/x-tab-pane.entry.js +71 -0
- package/dist/esm/x-table-cell.entry.js +43 -0
- package/dist/esm/x-table-row.entry.js +83 -0
- package/dist/esm/x-tabs.entry.js +607 -0
- package/dist/esm/x-time-picker-dropdown-content.entry.js +387 -0
- package/dist/esm/x-timeline-item.entry.js +48 -0
- package/dist/esm/x-timeline.entry.js +50 -0
- package/dist/esm/x-tour-panel.entry.js +87 -0
- package/dist/esm/x-tour.entry.js +342 -0
- package/dist/esm/x-tree-select-dropdown-content.entry.js +437 -0
- package/dist/esm/x-virtual-scroll.entry.js +201 -0
- package/dist/esm/x-workflow-builder.entry.js +364 -0
- package/dist/esm/xlabs-store.js +20 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/types/components/x-address/vietnam-data.d.ts +14 -0
- package/dist/types/components/x-address/x-address.d.ts +64 -0
- package/dist/types/components/x-affix/x-affix.d.ts +111 -0
- package/dist/types/components/x-alert/x-alert.d.ts +74 -0
- package/dist/types/components/x-anchor/x-anchor.d.ts +120 -0
- package/dist/types/components/x-anchor-link/x-anchor-link.d.ts +47 -0
- package/dist/types/components/x-app/x-app.d.ts +93 -0
- package/dist/types/components/x-auto-complete/auto-complete-dropdown-content/auto-complete-dropdown-content.d.ts +58 -0
- package/dist/types/components/x-auto-complete/auto-complete-dropdown-content/index.d.ts +2 -0
- package/dist/types/components/x-auto-complete/auto-complete-dropdown-content/types.d.ts +14 -0
- package/dist/types/components/x-auto-complete/types.d.ts +150 -0
- package/dist/types/components/x-auto-complete/x-auto-complete.d.ts +480 -0
- package/dist/types/components/x-avatar/types.d.ts +38 -0
- package/dist/types/components/x-avatar/x-avatar.d.ts +171 -0
- package/dist/types/components/x-back-top/x-back-top.d.ts +59 -0
- package/dist/types/components/x-badge/types.d.ts +23 -0
- package/dist/types/components/x-badge/x-badge.d.ts +184 -0
- package/dist/types/components/x-breadcrumb/x-breadcrumb.d.ts +43 -0
- package/dist/types/components/x-breadcrumb-item/x-breadcrumb-item.d.ts +43 -0
- package/dist/types/components/x-button/x-button.d.ts +121 -0
- package/dist/types/components/x-captcha/x-captcha.d.ts +78 -0
- package/dist/types/components/x-card/x-card.d.ts +139 -0
- package/dist/types/components/x-carousel/x-carousel.d.ts +104 -0
- package/dist/types/components/x-cascader/cascader-dropdown-content/cascader-dropdown-content.d.ts +255 -0
- package/dist/types/components/x-cascader/cascader-dropdown-content/index.d.ts +2 -0
- package/dist/types/components/x-cascader/cascader-dropdown-content/types.d.ts +20 -0
- package/dist/types/components/x-cascader/types.d.ts +143 -0
- package/dist/types/components/x-cascader/x-cascader.d.ts +520 -0
- package/dist/types/components/x-checkbox/types.d.ts +83 -0
- package/dist/types/components/x-checkbox/x-checkbox.d.ts +156 -0
- package/dist/types/components/x-col/x-col.d.ts +89 -0
- package/dist/types/components/x-collapse/types.d.ts +55 -0
- package/dist/types/components/x-collapse/x-collapse.d.ts +157 -0
- package/dist/types/components/x-collapse-panel/x-collapse-panel.d.ts +143 -0
- package/dist/types/components/x-color-picker/types.d.ts +135 -0
- package/dist/types/components/x-color-picker/x-color-picker-panel.d.ts +80 -0
- package/dist/types/components/x-color-picker/x-color-picker.d.ts +328 -0
- package/dist/types/components/x-comment/types.d.ts +20 -0
- package/dist/types/components/x-comment/x-comment.d.ts +111 -0
- package/dist/types/components/x-content/types.d.ts +6 -0
- package/dist/types/components/x-content/x-content.d.ts +64 -0
- package/dist/types/components/x-date-picker/date-picker-dropdown-content/date-picker-dropdown-content.d.ts +376 -0
- package/dist/types/components/x-date-picker/date-picker-dropdown-content/index.d.ts +2 -0
- package/dist/types/components/x-date-picker/date-picker-dropdown-content/types.d.ts +61 -0
- package/dist/types/components/x-date-picker/types.d.ts +28 -0
- package/dist/types/components/x-date-picker/x-date-picker.d.ts +512 -0
- package/dist/types/components/x-descriptions/types.d.ts +41 -0
- package/dist/types/components/x-descriptions/x-descriptions.d.ts +141 -0
- package/dist/types/components/x-descriptions-item/x-descriptions-item.d.ts +70 -0
- package/dist/types/components/x-divider/x-divider.d.ts +82 -0
- package/dist/types/components/x-drawer/x-drawer.d.ts +156 -0
- package/dist/types/components/x-drawer-content/x-drawer-content.d.ts +142 -0
- package/dist/types/components/x-dropdown/dropdown-content/dropdown-content.d.ts +83 -0
- package/dist/types/components/x-dropdown/dropdown-content/types.d.ts +16 -0
- package/dist/types/components/x-dropdown/types.d.ts +119 -0
- package/dist/types/components/x-dropdown/x-dropdown.d.ts +292 -0
- package/dist/types/components/x-editor/editor-history.d.ts +62 -0
- package/dist/types/components/x-editor/editor-normalizer.d.ts +70 -0
- package/dist/types/components/x-editor/editor-parser.d.ts +34 -0
- package/dist/types/components/x-editor/editor-selection.d.ts +92 -0
- package/dist/types/components/x-editor/types.d.ts +62 -0
- package/dist/types/components/x-editor/x-editor.d.ts +279 -0
- package/dist/types/components/x-empty/x-empty.d.ts +45 -0
- package/dist/types/components/x-finder/services/finder-service.d.ts +38 -0
- package/dist/types/components/x-finder/types.d.ts +63 -0
- package/dist/types/components/x-finder/x-finder.d.ts +66 -0
- package/dist/types/components/x-flex/x-flex.d.ts +62 -0
- package/dist/types/components/x-float-button/x-float-button.d.ts +66 -0
- package/dist/types/components/x-footer/x-footer.d.ts +11 -0
- package/dist/types/components/x-form/x-form.d.ts +64 -0
- package/dist/types/components/x-form-builder/services/apis/api-client.d.ts +63 -0
- package/dist/types/components/x-form-builder/services/constants/index.d.ts +2 -0
- package/dist/types/components/x-form-builder/services/forms/abstract-control.d.ts +59 -0
- package/dist/types/components/x-form-builder/services/forms/form-array.d.ts +25 -0
- package/dist/types/components/x-form-builder/services/forms/form-builder.d.ts +17 -0
- package/dist/types/components/x-form-builder/services/forms/form-control.d.ts +14 -0
- package/dist/types/components/x-form-builder/services/forms/form-group.d.ts +33 -0
- package/dist/types/components/x-form-builder/services/forms/index.d.ts +11 -0
- package/dist/types/components/x-form-builder/services/forms/types.d.ts +11 -0
- package/dist/types/components/x-form-builder/services/forms/validators.d.ts +16 -0
- package/dist/types/components/x-form-builder/services/schema/condition-builder.d.ts +39 -0
- package/dist/types/components/x-form-builder/services/schema/default-registry.d.ts +1 -0
- package/dist/types/components/x-form-builder/services/schema/form-mapping.d.ts +26 -0
- package/dist/types/components/x-form-builder/services/schema/form-registry.d.ts +27 -0
- package/dist/types/components/x-form-builder/services/schema/schema-actions.d.ts +3 -0
- package/dist/types/components/x-form-builder/services/schema/schema-builder.d.ts +19 -0
- package/dist/types/components/x-form-builder/services/schema/schema-validator.d.ts +9 -0
- package/dist/types/components/x-form-builder/types/api/api-common-types.d.ts +5 -0
- package/dist/types/components/x-form-builder/types/api/api-interfaces.d.ts +52 -0
- package/dist/types/components/x-form-builder/types/api/index.d.ts +2 -0
- package/dist/types/components/x-form-builder/types/common/common-types.d.ts +49 -0
- package/dist/types/components/x-form-builder/types/common/condition-types.d.ts +53 -0
- package/dist/types/components/x-form-builder/types/common/field-types-enum.d.ts +2 -0
- package/dist/types/components/x-form-builder/types/common/index.d.ts +7 -0
- package/dist/types/components/x-form-builder/types/common/shared-interfaces.d.ts +37 -0
- package/dist/types/components/x-form-builder/types/common/validation-types.d.ts +36 -0
- package/dist/types/components/x-form-builder/types/common/value-types.d.ts +15 -0
- package/dist/types/components/x-form-builder/types/event/event-types.d.ts +16 -0
- package/dist/types/components/x-form-builder/types/event/index.d.ts +1 -0
- package/dist/types/components/x-form-builder/types/fields/advanced-fields.d.ts +125 -0
- package/dist/types/components/x-form-builder/types/fields/base-field.d.ts +49 -0
- package/dist/types/components/x-form-builder/types/fields/datetime-file-fields.d.ts +37 -0
- package/dist/types/components/x-form-builder/types/fields/display-fields.d.ts +92 -0
- package/dist/types/components/x-form-builder/types/fields/form-field-union.d.ts +9 -0
- package/dist/types/components/x-form-builder/types/fields/index.d.ts +9 -0
- package/dist/types/components/x-form-builder/types/fields/input-fields.d.ts +53 -0
- package/dist/types/components/x-form-builder/types/fields/layout-fields.d.ts +55 -0
- package/dist/types/components/x-form-builder/types/fields/selection-fields.d.ts +130 -0
- package/dist/types/components/x-form-builder/types/fields/special-input-fields.d.ts +99 -0
- package/dist/types/components/x-form-builder/types/form/events-types.d.ts +29 -0
- package/dist/types/components/x-form-builder/types/form/form-config.d.ts +0 -0
- package/dist/types/components/x-form-builder/types/form/index.d.ts +2 -0
- package/dist/types/components/x-form-builder/types/form/schema-types.d.ts +134 -0
- package/dist/types/components/x-form-builder/types/index.d.ts +4 -0
- package/dist/types/components/x-form-builder/utils/condition-engine.d.ts +23 -0
- package/dist/types/components/x-form-builder/utils/utils.d.ts +19 -0
- package/dist/types/components/x-form-builder/utils/values.d.ts +8 -0
- package/dist/types/components/x-form-builder/x-form-builder.d.ts +65 -0
- package/dist/types/components/x-form-item/x-form-item.d.ts +94 -0
- package/dist/types/components/x-header/x-header.d.ts +11 -0
- package/dist/types/components/x-icon/icons.d.ts +2717 -0
- package/dist/types/components/x-icon/x-icon.d.ts +89 -0
- package/dist/types/components/x-image/types.d.ts +94 -0
- package/dist/types/components/x-image/x-image.d.ts +150 -0
- package/dist/types/components/x-infinite-scroll/x-infinite-scroll.d.ts +75 -0
- package/dist/types/components/x-input/types.d.ts +14 -0
- package/dist/types/components/x-input/x-input.d.ts +385 -0
- package/dist/types/components/x-input-number/types.d.ts +98 -0
- package/dist/types/components/x-input-number/x-input-number.d.ts +395 -0
- package/dist/types/components/x-layout/x-layout.d.ts +61 -0
- package/dist/types/components/x-list/x-list.d.ts +100 -0
- package/dist/types/components/x-list-item/x-list-item.d.ts +13 -0
- package/dist/types/components/x-mentions/types.d.ts +7 -0
- package/dist/types/components/x-mentions/x-mentions.d.ts +159 -0
- package/dist/types/components/x-menu/types.d.ts +83 -0
- package/dist/types/components/x-menu/x-menu.d.ts +153 -0
- package/dist/types/components/x-menu-divider/types.d.ts +6 -0
- package/dist/types/components/x-menu-divider/x-menu-divider.d.ts +19 -0
- package/dist/types/components/x-menu-item/types.d.ts +8 -0
- package/dist/types/components/x-menu-item/x-menu-item.d.ts +80 -0
- package/dist/types/components/x-menu-item-group/types.d.ts +6 -0
- package/dist/types/components/x-menu-item-group/x-menu-item-group.d.ts +60 -0
- package/dist/types/components/x-menu-submenu/types.d.ts +15 -0
- package/dist/types/components/x-menu-submenu/x-menu-submenu.d.ts +135 -0
- package/dist/types/components/x-message/message-service.d.ts +58 -0
- package/dist/types/components/x-message/types.d.ts +90 -0
- package/dist/types/components/x-message/x-message.d.ts +133 -0
- package/dist/types/components/x-modal/modal-service.d.ts +6 -0
- package/dist/types/components/x-modal/modal-service.types.d.ts +278 -0
- package/dist/types/components/x-modal/x-modal.d.ts +160 -0
- package/dist/types/components/x-modal-content/index.d.ts +1 -0
- package/dist/types/components/x-modal-content/types.d.ts +83 -0
- package/dist/types/components/x-modal-content/x-modal-content.d.ts +174 -0
- package/dist/types/components/x-notification/notification-service.d.ts +83 -0
- package/dist/types/components/x-notification/types.d.ts +112 -0
- package/dist/types/components/x-notification/x-notification.d.ts +212 -0
- package/dist/types/components/x-page-header/x-page-header.d.ts +51 -0
- package/dist/types/components/x-pagination/types.d.ts +104 -0
- package/dist/types/components/x-pagination/x-pagination.d.ts +274 -0
- package/dist/types/components/x-popconfirm/popconfirm-content/popconfirm-content.d.ts +62 -0
- package/dist/types/components/x-popconfirm/x-popconfirm.d.ts +97 -0
- package/dist/types/components/x-popover/popover-content/popover-content.d.ts +71 -0
- package/dist/types/components/x-popover/x-popover.d.ts +99 -0
- package/dist/types/components/x-portal/debug.d.ts +5 -0
- package/dist/types/components/x-portal/index.d.ts +2 -0
- package/dist/types/components/x-portal/portal-controller.d.ts +20 -0
- package/dist/types/components/x-portal/positioning.d.ts +102 -0
- package/dist/types/components/x-portal/types.d.ts +43 -0
- package/dist/types/components/x-portal/x-portal.d.ts +19 -0
- package/dist/types/components/x-progress/x-progress.d.ts +85 -0
- package/dist/types/components/x-qr-code/x-qr-code.d.ts +26 -0
- package/dist/types/components/x-radio/types.d.ts +94 -0
- package/dist/types/components/x-radio/x-radio.d.ts +186 -0
- package/dist/types/components/x-radio-group/types.d.ts +20 -0
- package/dist/types/components/x-radio-group/x-radio-group.d.ts +90 -0
- package/dist/types/components/x-range-picker/range-picker-dropdown-content/index.d.ts +2 -0
- package/dist/types/components/x-range-picker/range-picker-dropdown-content/range-picker-dropdown-content.d.ts +437 -0
- package/dist/types/components/x-range-picker/range-picker-dropdown-content/types.d.ts +48 -0
- package/dist/types/components/x-range-picker/types.d.ts +35 -0
- package/dist/types/components/x-range-picker/x-range-picker.d.ts +457 -0
- package/dist/types/components/x-rate/x-rate.d.ts +129 -0
- package/dist/types/components/x-result/types.d.ts +45 -0
- package/dist/types/components/x-result/x-result.d.ts +120 -0
- package/dist/types/components/x-row/x-row.d.ts +44 -0
- package/dist/types/components/x-segmented/types.d.ts +10 -0
- package/dist/types/components/x-segmented/x-segmented.d.ts +128 -0
- package/dist/types/components/x-select/select-dropdown-content/index.d.ts +2 -0
- package/dist/types/components/x-select/select-dropdown-content/select-dropdown-content.d.ts +52 -0
- package/dist/types/components/x-select/select-dropdown-content/types.d.ts +14 -0
- package/dist/types/components/x-select/types.d.ts +41 -0
- package/dist/types/components/x-select/x-select.d.ts +635 -0
- package/dist/types/components/x-select-option/x-select-option.d.ts +51 -0
- package/dist/types/components/x-sider/x-sider.d.ts +99 -0
- package/dist/types/components/x-skeleton/x-skeleton.d.ts +54 -0
- package/dist/types/components/x-slider/types.d.ts +1 -0
- package/dist/types/components/x-slider/x-slider.d.ts +240 -0
- package/dist/types/components/x-space/x-space.d.ts +54 -0
- package/dist/types/components/x-spin/x-spin.d.ts +41 -0
- package/dist/types/components/x-splitter/types.d.ts +41 -0
- package/dist/types/components/x-splitter/x-splitter.d.ts +187 -0
- package/dist/types/components/x-splitter-panel/types.d.ts +23 -0
- package/dist/types/components/x-splitter-panel/x-splitter-panel.d.ts +67 -0
- package/dist/types/components/x-statistic/x-statistic.d.ts +80 -0
- package/dist/types/components/x-step/types.d.ts +14 -0
- package/dist/types/components/x-step/x-step.d.ts +104 -0
- package/dist/types/components/x-steps/types.d.ts +124 -0
- package/dist/types/components/x-steps/x-steps.d.ts +270 -0
- package/dist/types/components/x-switch/types.d.ts +5 -0
- package/dist/types/components/x-switch/x-switch.d.ts +92 -0
- package/dist/types/components/x-tab-pane/x-tab-pane.d.ts +55 -0
- package/dist/types/components/x-table/column-util.d.ts +26 -0
- package/dist/types/components/x-table/types.d.ts +386 -0
- package/dist/types/components/x-table/x-table.d.ts +552 -0
- package/dist/types/components/x-table-cell/x-table-cell.d.ts +27 -0
- package/dist/types/components/x-table-row/x-table-row.d.ts +24 -0
- package/dist/types/components/x-tabs/types.d.ts +190 -0
- package/dist/types/components/x-tabs/x-tabs.d.ts +359 -0
- package/dist/types/components/x-tag/types.d.ts +27 -0
- package/dist/types/components/x-tag/x-tag.d.ts +148 -0
- package/dist/types/components/x-textarea/x-textarea.d.ts +165 -0
- package/dist/types/components/x-time-picker/time-picker-dropdown-content/index.d.ts +2 -0
- package/dist/types/components/x-time-picker/time-picker-dropdown-content/time-picker-dropdown-content.d.ts +239 -0
- package/dist/types/components/x-time-picker/time-picker-dropdown-content/types.d.ts +28 -0
- package/dist/types/components/x-time-picker/types.d.ts +18 -0
- package/dist/types/components/x-time-picker/x-time-picker.d.ts +378 -0
- package/dist/types/components/x-timeline/x-timeline.d.ts +33 -0
- package/dist/types/components/x-timeline-item/x-timeline-item.d.ts +33 -0
- package/dist/types/components/x-tooltip/types.d.ts +53 -0
- package/dist/types/components/x-tooltip/x-tooltip.d.ts +274 -0
- package/dist/types/components/x-tooltip-content/index.d.ts +1 -0
- package/dist/types/components/x-tooltip-content/types.d.ts +25 -0
- package/dist/types/components/x-tooltip-content/x-tooltip-content.d.ts +57 -0
- package/dist/types/components/x-tour/index.d.ts +1 -0
- package/dist/types/components/x-tour/types.d.ts +71 -0
- package/dist/types/components/x-tour/x-tour-panel.d.ts +73 -0
- package/dist/types/components/x-tour/x-tour.d.ts +158 -0
- package/dist/types/components/x-transfer/types.d.ts +89 -0
- package/dist/types/components/x-transfer/x-transfer.d.ts +291 -0
- package/dist/types/components/x-tree/types.d.ts +163 -0
- package/dist/types/components/x-tree/x-tree.d.ts +406 -0
- package/dist/types/components/x-tree-select/tree-select-dropdown-content/index.d.ts +2 -0
- package/dist/types/components/x-tree-select/tree-select-dropdown-content/tree-select-dropdown-content.d.ts +268 -0
- package/dist/types/components/x-tree-select/tree-select-dropdown-content/types.d.ts +24 -0
- package/dist/types/components/x-tree-select/types.d.ts +100 -0
- package/dist/types/components/x-tree-select/x-tree-select.d.ts +750 -0
- package/dist/types/components/x-typography/x-typography.d.ts +89 -0
- package/dist/types/components/x-upload/types.d.ts +177 -0
- package/dist/types/components/x-upload/x-upload.d.ts +361 -0
- package/dist/types/components/x-virtual-scroll/x-virtual-scroll.d.ts +127 -0
- package/dist/types/components/x-workflow/x-workflow.d.ts +126 -0
- package/dist/types/components/x-workflow-builder/x-workflow-builder.d.ts +69 -0
- package/dist/types/components.d.ts +19048 -0
- package/dist/types/index.d.ts +63 -0
- package/dist/types/locales/index.d.ts +2 -0
- package/dist/types/locales/languages/ar_EG.d.ts +119 -0
- package/dist/types/locales/languages/az_AZ.d.ts +119 -0
- package/dist/types/locales/languages/bg_BG.d.ts +119 -0
- package/dist/types/locales/languages/bn_BD.d.ts +119 -0
- package/dist/types/locales/languages/by_BY.d.ts +119 -0
- package/dist/types/locales/languages/ca_ES.d.ts +119 -0
- package/dist/types/locales/languages/cs_CZ.d.ts +119 -0
- package/dist/types/locales/languages/da_DK.d.ts +119 -0
- package/dist/types/locales/languages/de_DE.d.ts +119 -0
- package/dist/types/locales/languages/el_GR.d.ts +119 -0
- package/dist/types/locales/languages/en_AU.d.ts +119 -0
- package/dist/types/locales/languages/en_GB.d.ts +119 -0
- package/dist/types/locales/languages/en_US.d.ts +119 -0
- package/dist/types/locales/languages/es_ES.d.ts +119 -0
- package/dist/types/locales/languages/et_EE.d.ts +119 -0
- package/dist/types/locales/languages/fa_IR.d.ts +119 -0
- package/dist/types/locales/languages/fi_FI.d.ts +119 -0
- package/dist/types/locales/languages/fr_BE.d.ts +119 -0
- package/dist/types/locales/languages/fr_CA.d.ts +119 -0
- package/dist/types/locales/languages/fr_FR.d.ts +119 -0
- package/dist/types/locales/languages/ga_IE.d.ts +119 -0
- package/dist/types/locales/languages/gl_ES.d.ts +119 -0
- package/dist/types/locales/languages/he_IL.d.ts +119 -0
- package/dist/types/locales/languages/hi_IN.d.ts +119 -0
- package/dist/types/locales/languages/hr_HR.d.ts +119 -0
- package/dist/types/locales/languages/hu_HU.d.ts +119 -0
- package/dist/types/locales/languages/hy_AM.d.ts +119 -0
- package/dist/types/locales/languages/id_ID.d.ts +119 -0
- package/dist/types/locales/languages/index.d.ts +13 -0
- package/dist/types/locales/languages/is_IS.d.ts +119 -0
- package/dist/types/locales/languages/it_IT.d.ts +119 -0
- package/dist/types/locales/languages/ja_JP.d.ts +119 -0
- package/dist/types/locales/languages/ka_GE.d.ts +119 -0
- package/dist/types/locales/languages/kk_KZ.d.ts +119 -0
- package/dist/types/locales/languages/km_KH.d.ts +119 -0
- package/dist/types/locales/languages/kmr_IQ.d.ts +119 -0
- package/dist/types/locales/languages/kn_IN.d.ts +119 -0
- package/dist/types/locales/languages/ko_KR.d.ts +119 -0
- package/dist/types/locales/languages/ku_IQ.d.ts +119 -0
- package/dist/types/locales/languages/lt_LT.d.ts +119 -0
- package/dist/types/locales/languages/lv_LV.d.ts +119 -0
- package/dist/types/locales/languages/mk_MK.d.ts +119 -0
- package/dist/types/locales/languages/ml_IN.d.ts +119 -0
- package/dist/types/locales/languages/mn_MN.d.ts +119 -0
- package/dist/types/locales/languages/ms_MY.d.ts +119 -0
- package/dist/types/locales/languages/nb_NO.d.ts +119 -0
- package/dist/types/locales/languages/ne_NP.d.ts +119 -0
- package/dist/types/locales/languages/nl_BE.d.ts +119 -0
- package/dist/types/locales/languages/nl_NL.d.ts +119 -0
- package/dist/types/locales/languages/pl_PL.d.ts +119 -0
- package/dist/types/locales/languages/pt_BR.d.ts +119 -0
- package/dist/types/locales/languages/pt_PT.d.ts +119 -0
- package/dist/types/locales/languages/ro_RO.d.ts +119 -0
- package/dist/types/locales/languages/ru_RU.d.ts +119 -0
- package/dist/types/locales/languages/sk_SK.d.ts +119 -0
- package/dist/types/locales/languages/sl_SI.d.ts +119 -0
- package/dist/types/locales/languages/sr_RS.d.ts +119 -0
- package/dist/types/locales/languages/sv_SE.d.ts +119 -0
- package/dist/types/locales/languages/ta_IN.d.ts +119 -0
- package/dist/types/locales/languages/th_TH.d.ts +119 -0
- package/dist/types/locales/languages/tr_TR.d.ts +119 -0
- package/dist/types/locales/languages/uk_UA.d.ts +119 -0
- package/dist/types/locales/languages/ur_PK.d.ts +119 -0
- package/dist/types/locales/languages/vi_VN.d.ts +119 -0
- package/dist/types/locales/languages/zh_CN.d.ts +119 -0
- package/dist/types/locales/languages/zh_HK.d.ts +119 -0
- package/dist/types/locales/languages/zh_TW.d.ts +119 -0
- package/dist/types/locales/locale.service.d.ts +93 -0
- package/dist/types/stencil-public-runtime.d.ts +1860 -0
- package/dist/types/types.d.ts +59 -0
- package/dist/types/utils/app-service.d.ts +20 -0
- package/dist/types/utils/cascader.service.d.ts +45 -0
- package/dist/types/utils/config.d.ts +47 -0
- package/dist/types/utils/form/core/abstract-control.d.ts +121 -0
- package/dist/types/utils/form/core/form-array.d.ts +51 -0
- package/dist/types/utils/form/core/form-builder.d.ts +45 -0
- package/dist/types/utils/form/core/form-control.d.ts +37 -0
- package/dist/types/utils/form/core/form-group.d.ts +63 -0
- package/dist/types/utils/form/frameworks.d.ts +18 -0
- package/dist/types/utils/form/types.d.ts +8 -0
- package/dist/types/utils/form/validators/validators.d.ts +39 -0
- package/dist/types/utils/index.d.ts +10 -0
- package/dist/types/utils/qr-code/cache/qr.cache.d.ts +7 -0
- package/dist/types/utils/qr-code/engine/qr.engine.d.ts +15 -0
- package/dist/types/utils/qr-code/engine/qr.gf.d.ts +4 -0
- package/dist/types/utils/qr-code/engine/qr.mask.d.ts +2 -0
- package/dist/types/utils/qr-code/engine/qr.rs.d.ts +1 -0
- package/dist/types/utils/qr-code/engine/qr.util.d.ts +0 -0
- package/dist/types/utils/qr-code/engine/qr.version.d.ts +16 -0
- package/dist/types/utils/qr-code/renderer/canvas.renderer.d.ts +6 -0
- package/dist/types/utils/qr-code/renderer/svg.renderer.d.ts +7 -0
- package/dist/types/utils/qr-code/worker/worker.manager.d.ts +12 -0
- package/dist/types/utils/table.service.d.ts +48 -0
- package/dist/types/utils/tree.service.d.ts +85 -0
- package/dist/types/utils/workflow/flow.service.d.ts +61 -0
- package/dist/types/utils/workflow/types.d.ts +120 -0
- package/dist/xlabs-store/fonts/xlabs-outlined.woff2 +0 -0
- package/dist/xlabs-store/fonts/xlabs-rounded.woff2 +0 -0
- package/dist/xlabs-store/fonts/xlabs-solided.woff2 +0 -0
- package/dist/xlabs-store/index.esm.js +1 -0
- package/dist/xlabs-store/p-016194dc.entry.js +1 -0
- package/dist/xlabs-store/p-023259c9.entry.js +1 -0
- package/dist/xlabs-store/p-04a3721a.entry.js +1 -0
- package/dist/xlabs-store/p-072445b7.entry.js +1 -0
- package/dist/xlabs-store/p-0ec21454.entry.js +1 -0
- package/dist/xlabs-store/p-12b6a843.entry.js +1 -0
- package/dist/xlabs-store/p-1a81cf09.entry.js +1 -0
- package/dist/xlabs-store/p-1b019aeb.entry.js +1 -0
- package/dist/xlabs-store/p-262a0673.entry.js +1 -0
- package/dist/xlabs-store/p-34cce823.entry.js +1 -0
- package/dist/xlabs-store/p-3a9fdefe.entry.js +1 -0
- package/dist/xlabs-store/p-40036100.entry.js +1 -0
- package/dist/xlabs-store/p-45f04e8d.entry.js +1 -0
- package/dist/xlabs-store/p-48ba7c34.entry.js +1 -0
- package/dist/xlabs-store/p-48e2c26e.entry.js +1 -0
- package/dist/xlabs-store/p-4ac2e915.entry.js +1 -0
- package/dist/xlabs-store/p-4d7c2a35.entry.js +1 -0
- package/dist/xlabs-store/p-4f67cb33.entry.js +1 -0
- package/dist/xlabs-store/p-502b345e.entry.js +1 -0
- package/dist/xlabs-store/p-555c5e48.entry.js +1 -0
- package/dist/xlabs-store/p-5878525f.entry.js +1 -0
- package/dist/xlabs-store/p-5abbdca7.entry.js +1 -0
- package/dist/xlabs-store/p-6243ca69.entry.js +1 -0
- package/dist/xlabs-store/p-64e7a057.entry.js +1 -0
- package/dist/xlabs-store/p-6530d2ef.entry.js +1 -0
- package/dist/xlabs-store/p-675a39e1.entry.js +1 -0
- package/dist/xlabs-store/p-689c52ef.entry.js +1 -0
- package/dist/xlabs-store/p-69b8cb7d.entry.js +1 -0
- package/dist/xlabs-store/p-6b121c60.entry.js +1 -0
- package/dist/xlabs-store/p-6c75fc39.entry.js +1 -0
- package/dist/xlabs-store/p-6f705deb.entry.js +1 -0
- package/dist/xlabs-store/p-723d362c.entry.js +1 -0
- package/dist/xlabs-store/p-783545e3.entry.js +1 -0
- package/dist/xlabs-store/p-7a8f11b4.entry.js +1 -0
- package/dist/xlabs-store/p-81fb4caf.entry.js +1 -0
- package/dist/xlabs-store/p-863dd67d.entry.js +1 -0
- package/dist/xlabs-store/p-8bcbb4e3.entry.js +1 -0
- package/dist/xlabs-store/p-8bcc219a.entry.js +1 -0
- package/dist/xlabs-store/p-914b0ae2.entry.js +1 -0
- package/dist/xlabs-store/p-96b1939d.entry.js +1 -0
- package/dist/xlabs-store/p-9ac291ea.entry.js +1 -0
- package/dist/xlabs-store/p-9de03a07.entry.js +1 -0
- package/dist/xlabs-store/p-BPeosvTA.js +1 -0
- package/dist/xlabs-store/p-COpzIi1n.js +1 -0
- package/dist/xlabs-store/p-C_QdJRdB.js +1 -0
- package/dist/xlabs-store/p-Ce5L9qbY.js +1 -0
- package/dist/xlabs-store/p-Co3Y9VjQ.js +1 -0
- package/dist/xlabs-store/p-D66tF8_2.js +1 -0
- package/dist/xlabs-store/p-DElCk9ta.js +1 -0
- package/dist/xlabs-store/p-Dgxy93Bg.js +1 -0
- package/dist/xlabs-store/p-XBF88YT_.js +1 -0
- package/dist/xlabs-store/p-a4223feb.entry.js +1 -0
- package/dist/xlabs-store/p-a8c2eca7.entry.js +1 -0
- package/dist/xlabs-store/p-ac9ba3aa.entry.js +1 -0
- package/dist/xlabs-store/p-bd5084b8.entry.js +1 -0
- package/dist/xlabs-store/p-bda322db.entry.js +1 -0
- package/dist/xlabs-store/p-c0ca6f7d.entry.js +1 -0
- package/dist/xlabs-store/p-c4c8840c.entry.js +1 -0
- package/dist/xlabs-store/p-c4d0ce0d.entry.js +1 -0
- package/dist/xlabs-store/p-cd3c3374.entry.js +1 -0
- package/dist/xlabs-store/p-cf4697bc.entry.js +1 -0
- package/dist/xlabs-store/p-d2ec3d4a.entry.js +1 -0
- package/dist/xlabs-store/p-d4d00aff.entry.js +1 -0
- package/dist/xlabs-store/p-d9d0147b.entry.js +1 -0
- package/dist/xlabs-store/p-dd930f2a.entry.js +1 -0
- package/dist/xlabs-store/p-e04836e8.entry.js +1 -0
- package/dist/xlabs-store/p-e14b5f6d.entry.js +1 -0
- package/dist/xlabs-store/p-eb1dd3c2.entry.js +1 -0
- package/dist/xlabs-store/p-f02155e4.entry.js +1 -0
- package/dist/xlabs-store/p-f1331938.entry.js +1 -0
- package/dist/xlabs-store/p-fac0b689.entry.js +1 -0
- package/dist/xlabs-store/p-fd2e1d9c.entry.js +1 -0
- package/dist/xlabs-store/p-fdec5d89.entry.js +1 -0
- package/dist/xlabs-store/p-ffba56b2.entry.js +1 -0
- package/dist/xlabs-store/p-ig_mFsVk.js +2 -0
- package/dist/xlabs-store/xlabs-store.css +1 -0
- package/dist/xlabs-store/xlabs-store.esm.js +1 -0
- package/loader/cdn.js +1 -0
- package/loader/index.cjs.js +1 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +1 -0
- package/loader/index.js +2 -0
- package/package.json +69 -0
- package/readme.md +50 -0
|
@@ -0,0 +1,3239 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-C7sKs9A2.js');
|
|
4
|
+
var config = require('./config-BP9bROYD.js');
|
|
5
|
+
var abstractControl = require('./abstract-control-C4D0eNCC.js');
|
|
6
|
+
|
|
7
|
+
const xAlertCss = () => `@charset "UTF-8";:root{--x-color-primary:#1677ff;--x-color-primary-rgb:22, 119, 255;--x-color-primary-contrast:#ffffff;--x-color-primary-contrast-rgb:255, 255, 255;--x-color-primary-shade:#0958d9;--x-color-primary-tint:#4096ff;--x-color-primary-bg:#e6f4ff;--x-color-primary-bg-hover:#bae0ff;--x-color-primary-border:#91caff;--x-color-primary-border-hover:#69b1ff;--x-color-primary-hover:#4096ff;--x-color-primary-active:#0958d9;--x-color-primary-text:#1677ff;--x-color-primary-text-hover:#4096ff;--x-color-primary-text-active:#0958d9;--x-color-secondary:#3dc2ff;--x-color-secondary-rgb:61, 194, 255;--x-color-secondary-contrast:#ffffff;--x-color-secondary-contrast-rgb:255, 255, 255;--x-color-secondary-shade:#36abe0;--x-color-secondary-tint:#50c8ff;--x-color-success:#52c41a;--x-color-success-rgb:82, 196, 26;--x-color-success-contrast:#ffffff;--x-color-success-contrast-rgb:255, 255, 255;--x-color-success-shade:#389e0d;--x-color-success-tint:#73d13d;--x-color-success-bg:#f6ffed;--x-color-success-bg-hover:#d9f7be;--x-color-success-border:#b7eb8f;--x-color-success-border-hover:#95de64;--x-color-success-hover:#73d13d;--x-color-success-active:#389e0d;--x-color-success-text:#52c41a;--x-color-success-text-hover:#73d13d;--x-color-success-text-active:#389e0d;--x-color-warning:#faad14;--x-color-warning-rgb:250, 173, 20;--x-color-warning-contrast:#000000;--x-color-warning-contrast-rgb:0, 0, 0;--x-color-warning-shade:#d48806;--x-color-warning-tint:#ffc53d;--x-color-warning-bg:#fffbe6;--x-color-warning-bg-hover:#fff1b8;--x-color-warning-border:#ffe58f;--x-color-warning-border-hover:#ffd666;--x-color-warning-hover:#ffc53d;--x-color-warning-active:#d48806;--x-color-warning-text:#faad14;--x-color-warning-text-hover:#ffc53d;--x-color-warning-text-active:#d48806;--x-color-danger:#ff4d4f;--x-color-danger-rgb:255, 77, 79;--x-color-danger-contrast:#ffffff;--x-color-danger-contrast-rgb:255, 255, 255;--x-color-danger-shade:#cf1322;--x-color-danger-tint:#ff7875;--x-color-error:#ff4d4f;--x-color-error-rgb:255, 77, 79;--x-color-error-bg:#fff2f0;--x-color-error-bg-hover:#ffccc7;--x-color-error-border:#ffa39e;--x-color-error-border-hover:#ff7875;--x-color-error-hover:#ff7875;--x-color-error-active:#d9363e;--x-color-error-text:#ff4d4f;--x-color-error-text-hover:#ff7875;--x-color-error-text-active:#d9363e;--x-color-info:#1677ff;--x-color-info-rgb:22, 119, 255;--x-color-info-bg:#e6f4ff;--x-color-info-bg-hover:#bae0ff;--x-color-info-border:#91caff;--x-color-info-border-hover:#69b1ff;--x-color-info-hover:#69b1ff;--x-color-info-active:#0958d9;--x-color-info-text:#1677ff;--x-color-info-text-hover:#69b1ff;--x-color-info-text-active:#0958d9;--x-color-text:rgba(0, 0, 0, 0.88);--x-color-text-secondary:rgba(0, 0, 0, 0.65);--x-color-text-tertiary:rgba(0, 0, 0, 0.45);--x-color-text-quaternary:rgba(0, 0, 0, 0.25);--x-color-text-disabled:rgba(0, 0, 0, 0.25);--x-color-text-placeholder:rgba(0, 0, 0, 0.25);--x-color-text-heading:rgba(0, 0, 0, 0.88);--x-color-text-label:rgba(0, 0, 0, 0.65);--x-color-text-description:rgba(0, 0, 0, 0.45);--x-color-text-light-solid:#ffffff;--x-color-bg-container:#ffffff;--x-color-bg-elevated:#ffffff;--x-color-bg-layout:#f5f5f5;--x-color-bg-spotlight:rgba(0, 0, 0, 0.85);--x-color-bg-mask:rgba(0, 0, 0, 0.45);--x-color-bg-base:#ffffff;--x-color-bg-container-disabled:#f5f5f5;--x-color-bg-container-loading:rgba(255, 255, 255, 0.65);--x-color-white:#ffffff;--x-color-fill:rgba(0, 0, 0, 0.15);--x-color-fill-secondary:rgba(0, 0, 0, 0.06);--x-color-fill-tertiary:rgba(0, 0, 0, 0.04);--x-color-fill-quaternary:rgba(0, 0, 0, 0.02);--x-color-border:#d9d9d9;--x-color-border-secondary:#f0f0f0;--x-color-border-bg:#ffffff;--x-color-split:rgba(5, 5, 5, 0.06);--x-color-dark:#222428;--x-color-dark-rgb:34, 36, 40;--x-color-dark-contrast:#ffffff;--x-color-dark-contrast-rgb:255, 255, 255;--x-color-dark-shade:#1e2023;--x-color-dark-tint:#383a3e;--x-color-medium:#92949c;--x-color-medium-rgb:146, 148, 156;--x-color-medium-contrast:#ffffff;--x-color-medium-contrast-rgb:255, 255, 255;--x-color-medium-shade:#808289;--x-color-medium-tint:#9d9fa6;--x-color-light:#f4f5f8;--x-color-light-rgb:244, 245, 248;--x-color-light-contrast:#000000;--x-color-light-contrast-rgb:0, 0, 0;--x-color-light-shade:#d7d8da;--x-color-light-tint:#f5f6f9;--x-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--x-font-family-code:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;--x-font-size:14px;--x-font-size-sm:12px;--x-font-size-lg:16px;--x-font-size-xl:20px;--x-font-size-heading-1:38px;--x-font-size-heading-2:30px;--x-font-size-heading-3:24px;--x-font-size-heading-4:20px;--x-font-size-heading-5:16px;--x-line-height:1.5714285714285714;--x-line-height-lg:1.5;--x-line-height-sm:1.6666666666666667;--x-line-height-heading-1:1.2105263157894737;--x-line-height-heading-2:1.2666666666666666;--x-line-height-heading-3:1.3333333333333333;--x-line-height-heading-4:1.4;--x-line-height-heading-5:1.5;--x-font-weight-normal:400;--x-font-weight-medium:500;--x-font-weight-semibold:600;--x-font-weight-strong:600;--x-font-size-base:14px;--x-font-size-xxl:24px;--x-line-height-base:1.5714285714285714;--x-spacing-xxs:4px;--x-spacing-xs:8px;--x-spacing-sm:12px;--x-spacing-md:16px;--x-spacing-lg:20px;--x-spacing-xl:24px;--x-spacing-xxl:32px;--x-spacing-xxxl:48px;--x-margin-xxs:4px;--x-margin-xs:8px;--x-margin-sm:12px;--x-margin-md:16px;--x-margin-lg:24px;--x-margin-xl:32px;--x-margin-xxl:48px;--x-padding-xxs:4px;--x-padding-xs:8px;--x-padding-sm:12px;--x-padding-md:16px;--x-padding-lg:24px;--x-padding-content-horizontal-lg:24px;--x-padding-content-vertical-lg:12px;--x-padding-content-horizontal:16px;--x-padding-content-vertical:12px;--x-padding-content-horizontal-sm:16px;--x-padding-content-vertical-sm:8px;--x-border-radius:6px;--x-border-radius-xs:2px;--x-border-radius-sm:4px;--x-border-radius-lg:8px;--x-border-radius-xl:12px;--x-border-radius-outer:4px;--x-border-radius-base:6px;--x-border-width:1px;--x-border-width-base:1px;--x-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-shadow-lg:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-box-shadow-popover-arrow:2px 2px 5px rgba(0, 0, 0, 0.05);--x-box-shadow-card:0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);--x-box-shadow-drawer-right:-6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12), -9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-left:6px 0 16px 0 rgba(0, 0, 0, 0.08), 3px 0 6px -4px rgba(0, 0, 0, 0.12), 9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-up:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-down:0 -6px 16px 0 rgba(0, 0, 0, 0.08), 0 -3px 6px -4px rgba(0, 0, 0, 0.12), 0 -9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tabs-overflow-left:inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-right:inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-top:inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-bottom:inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);--x-motion-duration-fast:0.1s;--x-motion-duration-mid:0.2s;--x-motion-duration-slow:0.3s;--x-motion-ease-in-out:cubic-bezier(0.645, 0.045, 0.355, 1);--x-motion-ease-out:cubic-bezier(0.215, 0.61, 0.355, 1);--x-motion-ease-in:cubic-bezier(0.55, 0.055, 0.675, 0.19);--x-motion-ease-out-back:cubic-bezier(0.12, 0.4, 0.29, 1.46);--x-motion-ease-in-back:cubic-bezier(0.71, -0.46, 0.88, 0.6);--x-motion-ease-in-out-circle:cubic-bezier(0.78, 0.14, 0.15, 0.86);--x-motion-ease-out-circle:cubic-bezier(0.08, 0.82, 0.17, 1);--x-motion-ease-in-circle:cubic-bezier(0.6, 0.04, 0.98, 0.34);--x-motion-ease-in-quint:cubic-bezier(0.755, 0.05, 0.855, 0.06);--x-motion-ease-out-quint:cubic-bezier(0.23, 1, 0.32, 1);--x-z-index-base:0;--x-z-index-popup-base:1000;--x-z-index-popup:1030;--x-z-index-affix:10;--x-z-index-modal:1000;--x-z-index-modal-mask:1000;--x-z-index-drawer:1000;--x-z-index-popover:1030;--x-z-index-dropdown:1050;--x-z-index-tooltip:1070;--x-z-index-notification:1080;--x-z-index-message:1090;--x-z-index-popconfirm:1060;--x-z-index-table-fixed:10;--x-opacity-loading:0.65;--x-opacity-image:1;--x-opacity-disabled:0.5;--x-control-height:32px;--x-control-height-xs:24px;--x-control-height-sm:24px;--x-control-height-lg:40px;--x-control-radio-size:16px;--x-control-checkbox-size:16px;--x-control-padding-horizontal:12px;--x-control-padding-horizontal-sm:8px;--x-control-outline-width:2px;--x-control-outline:rgba(5, 145, 255, 0.1);--x-control-item-bg-hover:rgba(0, 0, 0, 0.04);--x-control-item-bg-active:#e6f4ff;--x-control-item-bg-active-hover:#bae0ff;--x-control-item-bg-active-disabled:rgba(0, 0, 0, 0.15);--x-control-tmp-outline:rgba(0, 0, 0, 0.02);--x-color-yellow:#fadb14;--x-color-yellow-rgb:250, 219, 20;--x-font-family-base:var(--x-font-family);--x-color-link:#1677ff;--x-color-link-hover:#69b1ff;--x-color-link-active:#0958d9;--x-color-icon:rgba(0, 0, 0, 0.45);--x-color-icon-hover:rgba(0, 0, 0, 0.88);--x-color-highlight:#ff4d4f;--x-color-bg-text-hover:rgba(0, 0, 0, 0.06);--x-color-bg-text-active:rgba(0, 0, 0, 0.15);--x-screen-xs:480px;--x-screen-xs-min:480px;--x-screen-xs-max:575px;--x-screen-sm:576px;--x-screen-sm-min:576px;--x-screen-sm-max:767px;--x-screen-md:768px;--x-screen-md-min:768px;--x-screen-md-max:991px;--x-screen-lg:992px;--x-screen-lg-min:992px;--x-screen-lg-max:1199px;--x-screen-xl:1200px;--x-screen-xl-min:1200px;--x-screen-xl-max:1599px;--x-screen-xxl:1600px;--x-screen-xxl-min:1600px;--x-color-fill-content:rgba(0, 0, 0, 0.06);--x-color-fill-content-hover:rgba(0, 0, 0, 0.15);--x-color-fill-alter:rgba(0, 0, 0, 0.02);--x-scrollbar-width:12px;--x-scrollbar-track-bg:rgba(0, 0, 0, 0.04);--x-scrollbar-thumb-bg:rgba(0, 0, 0, 0.25);--x-scrollbar-thumb-bg-hover:rgba(0, 0, 0, 0.35);--x-menu-dark-bg:#001529;--x-menu-dark-item-bg:#001529;--x-menu-dark-popup-bg:#001529;--x-menu-dark-submenu-item-bg:#000c17}:host{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:var(--x-alert-spacing-sm, var(--x-spacing-sm, 8px)) var(--x-alert-spacing-lg, var(--x-spacing-lg, 16px));word-wrap:break-word;border-radius:var(--x-alert-border-radius-sm, var(--x-border-radius-sm, 4px));position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:var(--x-alert-spacing-lg, var(--x-spacing-lg, 16px));color:var(--x-alert-color-text, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-size:var(--x-alert-font-size, var(--x-font-size-base, 14px));font-family:var(--x-alert-font-family, var(--x-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif));line-height:var(--x-alert-line-height, var(--x-line-height-base, 1.5714));list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";background-color:var(--x-alert-color-bg-layout, var(--x-color-bg-layout, #f5f5f5));border:var(--x-alert-border-width, var(--x-border-width-base, 1px)) solid transparent}.x-alert-content{-ms-flex:1;flex:1;min-width:0}.x-alert-icon{margin-right:var(--x-alert-spacing-xs, var(--x-spacing-xs, 8px));font-size:var(--x-alert-font-size, var(--x-font-size-base, 14px));height:var(--x-alert-font-size, var(--x-font-size-base, 14px));line-height:var(--x-alert-font-size, var(--x-font-size-base, 14px));display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}.x-alert-description{font-size:var(--x-alert-font-size, var(--x-font-size-base, 14px));line-height:22px;display:none}:host(.x-alert-success){background-color:var(--x-alert-color-success-bg, var(--x-color-success-bg, #f6ffed));border-color:var(--x-alert-color-success-border, var(--x-color-success-border, #b7eb8f))}:host(.x-alert-success) .x-alert-icon{color:var(--x-alert-color-success, var(--x-color-success, #52c41a))}:host(.x-alert-info){background-color:var(--x-alert-color-info-bg, var(--x-color-info-bg, #e6f4ff));border-color:var(--x-alert-color-info-border, var(--x-color-info-border, #91caff))}:host(.x-alert-info) .x-alert-icon{color:var(--x-alert-color-primary, var(--x-color-primary, #1677ff))}:host(.x-alert-warning){background-color:var(--x-alert-color-warning-bg, var(--x-color-warning-bg, #fffbe6));border-color:var(--x-alert-color-warning-border, var(--x-color-warning-border, #ffe58f))}:host(.x-alert-warning) .x-alert-icon{color:var(--x-alert-color-warning, var(--x-color-warning, #faad14))}:host(.x-alert-error){background-color:var(--x-alert-color-error-bg, var(--x-color-error-bg, #fff2f0));border-color:var(--x-alert-color-error-border, var(--x-color-error-border, #ffccc7))}:host(.x-alert-error) .x-alert-icon{color:var(--x-alert-color-error, var(--x-color-error, #ff4d4f))}.x-alert-close-icon{margin-left:var(--x-alert-spacing-xs, var(--x-spacing-xs, 8px));padding:0;overflow:hidden;font-size:var(--x-alert-font-size-sm, var(--x-font-size-sm, 12px));line-height:var(--x-alert-font-size-sm, var(--x-font-size-sm, 12px));background-color:transparent;border:none;outline:none;cursor:pointer;color:var(--x-alert-color-text-tertiary, var(--x-color-text-tertiary, rgba(0, 0, 0, 0.45)));-webkit-transition:color var(--x-alert-motion-duration-mid, var(--x-motion-duration-mid, 0.2s));transition:color var(--x-alert-motion-duration-mid, var(--x-motion-duration-mid, 0.2s));display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.x-alert-close-icon:hover{color:var(--x-alert-color-text-secondary, var(--x-color-text-secondary, rgba(0, 0, 0, 0.65)))}:host(.x-alert-with-description){-ms-flex-align:start;align-items:flex-start;padding:var(--x-alert-spacing-lg, var(--x-spacing-lg, 16px)) var(--x-alert-spacing-xl, var(--x-spacing-xl, 24px))}:host(.x-alert-with-description) .x-alert-icon{margin-right:var(--x-alert-spacing-md, var(--x-spacing-md, 16px));font-size:var(--x-alert-font-size-xxl, var(--x-font-size-xxl, 24px));height:var(--x-alert-font-size-xxl, var(--x-font-size-xxl, 24px));line-height:var(--x-alert-font-size-xxl, var(--x-font-size-xxl, 24px));margin-top:2px;}:host(.x-alert-with-description) .x-alert-message{display:block;margin-bottom:var(--x-alert-spacing-xxs, var(--x-spacing-xxs, 4px));color:var(--x-alert-color-text, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-size:var(--x-alert-font-size-lg, var(--x-font-size-lg, 16px));font-weight:500;}:host(.x-alert-with-description) .x-alert-description{display:block;color:var(--x-alert-color-text, var(--x-color-text, rgba(0, 0, 0, 0.88)))}:host(.x-alert-with-description) .x-alert-close-icon{margin-top:4px;}:host(.x-alert-banner){margin-bottom:0;border:0;border-radius:0}`;
|
|
8
|
+
|
|
9
|
+
const XAlert = class {
|
|
10
|
+
constructor(hostRef) {
|
|
11
|
+
index.registerInstance(this, hostRef);
|
|
12
|
+
this.xClose = index.createEvent(this, "xClose", 7);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Content of Alert.
|
|
16
|
+
* @example
|
|
17
|
+
* <x-alert message="Info"></x-alert>
|
|
18
|
+
*/
|
|
19
|
+
message;
|
|
20
|
+
/**
|
|
21
|
+
* Additional content of Alert.
|
|
22
|
+
* @example
|
|
23
|
+
* <x-alert description="Details"></x-alert>
|
|
24
|
+
*/
|
|
25
|
+
description;
|
|
26
|
+
/**
|
|
27
|
+
* Type of Alert style, options: success, info, warning, error.
|
|
28
|
+
* @example
|
|
29
|
+
* <x-alert type="success" message="Saved"></x-alert>
|
|
30
|
+
*/
|
|
31
|
+
type = 'info';
|
|
32
|
+
/**
|
|
33
|
+
* Whether Alert can be closed.
|
|
34
|
+
* @example
|
|
35
|
+
* <x-alert closable message="Closable"></x-alert>
|
|
36
|
+
*/
|
|
37
|
+
closable = false;
|
|
38
|
+
/**
|
|
39
|
+
* Whether to show icon.
|
|
40
|
+
* @example
|
|
41
|
+
* <x-alert showIcon message="With icon"></x-alert>
|
|
42
|
+
*/
|
|
43
|
+
showIcon = false;
|
|
44
|
+
/**
|
|
45
|
+
* Whether to show as banner.
|
|
46
|
+
* @example
|
|
47
|
+
* <x-alert banner message="Banner"></x-alert>
|
|
48
|
+
*/
|
|
49
|
+
banner = false;
|
|
50
|
+
/**
|
|
51
|
+
* Internal closed state for dismissible alerts.
|
|
52
|
+
*/
|
|
53
|
+
closed = false;
|
|
54
|
+
/**
|
|
55
|
+
* Emits when the alert is closed.
|
|
56
|
+
* @example
|
|
57
|
+
* <x-alert onXClose={() => console.log('closed')}></x-alert>
|
|
58
|
+
*/
|
|
59
|
+
xClose;
|
|
60
|
+
/**
|
|
61
|
+
* Handle close action and emit close event.
|
|
62
|
+
* @param e - Mouse click event from close button.
|
|
63
|
+
* @returns void
|
|
64
|
+
* @example
|
|
65
|
+
* <x-alert closable onXClose={() => {}}></x-alert>
|
|
66
|
+
*/
|
|
67
|
+
handleClose(e) {
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
this.closed = true;
|
|
70
|
+
this.xClose.emit();
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Render alert content, icon, and close button.
|
|
74
|
+
*
|
|
75
|
+
* Flow:
|
|
76
|
+
* 1. Checks if `closed` state is true; if so, returns null to remove from DOM.
|
|
77
|
+
* 2. Determines if description is present to adjust styling.
|
|
78
|
+
* 3. Constructs host classes based on type, icon presence, banner mode, and closability.
|
|
79
|
+
* 4. Renders the status icon if `showIcon` is true.
|
|
80
|
+
* - Selects the appropriate SVG based on `type` (success, info, warning, error).
|
|
81
|
+
* 5. Renders the message and description content.
|
|
82
|
+
* 6. Renders the close button if `closable` is true.
|
|
83
|
+
*
|
|
84
|
+
* @returns JSX.Element | null
|
|
85
|
+
* @example
|
|
86
|
+
* <x-alert type="warning" message="Warning"></x-alert>
|
|
87
|
+
*/
|
|
88
|
+
render() {
|
|
89
|
+
// Hide alert entirely after it is closed.
|
|
90
|
+
if (this.closed)
|
|
91
|
+
return null;
|
|
92
|
+
const isDescription = !!this.description;
|
|
93
|
+
return (index.h(index.Host, { class: {
|
|
94
|
+
'x-alert': true,
|
|
95
|
+
[`x-alert-${this.type}`]: true,
|
|
96
|
+
'x-alert-with-description': isDescription,
|
|
97
|
+
'x-alert-no-icon': !this.showIcon,
|
|
98
|
+
'x-alert-banner': this.banner,
|
|
99
|
+
'x-alert-closable': this.closable,
|
|
100
|
+
}, role: "alert" }, this.showIcon && (index.h("span", { class: "x-alert-icon" }, this.type === 'success' && (index.h("span", { role: "img", "aria-label": "check-circle", class: "anticon anticon-check-circle" }, index.h("svg", { viewBox: "64 64 896 896", focusable: "false", "data-icon": "check-circle", width: "1em", height: "1em", fill: "currentColor", "aria-hidden": "true" }, index.h("path", { d: "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z" })))), this.type === 'info' && (index.h("span", { role: "img", "aria-label": "info-circle", class: "anticon anticon-info-circle" }, index.h("svg", { viewBox: "64 64 896 896", focusable: "false", "data-icon": "info-circle", width: "1em", height: "1em", fill: "currentColor", "aria-hidden": "true" }, index.h("path", { d: "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v172zm-32-309.3c-28.7 0-52-23.3-52-52s23.3-52 52-52 52 23.3 52 52-23.3 52-52 52z" })))), this.type === 'warning' && (index.h("span", { role: "img", "aria-label": "exclamation-circle", class: "anticon anticon-exclamation-circle" }, index.h("svg", { viewBox: "64 64 896 896", focusable: "false", "data-icon": "exclamation-circle", width: "1em", height: "1em", fill: "currentColor", "aria-hidden": "true" }, index.h("path", { d: "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z" })))), this.type === 'error' && (index.h("span", { role: "img", "aria-label": "close-circle", class: "anticon anticon-close-circle" }, index.h("svg", { viewBox: "64 64 896 896", focusable: "false", "data-icon": "close-circle", width: "1em", height: "1em", fill: "currentColor", "aria-hidden": "true" }, index.h("path", { d: "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm165.4 618.2l-66-.3L512 563.4l-99.3 118.4-66.1.3c-4.4 0-8-3.5-8-8 0-1.9.7-3.7 1.9-5.2l130.1-155L340.5 359a8.32 8.32 0 01-1.9-5.2c0-4.4 3.6-8 8-8l66.1.3L512 464.6l99.3-118.4 66-.3c4.4 0 8 3.5 8 8 0 1.9-.7 3.7-1.9 5.2L553.5 514l130 155c1.2 1.5 1.9 3.3 1.9 5.2 0 4.4-3.6 8-8 8z" })))))), index.h("div", { class: "x-alert-content" }, this.message && index.h("div", { class: "x-alert-message" }, this.message), this.description && index.h("div", { class: "x-alert-description" }, this.description)), this.closable && (index.h("button", { type: "button", class: "x-alert-close-icon", onClick: (e) => this.handleClose(e) }, index.h("x-icon", { name: config.getIcon('close') })))));
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
XAlert.style = xAlertCss();
|
|
104
|
+
|
|
105
|
+
const xBadgeCss = () => `@charset "UTF-8";:host{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:var(--x-badge-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-size:var(--x-badge-font-size, var(--x-font-size-base, 14px));font-variant:tabular-nums;line-height:var(--x-badge-line-height, var(--x-line-height-base, 1.5714285714));list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";position:relative;display:inline-block;line-height:var(--x-badge-line-height-tight, 1);vertical-align:middle}:host(.x-badge-not-a-wrapper){vertical-align:middle}:host(.x-badge-not-a-wrapper) .x-badge-count,:host(.x-badge-not-a-wrapper) .x-badge-dot{-webkit-transform:none;transform:none;position:relative;top:auto;inset-inline-end:auto;display:block}.x-badge-count{z-index:auto;min-width:var(--x-badge-count-min-width, 20px);height:var(--x-badge-count-height, 20px);padding:0 var(--x-badge-count-padding, var(--x-padding-xxs, 6px));color:var(--x-badge-count-color, var(--x-color-white, #fff));font-weight:normal;font-size:var(--x-badge-count-font-size, var(--x-font-size-sm, 12px));line-height:var(--x-badge-count-height, 20px);white-space:nowrap;text-align:center;background:var(--x-badge-count-bg, var(--x-color-error, #ff4d4f));border-radius:var(--x-badge-count-border-radius, 10px);-webkit-box-shadow:0 0 0 1px var(--x-badge-shadow-color, var(--x-color-white, #fff));box-shadow:0 0 0 1px var(--x-badge-shadow-color, var(--x-color-white, #fff));-webkit-transition:background var(--x-badge-motion-duration, 0.1s);transition:background var(--x-badge-motion-duration, 0.1s);position:absolute;top:0;inset-inline-end:0;-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%);-webkit-transform-origin:100% 0%;transform-origin:100% 0%}.x-badge-count-sm{min-width:var(--x-badge-count-min-width-sm, 14px);height:var(--x-badge-count-height-sm, 14px);padding:0 var(--x-badge-count-padding-sm, var(--x-padding-xxs, 4px));font-size:var(--x-badge-count-font-size-sm, var(--x-font-size-sm, 12px));line-height:var(--x-badge-count-height-sm, 14px);border-radius:var(--x-badge-count-border-radius-sm, 7px)}.x-badge-multiple-words{padding:0 var(--x-badge-count-padding, var(--x-padding-xxs, 6px))}.x-badge-dot{z-index:auto;width:var(--x-badge-dot-size, 6px);height:var(--x-badge-dot-size, 6px);background:var(--x-badge-dot-bg, var(--x-color-error, #ff4d4f));border-radius:100%;-webkit-box-shadow:0 0 0 1px var(--x-badge-shadow-color, var(--x-color-white, #fff));box-shadow:0 0 0 1px var(--x-badge-shadow-color, var(--x-color-white, #fff));position:absolute;top:0;inset-inline-end:0;-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%);-webkit-transform-origin:100% 0%;transform-origin:100% 0%}:host(.x-badge-status){line-height:inherit;vertical-align:baseline;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}.x-badge-status-dot{position:relative;top:var(--x-badge-status-dot-top, -1px);display:inline-block;width:var(--x-badge-dot-size, 6px);height:var(--x-badge-dot-size, 6px);vertical-align:middle;border-radius:50%}.x-badge-status-success{background-color:var(--x-badge-status-success-bg, var(--x-color-success, #52c41a))}.x-badge-status-processing{position:relative;background-color:var(--x-badge-status-processing-bg, var(--x-color-primary, #1677ff))}.x-badge-status-processing::after{position:absolute;top:0;inset-inline-start:0;width:100%;height:100%;border:1px solid var(--x-badge-status-processing-bg, var(--x-color-primary, #1677ff));border-radius:50%;-webkit-animation:x-badge-status-processing 1.2s infinite ease-in-out;animation:x-badge-status-processing 1.2s infinite ease-in-out;content:""}.x-badge-status-default{background-color:var(--x-badge-status-default-bg, var(--x-color-text-placeholder, #d9d9d9))}.x-badge-status-error{background-color:var(--x-badge-status-error-bg, var(--x-color-error, #ff4d4f))}.x-badge-status-warning{background-color:var(--x-badge-status-warning-bg, var(--x-color-warning, #faad14))}.x-badge-status-text{-webkit-margin-start:var(--x-badge-status-text-margin, var(--x-spacing-xs, 8px));margin-inline-start:var(--x-badge-status-text-margin, var(--x-spacing-xs, 8px));color:var(--x-badge-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-size:var(--x-badge-font-size, var(--x-font-size-base, 14px))}.x-badge-color-pink{background:#eb2f96}.x-badge-color-red{background:#f5222d}.x-badge-color-yellow{background:#fadb14}.x-badge-color-orange{background:#fa8c16}.x-badge-color-cyan{background:#13c2c2}.x-badge-color-green{background:#52c41a}.x-badge-color-blue{background:#1677ff}.x-badge-color-purple{background:#722ed1}.x-badge-color-geekblue{background:#2f54eb}.x-badge-color-magenta{background:#eb2f96}.x-badge-color-volcano{background:#fa541c}.x-badge-color-gold{background:#faad14}.x-badge-color-lime{background:#a0d911}@-webkit-keyframes x-badge-status-processing{0%{-webkit-transform:scale(0.8);transform:scale(0.8);opacity:0.5}100%{-webkit-transform:scale(2.4);transform:scale(2.4);opacity:0}}@keyframes x-badge-status-processing{0%{-webkit-transform:scale(0.8);transform:scale(0.8);opacity:0.5}100%{-webkit-transform:scale(2.4);transform:scale(2.4);opacity:0}}`;
|
|
106
|
+
|
|
107
|
+
const PRESET_COLORS$1 = [
|
|
108
|
+
'pink', 'red', 'yellow', 'orange', 'cyan', 'green', 'blue', 'purple',
|
|
109
|
+
'geekblue', 'magenta', 'volcano', 'gold', 'lime'
|
|
110
|
+
];
|
|
111
|
+
const XBadge = class {
|
|
112
|
+
constructor(hostRef) {
|
|
113
|
+
index.registerInstance(this, hostRef);
|
|
114
|
+
}
|
|
115
|
+
get el() { return index.getElement(this); }
|
|
116
|
+
/**
|
|
117
|
+
* Number to show in badge.
|
|
118
|
+
* @example
|
|
119
|
+
* <x-badge count={3}></x-badge>
|
|
120
|
+
*/
|
|
121
|
+
count;
|
|
122
|
+
/**
|
|
123
|
+
* Whether to display a red dot instead of count.
|
|
124
|
+
* @example
|
|
125
|
+
* <x-badge dot></x-badge>
|
|
126
|
+
*/
|
|
127
|
+
dot = false;
|
|
128
|
+
/**
|
|
129
|
+
* Max count to show.
|
|
130
|
+
* @example
|
|
131
|
+
* <x-badge count={120} overflowCount={99}></x-badge>
|
|
132
|
+
*/
|
|
133
|
+
overflowCount = 99;
|
|
134
|
+
/**
|
|
135
|
+
* Whether to show badge when count is 0.
|
|
136
|
+
* @example
|
|
137
|
+
* <x-badge count={0} showZero></x-badge>
|
|
138
|
+
*/
|
|
139
|
+
showZero = false;
|
|
140
|
+
/**
|
|
141
|
+
* Set Badge as a status dot.
|
|
142
|
+
* @example
|
|
143
|
+
* <x-badge status="success" text="Done"></x-badge>
|
|
144
|
+
*/
|
|
145
|
+
status;
|
|
146
|
+
/**
|
|
147
|
+
* If status is set, text sets the display text of the status dot.
|
|
148
|
+
* @example
|
|
149
|
+
* <x-badge status="warning" text="Pending"></x-badge>
|
|
150
|
+
*/
|
|
151
|
+
text;
|
|
152
|
+
/**
|
|
153
|
+
* Customize Badge dot color (supports preset colors or custom hex/rgb).
|
|
154
|
+
* @example
|
|
155
|
+
* <x-badge color="#ff4d4f" count={1}></x-badge>
|
|
156
|
+
*/
|
|
157
|
+
color;
|
|
158
|
+
/**
|
|
159
|
+
* Set offset of the badge dot [left, top].
|
|
160
|
+
* @example
|
|
161
|
+
* <x-badge offset={[10, -2]} count={5}></x-badge>
|
|
162
|
+
*/
|
|
163
|
+
offset;
|
|
164
|
+
/**
|
|
165
|
+
* Size of the badge.
|
|
166
|
+
* @example
|
|
167
|
+
* <x-badge size="small" count={2}></x-badge>
|
|
168
|
+
*/
|
|
169
|
+
size = 'default';
|
|
170
|
+
/**
|
|
171
|
+
* Text to show when hovering over the badge.
|
|
172
|
+
* @example
|
|
173
|
+
* <x-badge badgeTitle="Notifications" count={9}></x-badge>
|
|
174
|
+
*/
|
|
175
|
+
badgeTitle;
|
|
176
|
+
/**
|
|
177
|
+
* Used to display the classNames of the badge.
|
|
178
|
+
* @example
|
|
179
|
+
* <x-badge classNames={{ root: 'my-badge' }} count={1}></x-badge>
|
|
180
|
+
*/
|
|
181
|
+
classNames;
|
|
182
|
+
/**
|
|
183
|
+
* Used to display the styles of the badge.
|
|
184
|
+
* @example
|
|
185
|
+
* <x-badge styles={{ indicator: 'background: red;' }} count={1}></x-badge>
|
|
186
|
+
*/
|
|
187
|
+
styles;
|
|
188
|
+
/**
|
|
189
|
+
* Track whether component has child content.
|
|
190
|
+
*/
|
|
191
|
+
hasChildren = false;
|
|
192
|
+
/**
|
|
193
|
+
* Initialize child detection before render.
|
|
194
|
+
* @returns void
|
|
195
|
+
* @example
|
|
196
|
+
* <x-badge count={1}><button>Inbox</button></x-badge>
|
|
197
|
+
*/
|
|
198
|
+
componentWillLoad() {
|
|
199
|
+
this.checkChildren();
|
|
200
|
+
}
|
|
201
|
+
countChanged() {
|
|
202
|
+
// Trigger re-render when count changes
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Detect whether default slot has child nodes.
|
|
206
|
+
*
|
|
207
|
+
* Flow:
|
|
208
|
+
* 1. Queries the default `<slot>`.
|
|
209
|
+
* 2. If slot exists:
|
|
210
|
+
* - Gets `assignedNodes`.
|
|
211
|
+
* - Checks if any node is an Element or non-empty Text.
|
|
212
|
+
* 3. If slot doesn't exist (yet):
|
|
213
|
+
* - Checks `el.childNodes` length.
|
|
214
|
+
* 4. Updates `hasChildren` state, which toggles wrapper mode.
|
|
215
|
+
*
|
|
216
|
+
* @returns void
|
|
217
|
+
* @example
|
|
218
|
+
* <x-badge count={1}><span>Inbox</span></x-badge>
|
|
219
|
+
*/
|
|
220
|
+
checkChildren() {
|
|
221
|
+
const slot = this.el.shadowRoot?.querySelector('slot');
|
|
222
|
+
if (slot) {
|
|
223
|
+
const assignedNodes = slot.assignedNodes({ flatten: true });
|
|
224
|
+
// Consider both element nodes and non-empty text nodes.
|
|
225
|
+
this.hasChildren = assignedNodes.some(node => node.nodeType === Node.ELEMENT_NODE ||
|
|
226
|
+
(node.nodeType === Node.TEXT_NODE && node.textContent?.trim()));
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
// Fallback when slot is not yet available.
|
|
230
|
+
this.hasChildren = this.el.childNodes.length > 0;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Check if color matches preset palette.
|
|
235
|
+
* @param color - Color to test.
|
|
236
|
+
* @returns boolean
|
|
237
|
+
* @example
|
|
238
|
+
* this.isPresetColor('red')
|
|
239
|
+
*/
|
|
240
|
+
isPresetColor(color) {
|
|
241
|
+
return PRESET_COLORS$1.includes(color);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Compute display count text based on dot/overflow rules.
|
|
245
|
+
*
|
|
246
|
+
* Flow:
|
|
247
|
+
* 1. If `dot` is true, returns null (no text).
|
|
248
|
+
* 2. If `count` is string, returns as-is.
|
|
249
|
+
* 3. If `count` is number:
|
|
250
|
+
* - Checks against `overflowCount`.
|
|
251
|
+
* - Returns `${overflowCount}+` if exceeded.
|
|
252
|
+
* - Otherwise returns count.
|
|
253
|
+
*
|
|
254
|
+
* @returns string | number | null
|
|
255
|
+
* @example
|
|
256
|
+
* <x-badge count={120} overflowCount={99}></x-badge>
|
|
257
|
+
*/
|
|
258
|
+
getDisplayCount() {
|
|
259
|
+
// Dot mode does not show any number.
|
|
260
|
+
if (this.dot) {
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
// String counts are displayed as-is.
|
|
264
|
+
if (typeof this.count === 'string') {
|
|
265
|
+
return this.count;
|
|
266
|
+
}
|
|
267
|
+
// Numeric counts respect overflowCount.
|
|
268
|
+
if (typeof this.count === 'number') {
|
|
269
|
+
if (this.count > this.overflowCount) {
|
|
270
|
+
return `${this.overflowCount}+`;
|
|
271
|
+
}
|
|
272
|
+
return this.count;
|
|
273
|
+
}
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Compute inline offset styles for indicator.
|
|
278
|
+
* @returns Record<string, string>
|
|
279
|
+
* @example
|
|
280
|
+
* <x-badge offset={[8, -4]} count={1}></x-badge>
|
|
281
|
+
*/
|
|
282
|
+
getOffsetStyle() {
|
|
283
|
+
if (!this.offset) {
|
|
284
|
+
return {};
|
|
285
|
+
}
|
|
286
|
+
const [left, top] = this.offset;
|
|
287
|
+
const leftValue = typeof left === 'number' ? `${left}px` : left;
|
|
288
|
+
const topValue = typeof top === 'number' ? `${top}px` : top;
|
|
289
|
+
return {
|
|
290
|
+
marginTop: topValue,
|
|
291
|
+
right: `calc(-100% + ${leftValue})`,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Compute custom color styles for indicator.
|
|
296
|
+
* @returns Record<string, string>
|
|
297
|
+
* @example
|
|
298
|
+
* <x-badge color="#52c41a" count={1}></x-badge>
|
|
299
|
+
*/
|
|
300
|
+
getColorStyle() {
|
|
301
|
+
if (!this.color) {
|
|
302
|
+
return {};
|
|
303
|
+
}
|
|
304
|
+
// Preset colors use CSS classes instead of inline styles.
|
|
305
|
+
if (this.isPresetColor(this.color)) {
|
|
306
|
+
return {};
|
|
307
|
+
}
|
|
308
|
+
return {
|
|
309
|
+
background: this.color,
|
|
310
|
+
'--x-badge-color': this.color,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Decide if the badge indicator should be hidden.
|
|
315
|
+
* @returns boolean
|
|
316
|
+
* @example
|
|
317
|
+
* <x-badge count={0} showZero={false}></x-badge>
|
|
318
|
+
*/
|
|
319
|
+
isHidden() {
|
|
320
|
+
const count = typeof this.count === 'number' ? this.count : null;
|
|
321
|
+
const isZero = count === 0 || count === null;
|
|
322
|
+
// Show if dot mode
|
|
323
|
+
if (this.dot) {
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
// Show if count is string (like "new")
|
|
327
|
+
if (typeof this.count === 'string') {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
// Hide if zero and showZero is false
|
|
331
|
+
if (isZero && !this.showZero) {
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Render status-style badge with dot and optional text.
|
|
338
|
+
* @returns JSX.Element
|
|
339
|
+
* @example
|
|
340
|
+
* <x-badge status="success" text="Done"></x-badge>
|
|
341
|
+
*/
|
|
342
|
+
renderStatusBadge() {
|
|
343
|
+
const dotStyle = this.getColorStyle();
|
|
344
|
+
return (index.h(index.Host, { class: {
|
|
345
|
+
'x-badge': true,
|
|
346
|
+
'x-badge-status': true,
|
|
347
|
+
[this.classNames?.root || '']: !!this.classNames?.root,
|
|
348
|
+
}, style: this.styles?.root ? { cssText: this.styles.root } : undefined }, index.h("span", { class: {
|
|
349
|
+
'x-badge-status-dot': true,
|
|
350
|
+
[`x-badge-status-${this.status}`]: !!this.status,
|
|
351
|
+
[`x-badge-color-${this.color}`]: !!this.color && this.isPresetColor(this.color),
|
|
352
|
+
[this.classNames?.indicator || '']: !!this.classNames?.indicator,
|
|
353
|
+
}, style: {
|
|
354
|
+
...dotStyle,
|
|
355
|
+
...(this.styles?.indicator ? { cssText: this.styles.indicator } : {}),
|
|
356
|
+
} }), this.text && index.h("span", { class: "x-badge-status-text" }, this.text)));
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Render badge in count/dot mode or status mode.
|
|
360
|
+
*
|
|
361
|
+
* Flow:
|
|
362
|
+
* 1. If `status` prop is present, calls `renderStatusBadge` (standalone dot with text).
|
|
363
|
+
* 2. Otherwise (Count/Dot mode):
|
|
364
|
+
* - Calculates `displayCount` and `isHidden` status.
|
|
365
|
+
* - Renders host element with classes indicating wrapper mode (`hasChildren`).
|
|
366
|
+
* - Projects slot content.
|
|
367
|
+
* - If not hidden, renders `<sup>` element for the badge:
|
|
368
|
+
* - Applies classes for dot, count, size, color.
|
|
369
|
+
* - Applies offset styles.
|
|
370
|
+
*
|
|
371
|
+
* @returns JSX.Element
|
|
372
|
+
* @example
|
|
373
|
+
* <x-badge count={5}><button>Inbox</button></x-badge>
|
|
374
|
+
*/
|
|
375
|
+
render() {
|
|
376
|
+
// Status Badge mode
|
|
377
|
+
if (this.status) {
|
|
378
|
+
return this.renderStatusBadge();
|
|
379
|
+
}
|
|
380
|
+
const displayCount = this.getDisplayCount();
|
|
381
|
+
const isHidden = this.isHidden();
|
|
382
|
+
const offsetStyle = this.getOffsetStyle();
|
|
383
|
+
const colorStyle = this.getColorStyle();
|
|
384
|
+
const titleText = this.badgeTitle ?? (typeof this.count === 'number' ? String(this.count) : undefined);
|
|
385
|
+
return (index.h(index.Host, { class: {
|
|
386
|
+
'x-badge': true,
|
|
387
|
+
'x-badge-not-a-wrapper': !this.hasChildren,
|
|
388
|
+
[this.classNames?.root || '']: !!this.classNames?.root,
|
|
389
|
+
}, style: this.styles?.root ? { cssText: this.styles.root } : undefined }, index.h("slot", null), !isHidden && (index.h("sup", { class: {
|
|
390
|
+
'x-badge-count': !this.dot,
|
|
391
|
+
'x-badge-dot': this.dot,
|
|
392
|
+
'x-badge-multiple-words': !this.dot && String(displayCount || '').length > 1,
|
|
393
|
+
'x-badge-count-sm': this.size === 'small',
|
|
394
|
+
[`x-badge-color-${this.color}`]: !!this.color && this.isPresetColor(this.color),
|
|
395
|
+
[this.classNames?.indicator || '']: !!this.classNames?.indicator,
|
|
396
|
+
}, style: {
|
|
397
|
+
...offsetStyle,
|
|
398
|
+
...colorStyle,
|
|
399
|
+
...(this.styles?.indicator ? { cssText: this.styles.indicator } : {}),
|
|
400
|
+
}, title: titleText }, displayCount))));
|
|
401
|
+
}
|
|
402
|
+
static get watchers() { return {
|
|
403
|
+
"count": [{
|
|
404
|
+
"countChanged": 0
|
|
405
|
+
}]
|
|
406
|
+
}; }
|
|
407
|
+
};
|
|
408
|
+
XBadge.style = xBadgeCss();
|
|
409
|
+
|
|
410
|
+
const xFloatButtonCss = () => `@charset "UTF-8";:root{--x-color-primary:#1677ff;--x-color-primary-rgb:22, 119, 255;--x-color-primary-contrast:#ffffff;--x-color-primary-contrast-rgb:255, 255, 255;--x-color-primary-shade:#0958d9;--x-color-primary-tint:#4096ff;--x-color-primary-bg:#e6f4ff;--x-color-primary-bg-hover:#bae0ff;--x-color-primary-border:#91caff;--x-color-primary-border-hover:#69b1ff;--x-color-primary-hover:#4096ff;--x-color-primary-active:#0958d9;--x-color-primary-text:#1677ff;--x-color-primary-text-hover:#4096ff;--x-color-primary-text-active:#0958d9;--x-color-secondary:#3dc2ff;--x-color-secondary-rgb:61, 194, 255;--x-color-secondary-contrast:#ffffff;--x-color-secondary-contrast-rgb:255, 255, 255;--x-color-secondary-shade:#36abe0;--x-color-secondary-tint:#50c8ff;--x-color-success:#52c41a;--x-color-success-rgb:82, 196, 26;--x-color-success-contrast:#ffffff;--x-color-success-contrast-rgb:255, 255, 255;--x-color-success-shade:#389e0d;--x-color-success-tint:#73d13d;--x-color-success-bg:#f6ffed;--x-color-success-bg-hover:#d9f7be;--x-color-success-border:#b7eb8f;--x-color-success-border-hover:#95de64;--x-color-success-hover:#73d13d;--x-color-success-active:#389e0d;--x-color-success-text:#52c41a;--x-color-success-text-hover:#73d13d;--x-color-success-text-active:#389e0d;--x-color-warning:#faad14;--x-color-warning-rgb:250, 173, 20;--x-color-warning-contrast:#000000;--x-color-warning-contrast-rgb:0, 0, 0;--x-color-warning-shade:#d48806;--x-color-warning-tint:#ffc53d;--x-color-warning-bg:#fffbe6;--x-color-warning-bg-hover:#fff1b8;--x-color-warning-border:#ffe58f;--x-color-warning-border-hover:#ffd666;--x-color-warning-hover:#ffc53d;--x-color-warning-active:#d48806;--x-color-warning-text:#faad14;--x-color-warning-text-hover:#ffc53d;--x-color-warning-text-active:#d48806;--x-color-danger:#ff4d4f;--x-color-danger-rgb:255, 77, 79;--x-color-danger-contrast:#ffffff;--x-color-danger-contrast-rgb:255, 255, 255;--x-color-danger-shade:#cf1322;--x-color-danger-tint:#ff7875;--x-color-error:#ff4d4f;--x-color-error-rgb:255, 77, 79;--x-color-error-bg:#fff2f0;--x-color-error-bg-hover:#ffccc7;--x-color-error-border:#ffa39e;--x-color-error-border-hover:#ff7875;--x-color-error-hover:#ff7875;--x-color-error-active:#d9363e;--x-color-error-text:#ff4d4f;--x-color-error-text-hover:#ff7875;--x-color-error-text-active:#d9363e;--x-color-info:#1677ff;--x-color-info-rgb:22, 119, 255;--x-color-info-bg:#e6f4ff;--x-color-info-bg-hover:#bae0ff;--x-color-info-border:#91caff;--x-color-info-border-hover:#69b1ff;--x-color-info-hover:#69b1ff;--x-color-info-active:#0958d9;--x-color-info-text:#1677ff;--x-color-info-text-hover:#69b1ff;--x-color-info-text-active:#0958d9;--x-color-text:rgba(0, 0, 0, 0.88);--x-color-text-secondary:rgba(0, 0, 0, 0.65);--x-color-text-tertiary:rgba(0, 0, 0, 0.45);--x-color-text-quaternary:rgba(0, 0, 0, 0.25);--x-color-text-disabled:rgba(0, 0, 0, 0.25);--x-color-text-placeholder:rgba(0, 0, 0, 0.25);--x-color-text-heading:rgba(0, 0, 0, 0.88);--x-color-text-label:rgba(0, 0, 0, 0.65);--x-color-text-description:rgba(0, 0, 0, 0.45);--x-color-text-light-solid:#ffffff;--x-color-bg-container:#ffffff;--x-color-bg-elevated:#ffffff;--x-color-bg-layout:#f5f5f5;--x-color-bg-spotlight:rgba(0, 0, 0, 0.85);--x-color-bg-mask:rgba(0, 0, 0, 0.45);--x-color-bg-base:#ffffff;--x-color-bg-container-disabled:#f5f5f5;--x-color-bg-container-loading:rgba(255, 255, 255, 0.65);--x-color-white:#ffffff;--x-color-fill:rgba(0, 0, 0, 0.15);--x-color-fill-secondary:rgba(0, 0, 0, 0.06);--x-color-fill-tertiary:rgba(0, 0, 0, 0.04);--x-color-fill-quaternary:rgba(0, 0, 0, 0.02);--x-color-border:#d9d9d9;--x-color-border-secondary:#f0f0f0;--x-color-border-bg:#ffffff;--x-color-split:rgba(5, 5, 5, 0.06);--x-color-dark:#222428;--x-color-dark-rgb:34, 36, 40;--x-color-dark-contrast:#ffffff;--x-color-dark-contrast-rgb:255, 255, 255;--x-color-dark-shade:#1e2023;--x-color-dark-tint:#383a3e;--x-color-medium:#92949c;--x-color-medium-rgb:146, 148, 156;--x-color-medium-contrast:#ffffff;--x-color-medium-contrast-rgb:255, 255, 255;--x-color-medium-shade:#808289;--x-color-medium-tint:#9d9fa6;--x-color-light:#f4f5f8;--x-color-light-rgb:244, 245, 248;--x-color-light-contrast:#000000;--x-color-light-contrast-rgb:0, 0, 0;--x-color-light-shade:#d7d8da;--x-color-light-tint:#f5f6f9;--x-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--x-font-family-code:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;--x-font-size:14px;--x-font-size-sm:12px;--x-font-size-lg:16px;--x-font-size-xl:20px;--x-font-size-heading-1:38px;--x-font-size-heading-2:30px;--x-font-size-heading-3:24px;--x-font-size-heading-4:20px;--x-font-size-heading-5:16px;--x-line-height:1.5714285714285714;--x-line-height-lg:1.5;--x-line-height-sm:1.6666666666666667;--x-line-height-heading-1:1.2105263157894737;--x-line-height-heading-2:1.2666666666666666;--x-line-height-heading-3:1.3333333333333333;--x-line-height-heading-4:1.4;--x-line-height-heading-5:1.5;--x-font-weight-normal:400;--x-font-weight-medium:500;--x-font-weight-semibold:600;--x-font-weight-strong:600;--x-font-size-base:14px;--x-font-size-xxl:24px;--x-line-height-base:1.5714285714285714;--x-spacing-xxs:4px;--x-spacing-xs:8px;--x-spacing-sm:12px;--x-spacing-md:16px;--x-spacing-lg:20px;--x-spacing-xl:24px;--x-spacing-xxl:32px;--x-spacing-xxxl:48px;--x-margin-xxs:4px;--x-margin-xs:8px;--x-margin-sm:12px;--x-margin-md:16px;--x-margin-lg:24px;--x-margin-xl:32px;--x-margin-xxl:48px;--x-padding-xxs:4px;--x-padding-xs:8px;--x-padding-sm:12px;--x-padding-md:16px;--x-padding-lg:24px;--x-padding-content-horizontal-lg:24px;--x-padding-content-vertical-lg:12px;--x-padding-content-horizontal:16px;--x-padding-content-vertical:12px;--x-padding-content-horizontal-sm:16px;--x-padding-content-vertical-sm:8px;--x-border-radius:6px;--x-border-radius-xs:2px;--x-border-radius-sm:4px;--x-border-radius-lg:8px;--x-border-radius-xl:12px;--x-border-radius-outer:4px;--x-border-radius-base:6px;--x-border-width:1px;--x-border-width-base:1px;--x-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-shadow-lg:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-box-shadow-popover-arrow:2px 2px 5px rgba(0, 0, 0, 0.05);--x-box-shadow-card:0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);--x-box-shadow-drawer-right:-6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12), -9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-left:6px 0 16px 0 rgba(0, 0, 0, 0.08), 3px 0 6px -4px rgba(0, 0, 0, 0.12), 9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-up:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-down:0 -6px 16px 0 rgba(0, 0, 0, 0.08), 0 -3px 6px -4px rgba(0, 0, 0, 0.12), 0 -9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tabs-overflow-left:inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-right:inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-top:inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-bottom:inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);--x-motion-duration-fast:0.1s;--x-motion-duration-mid:0.2s;--x-motion-duration-slow:0.3s;--x-motion-ease-in-out:cubic-bezier(0.645, 0.045, 0.355, 1);--x-motion-ease-out:cubic-bezier(0.215, 0.61, 0.355, 1);--x-motion-ease-in:cubic-bezier(0.55, 0.055, 0.675, 0.19);--x-motion-ease-out-back:cubic-bezier(0.12, 0.4, 0.29, 1.46);--x-motion-ease-in-back:cubic-bezier(0.71, -0.46, 0.88, 0.6);--x-motion-ease-in-out-circle:cubic-bezier(0.78, 0.14, 0.15, 0.86);--x-motion-ease-out-circle:cubic-bezier(0.08, 0.82, 0.17, 1);--x-motion-ease-in-circle:cubic-bezier(0.6, 0.04, 0.98, 0.34);--x-motion-ease-in-quint:cubic-bezier(0.755, 0.05, 0.855, 0.06);--x-motion-ease-out-quint:cubic-bezier(0.23, 1, 0.32, 1);--x-z-index-base:0;--x-z-index-popup-base:1000;--x-z-index-popup:1030;--x-z-index-affix:10;--x-z-index-modal:1000;--x-z-index-modal-mask:1000;--x-z-index-drawer:1000;--x-z-index-popover:1030;--x-z-index-dropdown:1050;--x-z-index-tooltip:1070;--x-z-index-notification:1080;--x-z-index-message:1090;--x-z-index-popconfirm:1060;--x-z-index-table-fixed:10;--x-opacity-loading:0.65;--x-opacity-image:1;--x-opacity-disabled:0.5;--x-control-height:32px;--x-control-height-xs:24px;--x-control-height-sm:24px;--x-control-height-lg:40px;--x-control-radio-size:16px;--x-control-checkbox-size:16px;--x-control-padding-horizontal:12px;--x-control-padding-horizontal-sm:8px;--x-control-outline-width:2px;--x-control-outline:rgba(5, 145, 255, 0.1);--x-control-item-bg-hover:rgba(0, 0, 0, 0.04);--x-control-item-bg-active:#e6f4ff;--x-control-item-bg-active-hover:#bae0ff;--x-control-item-bg-active-disabled:rgba(0, 0, 0, 0.15);--x-control-tmp-outline:rgba(0, 0, 0, 0.02);--x-color-yellow:#fadb14;--x-color-yellow-rgb:250, 219, 20;--x-font-family-base:var(--x-font-family);--x-color-link:#1677ff;--x-color-link-hover:#69b1ff;--x-color-link-active:#0958d9;--x-color-icon:rgba(0, 0, 0, 0.45);--x-color-icon-hover:rgba(0, 0, 0, 0.88);--x-color-highlight:#ff4d4f;--x-color-bg-text-hover:rgba(0, 0, 0, 0.06);--x-color-bg-text-active:rgba(0, 0, 0, 0.15);--x-screen-xs:480px;--x-screen-xs-min:480px;--x-screen-xs-max:575px;--x-screen-sm:576px;--x-screen-sm-min:576px;--x-screen-sm-max:767px;--x-screen-md:768px;--x-screen-md-min:768px;--x-screen-md-max:991px;--x-screen-lg:992px;--x-screen-lg-min:992px;--x-screen-lg-max:1199px;--x-screen-xl:1200px;--x-screen-xl-min:1200px;--x-screen-xl-max:1599px;--x-screen-xxl:1600px;--x-screen-xxl-min:1600px;--x-color-fill-content:rgba(0, 0, 0, 0.06);--x-color-fill-content-hover:rgba(0, 0, 0, 0.15);--x-color-fill-alter:rgba(0, 0, 0, 0.02);--x-scrollbar-width:12px;--x-scrollbar-track-bg:rgba(0, 0, 0, 0.04);--x-scrollbar-thumb-bg:rgba(0, 0, 0, 0.25);--x-scrollbar-thumb-bg-hover:rgba(0, 0, 0, 0.35);--x-menu-dark-bg:#001529;--x-menu-dark-item-bg:#001529;--x-menu-dark-popup-bg:#001529;--x-menu-dark-submenu-item-bg:#000c17}:host{display:block;position:fixed;z-index:var(--x-float-button-z-index, var(--x-z-index-popup, 99));right:var(--x-float-button-right, var(--x-spacing-xl, 24px));bottom:var(--x-float-button-bottom, var(--x-spacing-xl, 24px))}.x-float-btn{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;width:var(--x-float-button-size, var(--x-control-height-lg, 40px));height:var(--x-float-button-size, var(--x-control-height-lg, 40px));background-color:var(--x-float-button-bg, var(--x-color-bg-container, #ffffff));color:var(--x-float-button-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));border-radius:var(--x-float-button-border-radius, 50%);-webkit-box-shadow:var(--x-float-button-shadow, var(--x-shadow-secondary, 0 6px 16px 0 rgba(0, 0, 0, 0.08)));box-shadow:var(--x-float-button-shadow, var(--x-shadow-secondary, 0 6px 16px 0 rgba(0, 0, 0, 0.08)));border:none;cursor:pointer;padding:0;-webkit-transition:all var(--x-float-button-motion-duration, var(--x-motion-duration-fast, 0.1s));transition:all var(--x-float-button-motion-duration, var(--x-motion-duration-fast, 0.1s));text-decoration:none;outline:none}.x-float-btn:hover{background-color:var(--x-float-button-bg-hover, var(--x-color-bg-layout, #f5f5f5))}.x-float-btn.x-float-btn-primary{background-color:var(--x-float-button-primary-bg, var(--x-color-primary, #1677ff));color:var(--x-float-button-primary-color, var(--x-color-white, #ffffff))}.x-float-btn.x-float-btn-primary:hover{background-color:var(--x-float-button-primary-bg-hover, var(--x-color-primary-hover, #4096ff))}.x-float-btn.x-float-btn-square{border-radius:var(--x-float-button-border-radius-square, var(--x-border-radius-base, 6px))}.x-float-btn-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%}.x-float-btn-icon{font-size:var(--x-float-button-icon-size, 20px);display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.x-float-btn-description{font-size:var(--x-float-button-description-font-size, var(--x-font-size-sm, 12px));line-height:var(--x-float-button-description-line-height, var(--x-line-height-sm, 1.6666666667));margin-top:var(--x-float-button-description-margin-top, var(--x-spacing-xxs, 4px))}`;
|
|
411
|
+
|
|
412
|
+
const XFloatButton = class {
|
|
413
|
+
constructor(hostRef) {
|
|
414
|
+
index.registerInstance(this, hostRef);
|
|
415
|
+
this.xClick = index.createEvent(this, "xClick", 7);
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Text or other element to display in the tooltip
|
|
419
|
+
* @example
|
|
420
|
+
* <x-float-button tooltip="Help"></x-float-button>
|
|
421
|
+
*/
|
|
422
|
+
tooltip;
|
|
423
|
+
/**
|
|
424
|
+
* The type of the button
|
|
425
|
+
* @example
|
|
426
|
+
* <x-float-button type="primary"></x-float-button>
|
|
427
|
+
*/
|
|
428
|
+
type = 'default';
|
|
429
|
+
/**
|
|
430
|
+
* The shape of the button
|
|
431
|
+
* @example
|
|
432
|
+
* <x-float-button shape="square"></x-float-button>
|
|
433
|
+
*/
|
|
434
|
+
shape = 'circle';
|
|
435
|
+
/**
|
|
436
|
+
* The target of the link
|
|
437
|
+
* @example
|
|
438
|
+
* <x-float-button href="/docs"></x-float-button>
|
|
439
|
+
*/
|
|
440
|
+
href;
|
|
441
|
+
/**
|
|
442
|
+
* The target attribute of the link
|
|
443
|
+
* @example
|
|
444
|
+
* <x-float-button href="https://example.com" target="_blank"></x-float-button>
|
|
445
|
+
*/
|
|
446
|
+
target;
|
|
447
|
+
/**
|
|
448
|
+
* Description text
|
|
449
|
+
* @example
|
|
450
|
+
* <x-float-button description="Support"></x-float-button>
|
|
451
|
+
*/
|
|
452
|
+
description;
|
|
453
|
+
/**
|
|
454
|
+
* Emitted when the button is clicked
|
|
455
|
+
* @example
|
|
456
|
+
* <x-float-button onXClick={(ev) => console.log(ev.detail)}></x-float-button>
|
|
457
|
+
*/
|
|
458
|
+
xClick;
|
|
459
|
+
handleClick = (ev) => {
|
|
460
|
+
this.xClick.emit(ev);
|
|
461
|
+
};
|
|
462
|
+
/**
|
|
463
|
+
* Render float button with optional link and tooltip.
|
|
464
|
+
*
|
|
465
|
+
* Flow:
|
|
466
|
+
* 1. Determines tag type: `a` if href exists, otherwise `button`.
|
|
467
|
+
* 2. Constructs classes based on type (primary/default) and shape.
|
|
468
|
+
* 3. Renders button content:
|
|
469
|
+
* - Icon slot.
|
|
470
|
+
* - Description (if present).
|
|
471
|
+
* 4. Wraps in Host with `title` attribute for native tooltip.
|
|
472
|
+
*
|
|
473
|
+
* @returns JSX.Element
|
|
474
|
+
* @example
|
|
475
|
+
* <x-float-button tooltip="Top">
|
|
476
|
+
* <x-icon slot="icon" name="arrow_upward"></x-icon>
|
|
477
|
+
* </x-float-button>
|
|
478
|
+
*/
|
|
479
|
+
render() {
|
|
480
|
+
const { type, shape, href, target, description, tooltip } = this;
|
|
481
|
+
const classes = {
|
|
482
|
+
'x-float-btn': true,
|
|
483
|
+
[`x-float-btn-${type}`]: true,
|
|
484
|
+
[`x-float-btn-${shape}`]: true,
|
|
485
|
+
};
|
|
486
|
+
const content = (index.h("div", { key: '6578a1485b4ac4435173e705e70cf11443563681', class: "x-float-btn-body" }, index.h("div", { key: '718fe35102bed51d9444c5a9726efef149e2a4fe', class: "x-float-btn-content" }, index.h("div", { key: 'dcd91a0e83f2e973c88546525aafe2c8574c582e', class: "x-float-btn-icon" }, index.h("slot", { key: '4ea0892ea7e6135a206d4fb9fecb37ff2f73f12c', name: "icon" })), description && index.h("div", { key: '080657e737995cfd8389b350c0a0ce447594762b', class: "x-float-btn-description" }, description), index.h("slot", { key: '1bb44cab04c8d259c90bf7b52ccda9e88efb4884', name: "description" }))));
|
|
487
|
+
const Element = href ? 'a' : 'button';
|
|
488
|
+
const attrs = href ? { href, target } : { type: 'button' };
|
|
489
|
+
return (index.h(index.Host, { key: '1141e40b36259b15c3b8b57380e9d45f6a5f0bc9', title: tooltip }, index.h(Element, { key: '18f2891c388c8473db1d693a1557731bac8fbfdf', class: classes, ...attrs, onClick: this.handleClick }, content)));
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
XFloatButton.style = xFloatButtonCss();
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* FormGroup — Tracks values & validity of a group of controls
|
|
496
|
+
* Mirrors Angular's FormGroup API 100%
|
|
497
|
+
*/
|
|
498
|
+
class FormGroup extends abstractControl.AbstractControl {
|
|
499
|
+
_controls;
|
|
500
|
+
constructor(controls, validatorsOrOptions, asyncValidators) {
|
|
501
|
+
super();
|
|
502
|
+
this._controls = controls;
|
|
503
|
+
this._setParentForControls();
|
|
504
|
+
this._applyValidators(validatorsOrOptions, asyncValidators);
|
|
505
|
+
this._updateValueAndValidity({ onlySelf: true, emitEvent: false });
|
|
506
|
+
}
|
|
507
|
+
get value() {
|
|
508
|
+
return this._reduceValue();
|
|
509
|
+
}
|
|
510
|
+
get controls() {
|
|
511
|
+
return this._controls;
|
|
512
|
+
}
|
|
513
|
+
// ─── Control Management ───────────────────────────────────────
|
|
514
|
+
registerControl(name, control) {
|
|
515
|
+
if (this._controls[name])
|
|
516
|
+
return this._controls[name];
|
|
517
|
+
this._controls[name] = control;
|
|
518
|
+
control.parent = this;
|
|
519
|
+
this._updateValueAndValidity();
|
|
520
|
+
return control;
|
|
521
|
+
}
|
|
522
|
+
addControl(name, control, opts = {}) {
|
|
523
|
+
this.registerControl(name, control);
|
|
524
|
+
if (opts.emitEvent !== false) {
|
|
525
|
+
this._emitValueChange(this.value);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
removeControl(name, opts = {}) {
|
|
529
|
+
if (this._controls[name]) {
|
|
530
|
+
this._controls[name].parent = null;
|
|
531
|
+
delete this._controls[name];
|
|
532
|
+
}
|
|
533
|
+
this._updateValueAndValidity();
|
|
534
|
+
if (opts.emitEvent !== false) {
|
|
535
|
+
this._emitValueChange(this.value);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
setControl(name, control, opts = {}) {
|
|
539
|
+
if (this._controls[name]) {
|
|
540
|
+
this._controls[name].parent = null;
|
|
541
|
+
}
|
|
542
|
+
this._controls[name] = control;
|
|
543
|
+
control.parent = this;
|
|
544
|
+
this._updateValueAndValidity();
|
|
545
|
+
if (opts.emitEvent !== false) {
|
|
546
|
+
this._emitValueChange(this.value);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
contains(controlName) {
|
|
550
|
+
return controlName in this._controls && this._controls[controlName].enabled;
|
|
551
|
+
}
|
|
552
|
+
// ─── Value Operations ─────────────────────────────────────────
|
|
553
|
+
setValue(value, options = {}) {
|
|
554
|
+
this._checkAllValuesPresent(value);
|
|
555
|
+
Object.keys(value).forEach(name => {
|
|
556
|
+
this._throwIfControlMissing(name);
|
|
557
|
+
this._controls[name].setValue(value[name], {
|
|
558
|
+
onlySelf: true,
|
|
559
|
+
emitEvent: options.emitEvent
|
|
560
|
+
});
|
|
561
|
+
});
|
|
562
|
+
this._updateValueAndValidity(options);
|
|
563
|
+
if (options.emitEvent !== false) {
|
|
564
|
+
this._emitValueChange(this.value);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
patchValue(value, options = {}) {
|
|
568
|
+
Object.keys(value).forEach(name => {
|
|
569
|
+
if (this._controls[name]) {
|
|
570
|
+
this._controls[name].patchValue(value[name], {
|
|
571
|
+
onlySelf: true,
|
|
572
|
+
emitEvent: options.emitEvent
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
});
|
|
576
|
+
this._updateValueAndValidity(options);
|
|
577
|
+
if (options.emitEvent !== false) {
|
|
578
|
+
this._emitValueChange(this.value);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
reset(value, options = {}) {
|
|
582
|
+
this._forEachChild((control, name) => {
|
|
583
|
+
control.reset(value ? value[name] : undefined, { onlySelf: true, emitEvent: options.emitEvent });
|
|
584
|
+
});
|
|
585
|
+
this.markAsPristine(options);
|
|
586
|
+
this.markAsUntouched(options);
|
|
587
|
+
this._updateValueAndValidity(options);
|
|
588
|
+
}
|
|
589
|
+
getRawValue() {
|
|
590
|
+
return this._reduceChildren({}, (acc, control, name) => {
|
|
591
|
+
acc[name] = control.getRawValue();
|
|
592
|
+
return acc;
|
|
593
|
+
});
|
|
594
|
+
}
|
|
595
|
+
// ─── Internal ────────────────────────────────────────────────
|
|
596
|
+
_runValidation() {
|
|
597
|
+
if (this._status === 'DISABLED')
|
|
598
|
+
return;
|
|
599
|
+
this._status = this._computeStatus();
|
|
600
|
+
const groupErrors = this._runValidators(this.value);
|
|
601
|
+
const childErrors = this._collectChildErrors();
|
|
602
|
+
const errors = { ...(childErrors || {}), ...(groupErrors || {}) };
|
|
603
|
+
this._errors = Object.keys(errors).length ? errors : null;
|
|
604
|
+
this._status = this._calculateStatus();
|
|
605
|
+
}
|
|
606
|
+
_computeStatus() {
|
|
607
|
+
if (this._anyControlsHaveStatus('INVALID'))
|
|
608
|
+
return 'INVALID';
|
|
609
|
+
if (this._anyControlsHaveStatus('PENDING'))
|
|
610
|
+
return 'PENDING';
|
|
611
|
+
return 'VALID';
|
|
612
|
+
}
|
|
613
|
+
_collectChildErrors() {
|
|
614
|
+
return null; // group-level: child errors are surfaced via controls themselves
|
|
615
|
+
}
|
|
616
|
+
_anyControlsHaveStatus(status) {
|
|
617
|
+
return Object.values(this._controls).some((c) => c.status === status);
|
|
618
|
+
}
|
|
619
|
+
_forEachChild(fn) {
|
|
620
|
+
Object.keys(this._controls).forEach(name => fn(this._controls[name], name));
|
|
621
|
+
}
|
|
622
|
+
_anyControls(condition) {
|
|
623
|
+
return Object.values(this._controls).some((c) => condition(c));
|
|
624
|
+
}
|
|
625
|
+
_reduceValue() {
|
|
626
|
+
return this._reduceChildren({}, (acc, control, name) => {
|
|
627
|
+
if (control.enabled || this.disabled)
|
|
628
|
+
acc[name] = control.value;
|
|
629
|
+
return acc;
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
_reduceChildren(initValue, fn) {
|
|
633
|
+
let res = initValue;
|
|
634
|
+
this._forEachChild((control, name) => { res = fn(res, control, name); });
|
|
635
|
+
return res;
|
|
636
|
+
}
|
|
637
|
+
_setParentForControls() {
|
|
638
|
+
this._forEachChild((control) => { control.parent = this; });
|
|
639
|
+
}
|
|
640
|
+
_checkAllValuesPresent(value) {
|
|
641
|
+
this._forEachChild((_control, name) => {
|
|
642
|
+
if (!(name in value)) {
|
|
643
|
+
throw new Error(`Must supply a value for form control with name: '${name}'.`);
|
|
644
|
+
}
|
|
645
|
+
});
|
|
646
|
+
}
|
|
647
|
+
_throwIfControlMissing(name) {
|
|
648
|
+
if (!Object.keys(this._controls).length) {
|
|
649
|
+
throw new Error(`There are no form controls registered with this group yet.`);
|
|
650
|
+
}
|
|
651
|
+
if (!this._controls[name]) {
|
|
652
|
+
throw new Error(`Cannot find form control with name: ${name}.`);
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
const xFormCss = () => `@charset "UTF-8";:root{--x-color-primary:#1677ff;--x-color-primary-rgb:22, 119, 255;--x-color-primary-contrast:#ffffff;--x-color-primary-contrast-rgb:255, 255, 255;--x-color-primary-shade:#0958d9;--x-color-primary-tint:#4096ff;--x-color-primary-bg:#e6f4ff;--x-color-primary-bg-hover:#bae0ff;--x-color-primary-border:#91caff;--x-color-primary-border-hover:#69b1ff;--x-color-primary-hover:#4096ff;--x-color-primary-active:#0958d9;--x-color-primary-text:#1677ff;--x-color-primary-text-hover:#4096ff;--x-color-primary-text-active:#0958d9;--x-color-secondary:#3dc2ff;--x-color-secondary-rgb:61, 194, 255;--x-color-secondary-contrast:#ffffff;--x-color-secondary-contrast-rgb:255, 255, 255;--x-color-secondary-shade:#36abe0;--x-color-secondary-tint:#50c8ff;--x-color-success:#52c41a;--x-color-success-rgb:82, 196, 26;--x-color-success-contrast:#ffffff;--x-color-success-contrast-rgb:255, 255, 255;--x-color-success-shade:#389e0d;--x-color-success-tint:#73d13d;--x-color-success-bg:#f6ffed;--x-color-success-bg-hover:#d9f7be;--x-color-success-border:#b7eb8f;--x-color-success-border-hover:#95de64;--x-color-success-hover:#73d13d;--x-color-success-active:#389e0d;--x-color-success-text:#52c41a;--x-color-success-text-hover:#73d13d;--x-color-success-text-active:#389e0d;--x-color-warning:#faad14;--x-color-warning-rgb:250, 173, 20;--x-color-warning-contrast:#000000;--x-color-warning-contrast-rgb:0, 0, 0;--x-color-warning-shade:#d48806;--x-color-warning-tint:#ffc53d;--x-color-warning-bg:#fffbe6;--x-color-warning-bg-hover:#fff1b8;--x-color-warning-border:#ffe58f;--x-color-warning-border-hover:#ffd666;--x-color-warning-hover:#ffc53d;--x-color-warning-active:#d48806;--x-color-warning-text:#faad14;--x-color-warning-text-hover:#ffc53d;--x-color-warning-text-active:#d48806;--x-color-danger:#ff4d4f;--x-color-danger-rgb:255, 77, 79;--x-color-danger-contrast:#ffffff;--x-color-danger-contrast-rgb:255, 255, 255;--x-color-danger-shade:#cf1322;--x-color-danger-tint:#ff7875;--x-color-error:#ff4d4f;--x-color-error-rgb:255, 77, 79;--x-color-error-bg:#fff2f0;--x-color-error-bg-hover:#ffccc7;--x-color-error-border:#ffa39e;--x-color-error-border-hover:#ff7875;--x-color-error-hover:#ff7875;--x-color-error-active:#d9363e;--x-color-error-text:#ff4d4f;--x-color-error-text-hover:#ff7875;--x-color-error-text-active:#d9363e;--x-color-info:#1677ff;--x-color-info-rgb:22, 119, 255;--x-color-info-bg:#e6f4ff;--x-color-info-bg-hover:#bae0ff;--x-color-info-border:#91caff;--x-color-info-border-hover:#69b1ff;--x-color-info-hover:#69b1ff;--x-color-info-active:#0958d9;--x-color-info-text:#1677ff;--x-color-info-text-hover:#69b1ff;--x-color-info-text-active:#0958d9;--x-color-text:rgba(0, 0, 0, 0.88);--x-color-text-secondary:rgba(0, 0, 0, 0.65);--x-color-text-tertiary:rgba(0, 0, 0, 0.45);--x-color-text-quaternary:rgba(0, 0, 0, 0.25);--x-color-text-disabled:rgba(0, 0, 0, 0.25);--x-color-text-placeholder:rgba(0, 0, 0, 0.25);--x-color-text-heading:rgba(0, 0, 0, 0.88);--x-color-text-label:rgba(0, 0, 0, 0.65);--x-color-text-description:rgba(0, 0, 0, 0.45);--x-color-text-light-solid:#ffffff;--x-color-bg-container:#ffffff;--x-color-bg-elevated:#ffffff;--x-color-bg-layout:#f5f5f5;--x-color-bg-spotlight:rgba(0, 0, 0, 0.85);--x-color-bg-mask:rgba(0, 0, 0, 0.45);--x-color-bg-base:#ffffff;--x-color-bg-container-disabled:#f5f5f5;--x-color-bg-container-loading:rgba(255, 255, 255, 0.65);--x-color-white:#ffffff;--x-color-fill:rgba(0, 0, 0, 0.15);--x-color-fill-secondary:rgba(0, 0, 0, 0.06);--x-color-fill-tertiary:rgba(0, 0, 0, 0.04);--x-color-fill-quaternary:rgba(0, 0, 0, 0.02);--x-color-border:#d9d9d9;--x-color-border-secondary:#f0f0f0;--x-color-border-bg:#ffffff;--x-color-split:rgba(5, 5, 5, 0.06);--x-color-dark:#222428;--x-color-dark-rgb:34, 36, 40;--x-color-dark-contrast:#ffffff;--x-color-dark-contrast-rgb:255, 255, 255;--x-color-dark-shade:#1e2023;--x-color-dark-tint:#383a3e;--x-color-medium:#92949c;--x-color-medium-rgb:146, 148, 156;--x-color-medium-contrast:#ffffff;--x-color-medium-contrast-rgb:255, 255, 255;--x-color-medium-shade:#808289;--x-color-medium-tint:#9d9fa6;--x-color-light:#f4f5f8;--x-color-light-rgb:244, 245, 248;--x-color-light-contrast:#000000;--x-color-light-contrast-rgb:0, 0, 0;--x-color-light-shade:#d7d8da;--x-color-light-tint:#f5f6f9;--x-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--x-font-family-code:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;--x-font-size:14px;--x-font-size-sm:12px;--x-font-size-lg:16px;--x-font-size-xl:20px;--x-font-size-heading-1:38px;--x-font-size-heading-2:30px;--x-font-size-heading-3:24px;--x-font-size-heading-4:20px;--x-font-size-heading-5:16px;--x-line-height:1.5714285714285714;--x-line-height-lg:1.5;--x-line-height-sm:1.6666666666666667;--x-line-height-heading-1:1.2105263157894737;--x-line-height-heading-2:1.2666666666666666;--x-line-height-heading-3:1.3333333333333333;--x-line-height-heading-4:1.4;--x-line-height-heading-5:1.5;--x-font-weight-normal:400;--x-font-weight-medium:500;--x-font-weight-semibold:600;--x-font-weight-strong:600;--x-font-size-base:14px;--x-font-size-xxl:24px;--x-line-height-base:1.5714285714285714;--x-spacing-xxs:4px;--x-spacing-xs:8px;--x-spacing-sm:12px;--x-spacing-md:16px;--x-spacing-lg:20px;--x-spacing-xl:24px;--x-spacing-xxl:32px;--x-spacing-xxxl:48px;--x-margin-xxs:4px;--x-margin-xs:8px;--x-margin-sm:12px;--x-margin-md:16px;--x-margin-lg:24px;--x-margin-xl:32px;--x-margin-xxl:48px;--x-padding-xxs:4px;--x-padding-xs:8px;--x-padding-sm:12px;--x-padding-md:16px;--x-padding-lg:24px;--x-padding-content-horizontal-lg:24px;--x-padding-content-vertical-lg:12px;--x-padding-content-horizontal:16px;--x-padding-content-vertical:12px;--x-padding-content-horizontal-sm:16px;--x-padding-content-vertical-sm:8px;--x-border-radius:6px;--x-border-radius-xs:2px;--x-border-radius-sm:4px;--x-border-radius-lg:8px;--x-border-radius-xl:12px;--x-border-radius-outer:4px;--x-border-radius-base:6px;--x-border-width:1px;--x-border-width-base:1px;--x-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-shadow-lg:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-box-shadow-popover-arrow:2px 2px 5px rgba(0, 0, 0, 0.05);--x-box-shadow-card:0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);--x-box-shadow-drawer-right:-6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12), -9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-left:6px 0 16px 0 rgba(0, 0, 0, 0.08), 3px 0 6px -4px rgba(0, 0, 0, 0.12), 9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-up:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-down:0 -6px 16px 0 rgba(0, 0, 0, 0.08), 0 -3px 6px -4px rgba(0, 0, 0, 0.12), 0 -9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tabs-overflow-left:inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-right:inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-top:inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-bottom:inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);--x-motion-duration-fast:0.1s;--x-motion-duration-mid:0.2s;--x-motion-duration-slow:0.3s;--x-motion-ease-in-out:cubic-bezier(0.645, 0.045, 0.355, 1);--x-motion-ease-out:cubic-bezier(0.215, 0.61, 0.355, 1);--x-motion-ease-in:cubic-bezier(0.55, 0.055, 0.675, 0.19);--x-motion-ease-out-back:cubic-bezier(0.12, 0.4, 0.29, 1.46);--x-motion-ease-in-back:cubic-bezier(0.71, -0.46, 0.88, 0.6);--x-motion-ease-in-out-circle:cubic-bezier(0.78, 0.14, 0.15, 0.86);--x-motion-ease-out-circle:cubic-bezier(0.08, 0.82, 0.17, 1);--x-motion-ease-in-circle:cubic-bezier(0.6, 0.04, 0.98, 0.34);--x-motion-ease-in-quint:cubic-bezier(0.755, 0.05, 0.855, 0.06);--x-motion-ease-out-quint:cubic-bezier(0.23, 1, 0.32, 1);--x-z-index-base:0;--x-z-index-popup-base:1000;--x-z-index-popup:1030;--x-z-index-affix:10;--x-z-index-modal:1000;--x-z-index-modal-mask:1000;--x-z-index-drawer:1000;--x-z-index-popover:1030;--x-z-index-dropdown:1050;--x-z-index-tooltip:1070;--x-z-index-notification:1080;--x-z-index-message:1090;--x-z-index-popconfirm:1060;--x-z-index-table-fixed:10;--x-opacity-loading:0.65;--x-opacity-image:1;--x-opacity-disabled:0.5;--x-control-height:32px;--x-control-height-xs:24px;--x-control-height-sm:24px;--x-control-height-lg:40px;--x-control-radio-size:16px;--x-control-checkbox-size:16px;--x-control-padding-horizontal:12px;--x-control-padding-horizontal-sm:8px;--x-control-outline-width:2px;--x-control-outline:rgba(5, 145, 255, 0.1);--x-control-item-bg-hover:rgba(0, 0, 0, 0.04);--x-control-item-bg-active:#e6f4ff;--x-control-item-bg-active-hover:#bae0ff;--x-control-item-bg-active-disabled:rgba(0, 0, 0, 0.15);--x-control-tmp-outline:rgba(0, 0, 0, 0.02);--x-color-yellow:#fadb14;--x-color-yellow-rgb:250, 219, 20;--x-font-family-base:var(--x-font-family);--x-color-link:#1677ff;--x-color-link-hover:#69b1ff;--x-color-link-active:#0958d9;--x-color-icon:rgba(0, 0, 0, 0.45);--x-color-icon-hover:rgba(0, 0, 0, 0.88);--x-color-highlight:#ff4d4f;--x-color-bg-text-hover:rgba(0, 0, 0, 0.06);--x-color-bg-text-active:rgba(0, 0, 0, 0.15);--x-screen-xs:480px;--x-screen-xs-min:480px;--x-screen-xs-max:575px;--x-screen-sm:576px;--x-screen-sm-min:576px;--x-screen-sm-max:767px;--x-screen-md:768px;--x-screen-md-min:768px;--x-screen-md-max:991px;--x-screen-lg:992px;--x-screen-lg-min:992px;--x-screen-lg-max:1199px;--x-screen-xl:1200px;--x-screen-xl-min:1200px;--x-screen-xl-max:1599px;--x-screen-xxl:1600px;--x-screen-xxl-min:1600px;--x-color-fill-content:rgba(0, 0, 0, 0.06);--x-color-fill-content-hover:rgba(0, 0, 0, 0.15);--x-color-fill-alter:rgba(0, 0, 0, 0.02);--x-scrollbar-width:12px;--x-scrollbar-track-bg:rgba(0, 0, 0, 0.04);--x-scrollbar-thumb-bg:rgba(0, 0, 0, 0.25);--x-scrollbar-thumb-bg-hover:rgba(0, 0, 0, 0.35);--x-menu-dark-bg:#001529;--x-menu-dark-item-bg:#001529;--x-menu-dark-popup-bg:#001529;--x-menu-dark-submenu-item-bg:#000c17}:host{display:block;color:var(--x-form-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-size:var(--x-form-font-size, var(--x-font-size, 14px));font-family:var(--x-form-font-family, var(--x-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif));font-variant:tabular-nums;line-height:var(--x-form-line-height, var(--x-line-height, 1.5715));-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.x-form{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:var(--x-form-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-size:var(--x-form-font-size, var(--x-font-size, 14px));font-variant:tabular-nums;line-height:var(--x-form-line-height, var(--x-line-height, 1.5715));list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.x-form.x-form-inline{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.x-form.x-form-inline ::slotted(x-form-item){-ms-flex:none;flex:none;margin-right:var(--x-form-inline-item-margin-right, var(--x-spacing-md, 16px));margin-bottom:0}.x-form.x-form-hide-required-mark ::slotted(x-form-item) .x-form-item-required::before{display:none !important}.x-form.x-form-hide-required-mark .x-form-item-required::before{display:none !important}`;
|
|
658
|
+
|
|
659
|
+
const XForm = class {
|
|
660
|
+
constructor(hostRef) {
|
|
661
|
+
index.registerInstance(this, hostRef);
|
|
662
|
+
this.xFinish = index.createEvent(this, "xFinish", 7);
|
|
663
|
+
this.xFinishFailed = index.createEvent(this, "xFinishFailed", 7);
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Form layout
|
|
667
|
+
* @example
|
|
668
|
+
* <x-form layout="vertical"></x-form>
|
|
669
|
+
*/
|
|
670
|
+
layout = 'horizontal';
|
|
671
|
+
/**
|
|
672
|
+
* The name of the form
|
|
673
|
+
* @example
|
|
674
|
+
* <x-form name="profile"></x-form>
|
|
675
|
+
*/
|
|
676
|
+
name;
|
|
677
|
+
/**
|
|
678
|
+
* Whether to show colon after label
|
|
679
|
+
* @example
|
|
680
|
+
* <x-form colon={false}></x-form>
|
|
681
|
+
*/
|
|
682
|
+
colon = true;
|
|
683
|
+
/**
|
|
684
|
+
* Form size
|
|
685
|
+
* @example
|
|
686
|
+
* <x-form size="small"></x-form>
|
|
687
|
+
*/
|
|
688
|
+
size = 'middle';
|
|
689
|
+
/**
|
|
690
|
+
* Form instance
|
|
691
|
+
*/
|
|
692
|
+
form;
|
|
693
|
+
/**
|
|
694
|
+
* Initial values of form
|
|
695
|
+
*/
|
|
696
|
+
initialValues;
|
|
697
|
+
/**
|
|
698
|
+
* Hide required mark of all form items
|
|
699
|
+
*/
|
|
700
|
+
hideRequiredMark = false;
|
|
701
|
+
/**
|
|
702
|
+
* Trigger after submitting the form and verifying data successfully
|
|
703
|
+
*/
|
|
704
|
+
xFinish;
|
|
705
|
+
/**
|
|
706
|
+
* Trigger after submitting the form and verifying data failed
|
|
707
|
+
*/
|
|
708
|
+
xFinishFailed;
|
|
709
|
+
/**
|
|
710
|
+
* Submit the form
|
|
711
|
+
*/
|
|
712
|
+
async submit() {
|
|
713
|
+
if (this.form) {
|
|
714
|
+
this.form.markAllAsTouched();
|
|
715
|
+
if (this.form.valid) {
|
|
716
|
+
this.xFinish.emit(this.form.value);
|
|
717
|
+
}
|
|
718
|
+
else {
|
|
719
|
+
this.xFinishFailed.emit({
|
|
720
|
+
values: this.form.value,
|
|
721
|
+
errorFields: this.getErrorFields(),
|
|
722
|
+
outOfDate: false,
|
|
723
|
+
});
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
getErrorFields() {
|
|
728
|
+
if (!this.form)
|
|
729
|
+
return [];
|
|
730
|
+
const errorFields = [];
|
|
731
|
+
const controls = this.form.controls;
|
|
732
|
+
for (const name in controls) {
|
|
733
|
+
if (controls[name].invalid) {
|
|
734
|
+
errorFields.push({
|
|
735
|
+
name: [name],
|
|
736
|
+
errors: Object.values(controls[name].errors || {}),
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
return errorFields;
|
|
741
|
+
}
|
|
742
|
+
handleSubmit = (e) => {
|
|
743
|
+
e.preventDefault();
|
|
744
|
+
this.submit();
|
|
745
|
+
};
|
|
746
|
+
handleInitialValuesChange(newValue) {
|
|
747
|
+
if (this.form && newValue) {
|
|
748
|
+
this.form.patchValue(newValue, { emitEvent: true });
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
componentWillLoad() {
|
|
752
|
+
if (!this.form) {
|
|
753
|
+
this.form = new FormGroup({});
|
|
754
|
+
}
|
|
755
|
+
this.handleInitialValuesChange(this.initialValues);
|
|
756
|
+
}
|
|
757
|
+
render() {
|
|
758
|
+
return (index.h(index.Host, { key: 'ebb7831eae382b4924a330a515ce6fbcd5740a5e', class: {
|
|
759
|
+
'x-form': true,
|
|
760
|
+
[`x-form-${this.layout}`]: true,
|
|
761
|
+
[`x-form-${this.size}`]: true,
|
|
762
|
+
'x-form-hide-required-mark': this.hideRequiredMark,
|
|
763
|
+
} }, index.h("form", { key: 'fdce9f05232a5f9323bd10264d078cc6c6f25bcf', name: this.name, onSubmit: this.handleSubmit }, index.h("slot", { key: '12fbc506ce06538757fa6e51846108ddb886235a' }))));
|
|
764
|
+
}
|
|
765
|
+
static get watchers() { return {
|
|
766
|
+
"initialValues": [{
|
|
767
|
+
"handleInitialValuesChange": 0
|
|
768
|
+
}]
|
|
769
|
+
}; }
|
|
770
|
+
};
|
|
771
|
+
XForm.style = xFormCss();
|
|
772
|
+
|
|
773
|
+
const xMenuCss = () => `@charset "UTF-8";:host{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;color:var(--x-menu-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-size:var(--x-menu-font-size, var(--x-font-size-base, 14px));font-family:var(--x-menu-font-family, var(--x-font-family-base, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif));line-height:var(--x-menu-line-height, var(--x-line-height-base, 1.5714285714));list-style:none;background:var(--x-menu-bg, var(--x-color-bg-container, #ffffff));outline:none;-webkit-transition:background var(--x-menu-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1))), width var(--x-menu-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1)));transition:background var(--x-menu-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1))), width var(--x-menu-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1)))}.x-menu-list{margin:0;padding:var(--x-menu-item-margin-block, var(--x-spacing-xxs, 4px)) 0;list-style:none;background:inherit;display:block}:host(.x-menu-horizontal){line-height:var(--x-menu-horizontal-line-height, 46px);border-bottom:var(--x-menu-border-width, var(--x-border-width-base, 1px)) solid var(--x-menu-border-color, var(--x-color-split, rgba(5, 5, 5, 0.06)))}:host(.x-menu-horizontal) .x-menu-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:0}:host(.x-menu-vertical){-webkit-border-end:var(--x-menu-border-width, var(--x-border-width-base, 1px)) solid var(--x-menu-border-color, var(--x-color-split, rgba(5, 5, 5, 0.06)));border-inline-end:var(--x-menu-border-width, var(--x-border-width-base, 1px)) solid var(--x-menu-border-color, var(--x-color-split, rgba(5, 5, 5, 0.06)))}:host(.x-menu-inline){-webkit-border-end:var(--x-menu-border-width, var(--x-border-width-base, 1px)) solid var(--x-menu-border-color, var(--x-color-split, rgba(5, 5, 5, 0.06)));border-inline-end:var(--x-menu-border-width, var(--x-border-width-base, 1px)) solid var(--x-menu-border-color, var(--x-color-split, rgba(5, 5, 5, 0.06)))}:host(.x-menu-inline-collapsed){width:var(--x-menu-collapsed-width, 80px)}:host(.x-menu-inline-collapsed) .x-menu-list{padding:var(--x-menu-item-margin-block, var(--x-spacing-xxs, 4px)) 0}:host(.x-menu-light){background:var(--x-menu-bg, var(--x-color-bg-container, #ffffff));color:var(--x-menu-color, var(--x-color-text, rgba(0, 0, 0, 0.88)))}:host(.x-menu-dark){background:var(--x-menu-dark-bg, var(--x-menu-dark-bg, #001529));color:var(--x-menu-dark-color, rgba(255, 255, 255, 0.65))}:host(.x-menu-dark) .x-menu-list{background:var(--x-menu-dark-bg, var(--x-menu-dark-bg, #001529))}:host([borderless]){border:none !important}`;
|
|
774
|
+
|
|
775
|
+
const XMenu = class {
|
|
776
|
+
constructor(hostRef) {
|
|
777
|
+
index.registerInstance(this, hostRef);
|
|
778
|
+
this.xSelect = index.createEvent(this, "xSelect", 7);
|
|
779
|
+
this.xDeselect = index.createEvent(this, "xDeselect", 7);
|
|
780
|
+
this.xClick = index.createEvent(this, "xClick", 7);
|
|
781
|
+
this.xOpenChange = index.createEvent(this, "xOpenChange", 7);
|
|
782
|
+
}
|
|
783
|
+
get el() { return index.getElement(this); }
|
|
784
|
+
// ========================================
|
|
785
|
+
// PROPS
|
|
786
|
+
// ========================================
|
|
787
|
+
/**
|
|
788
|
+
* Type of menu: vertical, horizontal, or inline
|
|
789
|
+
* @example
|
|
790
|
+
* <x-menu mode="horizontal"></x-menu>
|
|
791
|
+
*/
|
|
792
|
+
mode = 'vertical';
|
|
793
|
+
/**
|
|
794
|
+
* Color theme of the menu
|
|
795
|
+
* @example
|
|
796
|
+
* <x-menu theme="dark"></x-menu>
|
|
797
|
+
*/
|
|
798
|
+
theme = 'light';
|
|
799
|
+
/**
|
|
800
|
+
* Specifies the collapsed status when menu is inline mode
|
|
801
|
+
* @example
|
|
802
|
+
* <x-menu inlineCollapsed></x-menu>
|
|
803
|
+
*/
|
|
804
|
+
inlineCollapsed = false;
|
|
805
|
+
/**
|
|
806
|
+
* Indent (in pixels) of inline menu items on each level
|
|
807
|
+
* @example
|
|
808
|
+
* <x-menu inlineIndent={32}></x-menu>
|
|
809
|
+
*/
|
|
810
|
+
inlineIndent = 24;
|
|
811
|
+
/**
|
|
812
|
+
* Array with the keys of default selected menu items
|
|
813
|
+
* @example
|
|
814
|
+
* <x-menu defaultSelectedKeys={['home']}></x-menu>
|
|
815
|
+
*/
|
|
816
|
+
defaultSelectedKeys = [];
|
|
817
|
+
/**
|
|
818
|
+
* Array with the keys of currently selected menu items (controlled)
|
|
819
|
+
* @example
|
|
820
|
+
* <x-menu selectedKeys={['settings']}></x-menu>
|
|
821
|
+
*/
|
|
822
|
+
selectedKeys;
|
|
823
|
+
/**
|
|
824
|
+
* Array with the keys of default opened sub-menus
|
|
825
|
+
* @example
|
|
826
|
+
* <x-menu defaultOpenKeys={['sub-1']}></x-menu>
|
|
827
|
+
*/
|
|
828
|
+
defaultOpenKeys = [];
|
|
829
|
+
/**
|
|
830
|
+
* Array with the keys of currently opened sub-menus (controlled)
|
|
831
|
+
* @example
|
|
832
|
+
* <x-menu openKeys={['sub-1']}></x-menu>
|
|
833
|
+
*/
|
|
834
|
+
openKeys;
|
|
835
|
+
/**
|
|
836
|
+
* Allows selection of multiple items
|
|
837
|
+
* @example
|
|
838
|
+
* <x-menu multiple></x-menu>
|
|
839
|
+
*/
|
|
840
|
+
multiple = false;
|
|
841
|
+
/**
|
|
842
|
+
* Allows selecting menu items
|
|
843
|
+
* @example
|
|
844
|
+
* <x-menu selectable={false}></x-menu>
|
|
845
|
+
*/
|
|
846
|
+
selectable = true;
|
|
847
|
+
/**
|
|
848
|
+
* Which action can trigger submenu open/close
|
|
849
|
+
* @example
|
|
850
|
+
* <x-menu triggerSubMenuAction="click"></x-menu>
|
|
851
|
+
*/
|
|
852
|
+
triggerSubMenuAction = 'hover';
|
|
853
|
+
/**
|
|
854
|
+
* Delay time to show submenu when mouse enters (in seconds)
|
|
855
|
+
* @example
|
|
856
|
+
* <x-menu subMenuOpenDelay={0.2}></x-menu>
|
|
857
|
+
*/
|
|
858
|
+
subMenuOpenDelay = 0;
|
|
859
|
+
/**
|
|
860
|
+
* Delay time to hide submenu when mouse leaves (in seconds)
|
|
861
|
+
* @example
|
|
862
|
+
* <x-menu subMenuCloseDelay={0.2}></x-menu>
|
|
863
|
+
*/
|
|
864
|
+
subMenuCloseDelay = 0.1;
|
|
865
|
+
// ========================================
|
|
866
|
+
// STATE
|
|
867
|
+
// ========================================
|
|
868
|
+
internalSelectedKeys = [];
|
|
869
|
+
internalOpenKeys = [];
|
|
870
|
+
// ========================================
|
|
871
|
+
// EVENTS
|
|
872
|
+
// ========================================
|
|
873
|
+
/**
|
|
874
|
+
* Called when a menu item is selected
|
|
875
|
+
* @example
|
|
876
|
+
* <x-menu onXSelect={(ev) => console.log(ev.detail)}></x-menu>
|
|
877
|
+
*/
|
|
878
|
+
xSelect;
|
|
879
|
+
/**
|
|
880
|
+
* Called when a menu item is deselected (multiple mode only)
|
|
881
|
+
* @example
|
|
882
|
+
* <x-menu onXDeselect={(ev) => console.log(ev.detail)}></x-menu>
|
|
883
|
+
*/
|
|
884
|
+
xDeselect;
|
|
885
|
+
/**
|
|
886
|
+
* Called when a menu item is clicked
|
|
887
|
+
* @example
|
|
888
|
+
* <x-menu onXClick={(ev) => console.log(ev.detail)}></x-menu>
|
|
889
|
+
*/
|
|
890
|
+
xClick;
|
|
891
|
+
/**
|
|
892
|
+
* Called when sub-menus are opened or closed
|
|
893
|
+
* @example
|
|
894
|
+
* <x-menu onXOpenChange={(ev) => console.log(ev.detail)}></x-menu>
|
|
895
|
+
*/
|
|
896
|
+
xOpenChange;
|
|
897
|
+
// ========================================
|
|
898
|
+
// LIFECYCLE
|
|
899
|
+
// ========================================
|
|
900
|
+
componentWillLoad() {
|
|
901
|
+
// Initialize internal state from default props
|
|
902
|
+
this.internalSelectedKeys = this.selectedKeys ?? [...this.defaultSelectedKeys];
|
|
903
|
+
this.internalOpenKeys = this.openKeys ?? [...this.defaultOpenKeys];
|
|
904
|
+
}
|
|
905
|
+
componentDidLoad() {
|
|
906
|
+
this.syncChildrenProps();
|
|
907
|
+
}
|
|
908
|
+
componentDidUpdate() {
|
|
909
|
+
this.syncChildrenProps();
|
|
910
|
+
}
|
|
911
|
+
// ========================================
|
|
912
|
+
// WATCHERS
|
|
913
|
+
// ========================================
|
|
914
|
+
handleSelectedKeysChange(newValue) {
|
|
915
|
+
if (newValue !== undefined) {
|
|
916
|
+
this.internalSelectedKeys = [...newValue];
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
handleOpenKeysChange(newValue) {
|
|
920
|
+
if (newValue !== undefined) {
|
|
921
|
+
this.internalOpenKeys = [...newValue];
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
handlePropsChange() {
|
|
925
|
+
this.syncChildrenProps();
|
|
926
|
+
}
|
|
927
|
+
// ========================================
|
|
928
|
+
// LISTENERS
|
|
929
|
+
// ========================================
|
|
930
|
+
handleItemClick(ev) {
|
|
931
|
+
ev.stopPropagation();
|
|
932
|
+
const { key, keyPath, domEvent } = ev.detail;
|
|
933
|
+
// Emit click event
|
|
934
|
+
this.xClick.emit({ key, keyPath, domEvent });
|
|
935
|
+
if (!this.selectable)
|
|
936
|
+
return;
|
|
937
|
+
const currentSelected = this.getSelectedKeys();
|
|
938
|
+
const isSelected = currentSelected.includes(key);
|
|
939
|
+
if (this.multiple) {
|
|
940
|
+
// Multiple selection mode
|
|
941
|
+
// Flow:
|
|
942
|
+
// 1. If already selected, remove from list (deselect).
|
|
943
|
+
// 2. If not selected, add to list (select).
|
|
944
|
+
// 3. Emit appropriate event (xSelect/xDeselect).
|
|
945
|
+
if (isSelected) {
|
|
946
|
+
// Deselect
|
|
947
|
+
const newSelected = currentSelected.filter(k => k !== key);
|
|
948
|
+
this.updateSelectedKeys(newSelected);
|
|
949
|
+
this.xDeselect.emit({ key, keyPath, selectedKeys: newSelected, domEvent });
|
|
950
|
+
}
|
|
951
|
+
else {
|
|
952
|
+
// Select
|
|
953
|
+
const newSelected = [...currentSelected, key];
|
|
954
|
+
this.updateSelectedKeys(newSelected);
|
|
955
|
+
this.xSelect.emit({ key, keyPath, selectedKeys: newSelected, domEvent });
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
else {
|
|
959
|
+
// Single selection mode
|
|
960
|
+
// Flow:
|
|
961
|
+
// 1. If not selected, replace current selection with new key.
|
|
962
|
+
// 2. Emit xSelect.
|
|
963
|
+
if (!isSelected) {
|
|
964
|
+
this.updateSelectedKeys([key]);
|
|
965
|
+
this.xSelect.emit({ key, keyPath, selectedKeys: [key], domEvent });
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
/**
|
|
970
|
+
* Listens for submenu toggle events.
|
|
971
|
+
* Updates the open keys state and emits change event.
|
|
972
|
+
*
|
|
973
|
+
* Flow:
|
|
974
|
+
* 1. Stops event propagation.
|
|
975
|
+
* 2. Retrieves the key and target open state from the event detail.
|
|
976
|
+
* 3. Updates the list of open keys:
|
|
977
|
+
* - If opening: Appends the key to the list.
|
|
978
|
+
* - If closing: Filters the key out of the list.
|
|
979
|
+
* 4. Updates internal state and emits `xOpenChange`.
|
|
980
|
+
*
|
|
981
|
+
* @param {CustomEvent<SubmenuToggleDetail>} ev - The toggle event.
|
|
982
|
+
*/
|
|
983
|
+
handleSubmenuToggle(ev) {
|
|
984
|
+
ev.stopPropagation();
|
|
985
|
+
const { key, open } = ev.detail;
|
|
986
|
+
const currentOpen = this.getOpenKeys();
|
|
987
|
+
let newOpenKeys;
|
|
988
|
+
if (open) {
|
|
989
|
+
newOpenKeys = [...currentOpen, key];
|
|
990
|
+
}
|
|
991
|
+
else {
|
|
992
|
+
newOpenKeys = currentOpen.filter(k => k !== key);
|
|
993
|
+
}
|
|
994
|
+
this.updateOpenKeys(newOpenKeys);
|
|
995
|
+
this.xOpenChange.emit({ openKeys: newOpenKeys });
|
|
996
|
+
}
|
|
997
|
+
// ========================================
|
|
998
|
+
// PRIVATE METHODS
|
|
999
|
+
// ========================================
|
|
1000
|
+
getSelectedKeys() {
|
|
1001
|
+
return this.selectedKeys ?? this.internalSelectedKeys;
|
|
1002
|
+
}
|
|
1003
|
+
getOpenKeys() {
|
|
1004
|
+
return this.openKeys ?? this.internalOpenKeys;
|
|
1005
|
+
}
|
|
1006
|
+
updateSelectedKeys(keys) {
|
|
1007
|
+
if (this.selectedKeys === undefined) {
|
|
1008
|
+
// Uncontrolled mode
|
|
1009
|
+
this.internalSelectedKeys = keys;
|
|
1010
|
+
}
|
|
1011
|
+
// In controlled mode, parent should update via prop
|
|
1012
|
+
}
|
|
1013
|
+
updateOpenKeys(keys) {
|
|
1014
|
+
if (this.openKeys === undefined) {
|
|
1015
|
+
// Uncontrolled mode
|
|
1016
|
+
this.internalOpenKeys = keys;
|
|
1017
|
+
}
|
|
1018
|
+
// In controlled mode, parent should update via prop
|
|
1019
|
+
}
|
|
1020
|
+
syncChildrenProps() {
|
|
1021
|
+
const selectedKeys = this.getSelectedKeys();
|
|
1022
|
+
const openKeys = this.getOpenKeys();
|
|
1023
|
+
const effectiveMode = this.inlineCollapsed && this.mode === 'inline' ? 'vertical' : this.mode;
|
|
1024
|
+
// Sync props to direct children
|
|
1025
|
+
// Flow:
|
|
1026
|
+
// 1. Iterates over assigned elements in slot.
|
|
1027
|
+
// 2. Sets internal props (_menuMode, _menuTheme, _selected, etc.) on items/submenus.
|
|
1028
|
+
// 3. This ensures children react to parent state changes (like collapse/theme).
|
|
1029
|
+
const syncElement = (element, level = 0) => {
|
|
1030
|
+
const el = element;
|
|
1031
|
+
const tagName = element.tagName.toLowerCase();
|
|
1032
|
+
if (tagName === 'x-menu-item') {
|
|
1033
|
+
el._menuMode = effectiveMode;
|
|
1034
|
+
el._menuTheme = this.theme;
|
|
1035
|
+
el._inlineCollapsed = this.inlineCollapsed;
|
|
1036
|
+
el._level = level;
|
|
1037
|
+
el._inlineIndent = this.inlineIndent;
|
|
1038
|
+
el._selected = selectedKeys.includes(el.itemKey);
|
|
1039
|
+
}
|
|
1040
|
+
else if (tagName === 'x-menu-submenu') {
|
|
1041
|
+
el._menuMode = effectiveMode;
|
|
1042
|
+
el._menuTheme = this.theme;
|
|
1043
|
+
el._inlineCollapsed = this.inlineCollapsed;
|
|
1044
|
+
el._level = level;
|
|
1045
|
+
el._inlineIndent = this.inlineIndent;
|
|
1046
|
+
el._open = openKeys.includes(el.itemKey);
|
|
1047
|
+
el._triggerSubMenuAction = this.triggerSubMenuAction;
|
|
1048
|
+
el._subMenuOpenDelay = this.subMenuOpenDelay;
|
|
1049
|
+
el._subMenuCloseDelay = this.subMenuCloseDelay;
|
|
1050
|
+
el._selectedKeys = selectedKeys;
|
|
1051
|
+
}
|
|
1052
|
+
else if (tagName === 'x-menu-item-group') {
|
|
1053
|
+
el._menuMode = effectiveMode;
|
|
1054
|
+
el._menuTheme = this.theme;
|
|
1055
|
+
el._inlineCollapsed = this.inlineCollapsed;
|
|
1056
|
+
el._level = level;
|
|
1057
|
+
el._inlineIndent = this.inlineIndent;
|
|
1058
|
+
}
|
|
1059
|
+
else if (tagName === 'x-menu-divider') {
|
|
1060
|
+
el._menuTheme = this.theme;
|
|
1061
|
+
el._inlineCollapsed = this.inlineCollapsed;
|
|
1062
|
+
}
|
|
1063
|
+
};
|
|
1064
|
+
// Get all slotted children
|
|
1065
|
+
const slot = this.el.shadowRoot?.querySelector('slot');
|
|
1066
|
+
if (slot) {
|
|
1067
|
+
const assignedElements = slot.assignedElements();
|
|
1068
|
+
assignedElements.forEach(el => syncElement(el, 0));
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
// ========================================
|
|
1072
|
+
// RENDER
|
|
1073
|
+
// ========================================
|
|
1074
|
+
/**
|
|
1075
|
+
* Main render method for the menu component.
|
|
1076
|
+
*
|
|
1077
|
+
* Flow:
|
|
1078
|
+
* 1. Determines the effective mode (handles inline collapsed state becoming vertical).
|
|
1079
|
+
* 2. Constructs the class map for the host element based on mode and theme.
|
|
1080
|
+
* 3. Renders the Host element with role="menu".
|
|
1081
|
+
* 4. Renders a `<ul>` list container.
|
|
1082
|
+
* 5. Renders the default slot for menu items and submenus.
|
|
1083
|
+
* 6. Listens to `slotchange` to sync props to new children.
|
|
1084
|
+
*
|
|
1085
|
+
* @returns {JSX.Element} The component tree.
|
|
1086
|
+
*/
|
|
1087
|
+
render() {
|
|
1088
|
+
const effectiveMode = this.inlineCollapsed && this.mode === 'inline' ? 'vertical' : this.mode;
|
|
1089
|
+
const classes = {
|
|
1090
|
+
'x-menu': true,
|
|
1091
|
+
'x-menu-root': true,
|
|
1092
|
+
[`x-menu-${effectiveMode}`]: true,
|
|
1093
|
+
[`x-menu-${this.theme}`]: true,
|
|
1094
|
+
'x-menu-inline-collapsed': this.inlineCollapsed && this.mode === 'inline',
|
|
1095
|
+
};
|
|
1096
|
+
return (index.h(index.Host, { key: '73e2102c66edbb6c14b89dbe2610e7d24ceaa1cb', class: classes, role: "menu" }, index.h("ul", { key: '28fdce7848e9b87b008accead28389e2511d460f', class: "x-menu-list", part: "list" }, index.h("slot", { key: 'f3b676f3d37836e5360d559533508e8047fba74f', onSlotchange: () => this.syncChildrenProps() }))));
|
|
1097
|
+
}
|
|
1098
|
+
static get watchers() { return {
|
|
1099
|
+
"selectedKeys": [{
|
|
1100
|
+
"handleSelectedKeysChange": 0
|
|
1101
|
+
}],
|
|
1102
|
+
"openKeys": [{
|
|
1103
|
+
"handleOpenKeysChange": 0
|
|
1104
|
+
}],
|
|
1105
|
+
"mode": [{
|
|
1106
|
+
"handlePropsChange": 0
|
|
1107
|
+
}],
|
|
1108
|
+
"theme": [{
|
|
1109
|
+
"handlePropsChange": 0
|
|
1110
|
+
}],
|
|
1111
|
+
"inlineCollapsed": [{
|
|
1112
|
+
"handlePropsChange": 0
|
|
1113
|
+
}],
|
|
1114
|
+
"inlineIndent": [{
|
|
1115
|
+
"handlePropsChange": 0
|
|
1116
|
+
}]
|
|
1117
|
+
}; }
|
|
1118
|
+
};
|
|
1119
|
+
XMenu.style = xMenuCss();
|
|
1120
|
+
|
|
1121
|
+
const xMenuItemCss = () => `@charset "UTF-8";:host{display:block;position:relative;margin:0 var(--x-menu-item-margin-inline, 4px) var(--x-menu-item-margin-block, 4px);font-family:var(--x-menu-item-font-family, var(--x-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif));font-size:var(--x-menu-item-font-size, var(--x-font-size, 14px));cursor:pointer;-webkit-transition:color var(--x-menu-item-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-item-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1))), background var(--x-menu-item-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-item-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1)));transition:color var(--x-menu-item-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-item-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1))), background var(--x-menu-item-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-item-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1)))}.x-menu-item-inner{position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:var(--x-menu-item-height, 40px);padding:0 var(--x-menu-item-padding-inline, 16px);border-radius:var(--x-menu-item-border-radius, var(--x-border-radius-lg, 8px));color:var(--x-menu-item-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));line-height:var(--x-menu-item-height, 40px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-transition:inherit;transition:inherit}.x-menu-item-icon{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;min-width:var(--x-menu-icon-size, 14px);-webkit-margin-end:var(--x-menu-icon-margin-inline-end, 10px);margin-inline-end:var(--x-menu-icon-margin-inline-end, 10px);font-size:var(--x-menu-icon-size, 14px);-webkit-transition:font-size var(--x-menu-item-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-item-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1))), margin var(--x-menu-item-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-item-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1)));transition:font-size var(--x-menu-item-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-item-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1))), margin var(--x-menu-item-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-item-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1)))}.x-menu-item-icon:empty{display:none}.x-menu-item-content{-ms-flex:1;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.x-menu-item-extra{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-padding-start:var(--x-menu-icon-margin-inline-end, 10px);padding-inline-start:var(--x-menu-icon-margin-inline-end, 10px);font-size:var(--x-menu-item-font-size, var(--x-font-size, 14px));color:inherit;opacity:0.65}.x-menu-item-extra:empty{display:none}:host(.x-menu-item-light) .x-menu-item-inner{color:var(--x-menu-item-color, var(--x-color-text, rgba(0, 0, 0, 0.88)))}:host(.x-menu-item-light):hover .x-menu-item-inner,:host(.x-menu-item-light).x-menu-item-hover .x-menu-item-inner{color:var(--x-menu-item-color-hover, var(--x-color-text, rgba(0, 0, 0, 0.88)));background-color:var(--x-menu-item-bg-hover, rgba(0, 0, 0, 0.06))}:host(.x-menu-item-light).x-menu-item-selected .x-menu-item-inner{color:var(--x-menu-item-color-selected, var(--x-color-primary, #1677ff));background-color:var(--x-menu-item-bg-selected, var(--x-color-primary-bg, #e6f4ff))}:host(.x-menu-item-light).x-menu-item-disabled{cursor:not-allowed}:host(.x-menu-item-light).x-menu-item-disabled .x-menu-item-inner{color:var(--x-menu-item-color-disabled, var(--x-color-text-disabled, rgba(0, 0, 0, 0.25)));background:none}:host(.x-menu-item-light).x-menu-item-danger .x-menu-item-inner{color:var(--x-menu-item-danger-color, var(--x-color-error, #ff4d4f))}:host(.x-menu-item-light).x-menu-item-danger:hover .x-menu-item-inner{color:var(--x-menu-item-danger-color-hover, var(--x-color-error, #ff4d4f))}:host(.x-menu-item-light).x-menu-item-danger.x-menu-item-selected .x-menu-item-inner{color:var(--x-menu-item-danger-color-selected, var(--x-color-error, #ff4d4f));background-color:var(--x-menu-item-danger-bg-selected, var(--x-color-error-bg, #fff2f0))}:host(.x-menu-item-dark) .x-menu-item-inner{color:var(--x-menu-item-dark-color, rgba(255, 255, 255, 0.65))}:host(.x-menu-item-dark):hover .x-menu-item-inner,:host(.x-menu-item-dark).x-menu-item-hover .x-menu-item-inner{color:var(--x-menu-item-dark-color-hover, #ffffff);background-color:var(--x-menu-item-dark-bg-hover, rgba(255, 255, 255, 0.08))}:host(.x-menu-item-dark).x-menu-item-selected .x-menu-item-inner{color:var(--x-menu-item-dark-color-selected, #ffffff);background-color:var(--x-menu-item-dark-bg-selected, var(--x-color-primary, #1677ff))}:host(.x-menu-item-dark).x-menu-item-disabled{cursor:not-allowed}:host(.x-menu-item-dark).x-menu-item-disabled .x-menu-item-inner{color:var(--x-menu-item-dark-color-disabled, rgba(255, 255, 255, 0.25));background:none}:host(.x-menu-item-dark).x-menu-item-danger .x-menu-item-inner{color:var(--x-menu-item-dark-danger-color, var(--x-color-error, #ff4d4f))}:host(.x-menu-item-dark).x-menu-item-danger:hover .x-menu-item-inner{color:var(--x-menu-item-dark-danger-color-hover, #ff7875)}:host(.x-menu-item-dark).x-menu-item-danger.x-menu-item-selected .x-menu-item-inner{color:var(--x-menu-item-dark-danger-color-selected, #ffffff);background-color:var(--x-menu-item-dark-danger-bg-selected, var(--x-color-error, #ff4d4f))}:host(.x-menu-item-collapsed){margin:0 auto var(--x-menu-item-margin-block, 4px);width:calc(100% - var(--x-menu-item-margin-inline, 4px) * 2)}:host(.x-menu-item-collapsed) .x-menu-item-inner{-ms-flex-pack:center;justify-content:center;padding:0}:host(.x-menu-item-collapsed) .x-menu-item-icon{-webkit-margin-end:0;margin-inline-end:0;font-size:var(--x-menu-icon-size, 14px)}:host(.x-menu-item-collapsed) .x-menu-item-content,:host(.x-menu-item-collapsed) .x-menu-item-extra{display:none;width:0;opacity:0;overflow:hidden}:host(.x-menu-item-collapsed-hidden){display:none !important}:host(.x-menu-item-horizontal){margin:0}:host(.x-menu-item-horizontal) .x-menu-item-inner{height:var(--x-menu-horizontal-line-height, 46px);line-height:var(--x-menu-horizontal-line-height, 46px);padding:0 var(--x-menu-item-padding-inline, 16px);border-radius:0}:host(.x-menu-item-horizontal) .x-menu-item-inner::after{content:"";position:absolute;right:var(--x-menu-item-padding-inline, 16px);bottom:0;left:var(--x-menu-item-padding-inline, 16px);border-bottom:var(--x-menu-active-bar-height, 2px) solid transparent;-webkit-transition:border-color var(--x-menu-item-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-item-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1)));transition:border-color var(--x-menu-item-motion-duration, var(--x-motion-duration-mid, 0.2s)) var(--x-menu-item-motion-ease, var(--x-motion-ease-in-out, cubic-bezier(0.645, 0.045, 0.355, 1)))}:host(.x-menu-item-horizontal).x-menu-item-light:hover .x-menu-item-inner,:host(.x-menu-item-horizontal).x-menu-item-light.x-menu-item-hover .x-menu-item-inner{background-color:transparent;color:var(--x-menu-horizontal-item-color-hover, var(--x-color-primary, #1677ff))}:host(.x-menu-item-horizontal).x-menu-item-light:hover .x-menu-item-inner::after,:host(.x-menu-item-horizontal).x-menu-item-light.x-menu-item-hover .x-menu-item-inner::after{border-bottom-color:var(--x-menu-horizontal-item-color-hover, var(--x-color-primary, #1677ff))}:host(.x-menu-item-horizontal).x-menu-item-light.x-menu-item-selected .x-menu-item-inner{background-color:transparent;color:var(--x-menu-horizontal-item-color-selected, var(--x-color-primary, #1677ff))}:host(.x-menu-item-horizontal).x-menu-item-light.x-menu-item-selected .x-menu-item-inner::after{border-bottom-color:var(--x-menu-horizontal-item-color-selected, var(--x-color-primary, #1677ff))}`;
|
|
1122
|
+
|
|
1123
|
+
const XMenuItem = class {
|
|
1124
|
+
constructor(hostRef) {
|
|
1125
|
+
index.registerInstance(this, hostRef);
|
|
1126
|
+
this.xMenuItemClick = index.createEvent(this, "xMenuItemClick", 7);
|
|
1127
|
+
}
|
|
1128
|
+
get el() { return index.getElement(this); }
|
|
1129
|
+
// ========================================
|
|
1130
|
+
// PROPS
|
|
1131
|
+
// ========================================
|
|
1132
|
+
/**
|
|
1133
|
+
* Unique ID of the menu item
|
|
1134
|
+
* @example
|
|
1135
|
+
* <x-menu-item itemKey="home">Home</x-menu-item>
|
|
1136
|
+
*/
|
|
1137
|
+
itemKey = '';
|
|
1138
|
+
/**
|
|
1139
|
+
* Display the danger style
|
|
1140
|
+
* @example
|
|
1141
|
+
* <x-menu-item danger>Delete</x-menu-item>
|
|
1142
|
+
*/
|
|
1143
|
+
danger = false;
|
|
1144
|
+
/**
|
|
1145
|
+
* Whether menu item is disabled
|
|
1146
|
+
* @example
|
|
1147
|
+
* <x-menu-item disabled>Disabled</x-menu-item>
|
|
1148
|
+
*/
|
|
1149
|
+
disabled = false;
|
|
1150
|
+
/**
|
|
1151
|
+
* Set display title for collapsed item
|
|
1152
|
+
* @example
|
|
1153
|
+
* <x-menu-item itemTitle="Dashboard">Dashboard</x-menu-item>
|
|
1154
|
+
*/
|
|
1155
|
+
itemTitle;
|
|
1156
|
+
// ========================================
|
|
1157
|
+
// INTERNAL PROPS (set by parent menu)
|
|
1158
|
+
// ========================================
|
|
1159
|
+
/** @internal */
|
|
1160
|
+
_menuMode = 'vertical';
|
|
1161
|
+
/** @internal */
|
|
1162
|
+
_menuTheme = 'light';
|
|
1163
|
+
/** @internal */
|
|
1164
|
+
_inlineCollapsed = false;
|
|
1165
|
+
/** @internal */
|
|
1166
|
+
_level = 0;
|
|
1167
|
+
/** @internal */
|
|
1168
|
+
_inlineIndent = 24;
|
|
1169
|
+
/** @internal */
|
|
1170
|
+
_selected = false;
|
|
1171
|
+
/** @internal */
|
|
1172
|
+
_keyPath = [];
|
|
1173
|
+
// ========================================
|
|
1174
|
+
// STATE
|
|
1175
|
+
// ========================================
|
|
1176
|
+
isHovered = false;
|
|
1177
|
+
// ========================================
|
|
1178
|
+
// EVENTS
|
|
1179
|
+
// ========================================
|
|
1180
|
+
/**
|
|
1181
|
+
* Emitted when the menu item is clicked (internal)
|
|
1182
|
+
* @example
|
|
1183
|
+
* <x-menu-item onXMenuItemClick={(ev) => console.log(ev.detail)}>Item</x-menu-item>
|
|
1184
|
+
*/
|
|
1185
|
+
xMenuItemClick;
|
|
1186
|
+
// ========================================
|
|
1187
|
+
// WATCHERS
|
|
1188
|
+
// ========================================
|
|
1189
|
+
handleSelectedChange() {
|
|
1190
|
+
// Force re-render when selection changes
|
|
1191
|
+
}
|
|
1192
|
+
// ========================================
|
|
1193
|
+
// HANDLERS
|
|
1194
|
+
// ========================================
|
|
1195
|
+
/**
|
|
1196
|
+
* Handle click event.
|
|
1197
|
+
*
|
|
1198
|
+
* Flow:
|
|
1199
|
+
* 1. Checks if disabled.
|
|
1200
|
+
* 2. Constructs key path including self.
|
|
1201
|
+
* 3. Emits `xMenuItemClick` event with key, keyPath, and original event.
|
|
1202
|
+
*
|
|
1203
|
+
* @param e - Mouse event.
|
|
1204
|
+
*/
|
|
1205
|
+
handleClick = (e) => {
|
|
1206
|
+
if (this.disabled) {
|
|
1207
|
+
e.preventDefault();
|
|
1208
|
+
e.stopPropagation();
|
|
1209
|
+
return;
|
|
1210
|
+
}
|
|
1211
|
+
const keyPath = [...this._keyPath, this.itemKey];
|
|
1212
|
+
this.xMenuItemClick.emit({
|
|
1213
|
+
key: this.itemKey,
|
|
1214
|
+
keyPath,
|
|
1215
|
+
domEvent: e
|
|
1216
|
+
});
|
|
1217
|
+
};
|
|
1218
|
+
handleMouseEnter = () => {
|
|
1219
|
+
if (!this.disabled) {
|
|
1220
|
+
this.isHovered = true;
|
|
1221
|
+
}
|
|
1222
|
+
};
|
|
1223
|
+
handleMouseLeave = () => {
|
|
1224
|
+
this.isHovered = false;
|
|
1225
|
+
};
|
|
1226
|
+
// ========================================
|
|
1227
|
+
// RENDER
|
|
1228
|
+
// ========================================
|
|
1229
|
+
getInlinePadding() {
|
|
1230
|
+
if (this._menuMode === 'inline' && !this._inlineCollapsed) {
|
|
1231
|
+
const paddingLeft = this._level * this._inlineIndent + 16;
|
|
1232
|
+
return `${paddingLeft}px`;
|
|
1233
|
+
}
|
|
1234
|
+
return '';
|
|
1235
|
+
}
|
|
1236
|
+
/**
|
|
1237
|
+
* Render menu item content.
|
|
1238
|
+
*
|
|
1239
|
+
* Flow:
|
|
1240
|
+
* 1. Calculates inline padding based on level and indent (for inline mode).
|
|
1241
|
+
* 2. Determines collapsed state logic (level 0 vs nested).
|
|
1242
|
+
* 3. Constructs CSS classes for state (selected, disabled, danger, hover, mode, theme).
|
|
1243
|
+
* 4. Renders host element with accessibility attributes.
|
|
1244
|
+
* 5. Renders inner content with icon, default slot, and extra slot.
|
|
1245
|
+
*
|
|
1246
|
+
* @returns JSX.Element
|
|
1247
|
+
* @example
|
|
1248
|
+
* <x-menu-item itemKey="settings">Settings</x-menu-item>
|
|
1249
|
+
*/
|
|
1250
|
+
render() {
|
|
1251
|
+
const paddingInlineStart = this.getInlinePadding();
|
|
1252
|
+
const isCollapsedLevel0 = this._inlineCollapsed && this._level === 0;
|
|
1253
|
+
const isCollapsedNested = this._inlineCollapsed && this._level > 0;
|
|
1254
|
+
const classes = {
|
|
1255
|
+
'x-menu-item': true,
|
|
1256
|
+
'x-menu-item-selected': this._selected,
|
|
1257
|
+
'x-menu-item-disabled': this.disabled,
|
|
1258
|
+
'x-menu-item-danger': this.danger,
|
|
1259
|
+
'x-menu-item-hover': this.isHovered,
|
|
1260
|
+
'x-menu-item-collapsed': isCollapsedLevel0,
|
|
1261
|
+
'x-menu-item-collapsed-hidden': isCollapsedNested,
|
|
1262
|
+
[`x-menu-item-${this._menuMode}`]: true,
|
|
1263
|
+
[`x-menu-item-${this._menuTheme}`]: true,
|
|
1264
|
+
};
|
|
1265
|
+
const style = paddingInlineStart ? { paddingInlineStart } : {};
|
|
1266
|
+
return (index.h(index.Host, { key: '38c7aae0e39e2628d883438d7d3e0e8d681900e5', class: classes, role: "menuitem", tabindex: this.disabled ? -1 : 0, "aria-disabled": this.disabled ? 'true' : null, "aria-selected": this._selected ? 'true' : 'false', title: this._inlineCollapsed ? (this.itemTitle || undefined) : undefined, onClick: this.handleClick, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave }, index.h("div", { key: 'b27f3fb688f88c48fb3baa3f40d5251540798b6c', class: "x-menu-item-inner", style: style, part: "item" }, index.h("span", { key: '396a77ca5b7a398b27c83c2795e951ceef30cbbb', class: "x-menu-item-icon", part: "icon" }, index.h("slot", { key: 'f8b487dbc754c1098b204cfdb022aa727a17eba3', name: "icon" })), index.h("span", { key: 'e6c07cc9395b4903d66ff4ab7082cf07ee1aff8c', class: "x-menu-item-content", part: "content" }, index.h("slot", { key: 'edab4b78560ccca9d7d5288cf786915bf2b55cde' })), index.h("span", { key: 'fb72ccd1adb27052ba5205ba71e799976625e505', class: "x-menu-item-extra", part: "extra" }, index.h("slot", { key: '2dc6adf026655a2cd960eabcd9dd7494cc3fe522', name: "extra" })))));
|
|
1267
|
+
}
|
|
1268
|
+
static get watchers() { return {
|
|
1269
|
+
"_selected": [{
|
|
1270
|
+
"handleSelectedChange": 0
|
|
1271
|
+
}]
|
|
1272
|
+
}; }
|
|
1273
|
+
};
|
|
1274
|
+
XMenuItem.style = xMenuItemCss();
|
|
1275
|
+
|
|
1276
|
+
const xResultCss = () => `@charset "UTF-8";:root{--x-color-primary:#1677ff;--x-color-primary-rgb:22, 119, 255;--x-color-primary-contrast:#ffffff;--x-color-primary-contrast-rgb:255, 255, 255;--x-color-primary-shade:#0958d9;--x-color-primary-tint:#4096ff;--x-color-primary-bg:#e6f4ff;--x-color-primary-bg-hover:#bae0ff;--x-color-primary-border:#91caff;--x-color-primary-border-hover:#69b1ff;--x-color-primary-hover:#4096ff;--x-color-primary-active:#0958d9;--x-color-primary-text:#1677ff;--x-color-primary-text-hover:#4096ff;--x-color-primary-text-active:#0958d9;--x-color-secondary:#3dc2ff;--x-color-secondary-rgb:61, 194, 255;--x-color-secondary-contrast:#ffffff;--x-color-secondary-contrast-rgb:255, 255, 255;--x-color-secondary-shade:#36abe0;--x-color-secondary-tint:#50c8ff;--x-color-success:#52c41a;--x-color-success-rgb:82, 196, 26;--x-color-success-contrast:#ffffff;--x-color-success-contrast-rgb:255, 255, 255;--x-color-success-shade:#389e0d;--x-color-success-tint:#73d13d;--x-color-success-bg:#f6ffed;--x-color-success-bg-hover:#d9f7be;--x-color-success-border:#b7eb8f;--x-color-success-border-hover:#95de64;--x-color-success-hover:#73d13d;--x-color-success-active:#389e0d;--x-color-success-text:#52c41a;--x-color-success-text-hover:#73d13d;--x-color-success-text-active:#389e0d;--x-color-warning:#faad14;--x-color-warning-rgb:250, 173, 20;--x-color-warning-contrast:#000000;--x-color-warning-contrast-rgb:0, 0, 0;--x-color-warning-shade:#d48806;--x-color-warning-tint:#ffc53d;--x-color-warning-bg:#fffbe6;--x-color-warning-bg-hover:#fff1b8;--x-color-warning-border:#ffe58f;--x-color-warning-border-hover:#ffd666;--x-color-warning-hover:#ffc53d;--x-color-warning-active:#d48806;--x-color-warning-text:#faad14;--x-color-warning-text-hover:#ffc53d;--x-color-warning-text-active:#d48806;--x-color-danger:#ff4d4f;--x-color-danger-rgb:255, 77, 79;--x-color-danger-contrast:#ffffff;--x-color-danger-contrast-rgb:255, 255, 255;--x-color-danger-shade:#cf1322;--x-color-danger-tint:#ff7875;--x-color-error:#ff4d4f;--x-color-error-rgb:255, 77, 79;--x-color-error-bg:#fff2f0;--x-color-error-bg-hover:#ffccc7;--x-color-error-border:#ffa39e;--x-color-error-border-hover:#ff7875;--x-color-error-hover:#ff7875;--x-color-error-active:#d9363e;--x-color-error-text:#ff4d4f;--x-color-error-text-hover:#ff7875;--x-color-error-text-active:#d9363e;--x-color-info:#1677ff;--x-color-info-rgb:22, 119, 255;--x-color-info-bg:#e6f4ff;--x-color-info-bg-hover:#bae0ff;--x-color-info-border:#91caff;--x-color-info-border-hover:#69b1ff;--x-color-info-hover:#69b1ff;--x-color-info-active:#0958d9;--x-color-info-text:#1677ff;--x-color-info-text-hover:#69b1ff;--x-color-info-text-active:#0958d9;--x-color-text:rgba(0, 0, 0, 0.88);--x-color-text-secondary:rgba(0, 0, 0, 0.65);--x-color-text-tertiary:rgba(0, 0, 0, 0.45);--x-color-text-quaternary:rgba(0, 0, 0, 0.25);--x-color-text-disabled:rgba(0, 0, 0, 0.25);--x-color-text-placeholder:rgba(0, 0, 0, 0.25);--x-color-text-heading:rgba(0, 0, 0, 0.88);--x-color-text-label:rgba(0, 0, 0, 0.65);--x-color-text-description:rgba(0, 0, 0, 0.45);--x-color-text-light-solid:#ffffff;--x-color-bg-container:#ffffff;--x-color-bg-elevated:#ffffff;--x-color-bg-layout:#f5f5f5;--x-color-bg-spotlight:rgba(0, 0, 0, 0.85);--x-color-bg-mask:rgba(0, 0, 0, 0.45);--x-color-bg-base:#ffffff;--x-color-bg-container-disabled:#f5f5f5;--x-color-bg-container-loading:rgba(255, 255, 255, 0.65);--x-color-white:#ffffff;--x-color-fill:rgba(0, 0, 0, 0.15);--x-color-fill-secondary:rgba(0, 0, 0, 0.06);--x-color-fill-tertiary:rgba(0, 0, 0, 0.04);--x-color-fill-quaternary:rgba(0, 0, 0, 0.02);--x-color-border:#d9d9d9;--x-color-border-secondary:#f0f0f0;--x-color-border-bg:#ffffff;--x-color-split:rgba(5, 5, 5, 0.06);--x-color-dark:#222428;--x-color-dark-rgb:34, 36, 40;--x-color-dark-contrast:#ffffff;--x-color-dark-contrast-rgb:255, 255, 255;--x-color-dark-shade:#1e2023;--x-color-dark-tint:#383a3e;--x-color-medium:#92949c;--x-color-medium-rgb:146, 148, 156;--x-color-medium-contrast:#ffffff;--x-color-medium-contrast-rgb:255, 255, 255;--x-color-medium-shade:#808289;--x-color-medium-tint:#9d9fa6;--x-color-light:#f4f5f8;--x-color-light-rgb:244, 245, 248;--x-color-light-contrast:#000000;--x-color-light-contrast-rgb:0, 0, 0;--x-color-light-shade:#d7d8da;--x-color-light-tint:#f5f6f9;--x-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--x-font-family-code:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;--x-font-size:14px;--x-font-size-sm:12px;--x-font-size-lg:16px;--x-font-size-xl:20px;--x-font-size-heading-1:38px;--x-font-size-heading-2:30px;--x-font-size-heading-3:24px;--x-font-size-heading-4:20px;--x-font-size-heading-5:16px;--x-line-height:1.5714285714285714;--x-line-height-lg:1.5;--x-line-height-sm:1.6666666666666667;--x-line-height-heading-1:1.2105263157894737;--x-line-height-heading-2:1.2666666666666666;--x-line-height-heading-3:1.3333333333333333;--x-line-height-heading-4:1.4;--x-line-height-heading-5:1.5;--x-font-weight-normal:400;--x-font-weight-medium:500;--x-font-weight-semibold:600;--x-font-weight-strong:600;--x-font-size-base:14px;--x-font-size-xxl:24px;--x-line-height-base:1.5714285714285714;--x-spacing-xxs:4px;--x-spacing-xs:8px;--x-spacing-sm:12px;--x-spacing-md:16px;--x-spacing-lg:20px;--x-spacing-xl:24px;--x-spacing-xxl:32px;--x-spacing-xxxl:48px;--x-margin-xxs:4px;--x-margin-xs:8px;--x-margin-sm:12px;--x-margin-md:16px;--x-margin-lg:24px;--x-margin-xl:32px;--x-margin-xxl:48px;--x-padding-xxs:4px;--x-padding-xs:8px;--x-padding-sm:12px;--x-padding-md:16px;--x-padding-lg:24px;--x-padding-content-horizontal-lg:24px;--x-padding-content-vertical-lg:12px;--x-padding-content-horizontal:16px;--x-padding-content-vertical:12px;--x-padding-content-horizontal-sm:16px;--x-padding-content-vertical-sm:8px;--x-border-radius:6px;--x-border-radius-xs:2px;--x-border-radius-sm:4px;--x-border-radius-lg:8px;--x-border-radius-xl:12px;--x-border-radius-outer:4px;--x-border-radius-base:6px;--x-border-width:1px;--x-border-width-base:1px;--x-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-shadow-lg:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-box-shadow-popover-arrow:2px 2px 5px rgba(0, 0, 0, 0.05);--x-box-shadow-card:0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);--x-box-shadow-drawer-right:-6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12), -9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-left:6px 0 16px 0 rgba(0, 0, 0, 0.08), 3px 0 6px -4px rgba(0, 0, 0, 0.12), 9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-up:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-down:0 -6px 16px 0 rgba(0, 0, 0, 0.08), 0 -3px 6px -4px rgba(0, 0, 0, 0.12), 0 -9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tabs-overflow-left:inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-right:inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-top:inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-bottom:inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);--x-motion-duration-fast:0.1s;--x-motion-duration-mid:0.2s;--x-motion-duration-slow:0.3s;--x-motion-ease-in-out:cubic-bezier(0.645, 0.045, 0.355, 1);--x-motion-ease-out:cubic-bezier(0.215, 0.61, 0.355, 1);--x-motion-ease-in:cubic-bezier(0.55, 0.055, 0.675, 0.19);--x-motion-ease-out-back:cubic-bezier(0.12, 0.4, 0.29, 1.46);--x-motion-ease-in-back:cubic-bezier(0.71, -0.46, 0.88, 0.6);--x-motion-ease-in-out-circle:cubic-bezier(0.78, 0.14, 0.15, 0.86);--x-motion-ease-out-circle:cubic-bezier(0.08, 0.82, 0.17, 1);--x-motion-ease-in-circle:cubic-bezier(0.6, 0.04, 0.98, 0.34);--x-motion-ease-in-quint:cubic-bezier(0.755, 0.05, 0.855, 0.06);--x-motion-ease-out-quint:cubic-bezier(0.23, 1, 0.32, 1);--x-z-index-base:0;--x-z-index-popup-base:1000;--x-z-index-popup:1030;--x-z-index-affix:10;--x-z-index-modal:1000;--x-z-index-modal-mask:1000;--x-z-index-drawer:1000;--x-z-index-popover:1030;--x-z-index-dropdown:1050;--x-z-index-tooltip:1070;--x-z-index-notification:1080;--x-z-index-message:1090;--x-z-index-popconfirm:1060;--x-z-index-table-fixed:10;--x-opacity-loading:0.65;--x-opacity-image:1;--x-opacity-disabled:0.5;--x-control-height:32px;--x-control-height-xs:24px;--x-control-height-sm:24px;--x-control-height-lg:40px;--x-control-radio-size:16px;--x-control-checkbox-size:16px;--x-control-padding-horizontal:12px;--x-control-padding-horizontal-sm:8px;--x-control-outline-width:2px;--x-control-outline:rgba(5, 145, 255, 0.1);--x-control-item-bg-hover:rgba(0, 0, 0, 0.04);--x-control-item-bg-active:#e6f4ff;--x-control-item-bg-active-hover:#bae0ff;--x-control-item-bg-active-disabled:rgba(0, 0, 0, 0.15);--x-control-tmp-outline:rgba(0, 0, 0, 0.02);--x-color-yellow:#fadb14;--x-color-yellow-rgb:250, 219, 20;--x-font-family-base:var(--x-font-family);--x-color-link:#1677ff;--x-color-link-hover:#69b1ff;--x-color-link-active:#0958d9;--x-color-icon:rgba(0, 0, 0, 0.45);--x-color-icon-hover:rgba(0, 0, 0, 0.88);--x-color-highlight:#ff4d4f;--x-color-bg-text-hover:rgba(0, 0, 0, 0.06);--x-color-bg-text-active:rgba(0, 0, 0, 0.15);--x-screen-xs:480px;--x-screen-xs-min:480px;--x-screen-xs-max:575px;--x-screen-sm:576px;--x-screen-sm-min:576px;--x-screen-sm-max:767px;--x-screen-md:768px;--x-screen-md-min:768px;--x-screen-md-max:991px;--x-screen-lg:992px;--x-screen-lg-min:992px;--x-screen-lg-max:1199px;--x-screen-xl:1200px;--x-screen-xl-min:1200px;--x-screen-xl-max:1599px;--x-screen-xxl:1600px;--x-screen-xxl-min:1600px;--x-color-fill-content:rgba(0, 0, 0, 0.06);--x-color-fill-content-hover:rgba(0, 0, 0, 0.15);--x-color-fill-alter:rgba(0, 0, 0, 0.02);--x-scrollbar-width:12px;--x-scrollbar-track-bg:rgba(0, 0, 0, 0.04);--x-scrollbar-thumb-bg:rgba(0, 0, 0, 0.25);--x-scrollbar-thumb-bg-hover:rgba(0, 0, 0, 0.35);--x-menu-dark-bg:#001529;--x-menu-dark-item-bg:#001529;--x-menu-dark-popup-bg:#001529;--x-menu-dark-submenu-item-bg:#000c17}:host{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding:var(--x-result-padding-vertical, var(--x-spacing-xxl, 48px)) var(--x-result-padding-horizontal, var(--x-spacing-xl, 32px));text-align:center}:host(.x-result-success) .x-result-icon{color:var(--x-result-icon-color-success, var(--x-color-success, #52c41a))}:host(.x-result-error) .x-result-icon{color:var(--x-result-icon-color-error, var(--x-color-error, #ff4d4f))}:host(.x-result-info) .x-result-icon{color:var(--x-result-icon-color-info, var(--x-color-primary, #1677ff))}:host(.x-result-warning) .x-result-icon{color:var(--x-result-icon-color-warning, var(--x-color-warning, #faad14))}:host(.x-result-403) .x-result-icon,:host(.x-result-404) .x-result-icon,:host(.x-result-500) .x-result-icon{color:var(--x-result-icon-color-image, var(--x-color-fill-content, rgba(0, 0, 0, 0.06)))}.x-result-icon{margin-bottom:var(--x-result-icon-margin-bottom, var(--x-spacing-lg, 24px));text-align:center}.x-result-icon svg{width:1em;height:1em;font-size:var(--x-result-icon-font-size, 72px)}.x-result-icon-success svg,.x-result-icon-error svg,.x-result-icon-info svg,.x-result-icon-warning svg{font-size:var(--x-result-icon-font-size, 72px)}.x-result-icon-403 svg.x-result-image,.x-result-icon-404 svg.x-result-image,.x-result-icon-500 svg.x-result-image{width:250px;height:auto}.x-result-title{color:var(--x-result-title-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-size:var(--x-result-title-font-size, var(--x-font-size-xxl, 24px));line-height:var(--x-result-title-line-height, 1.8);font-weight:var(--x-result-title-font-weight, var(--x-font-weight-medium, 500));margin-bottom:8px;text-align:center}.x-result-subtitle{color:var(--x-result-subtitle-color, var(--x-color-text-secondary, rgba(0, 0, 0, 0.45)));font-size:var(--x-result-subtitle-font-size, var(--x-font-size-base, 14px));line-height:var(--x-result-subtitle-line-height, 1.6);text-align:center}.x-result-extra{margin:var(--x-result-extra-margin-top, var(--x-spacing-xl, 32px)) 0 0 0;text-align:center}.x-result-extra>::slotted(*){-webkit-margin-end:8px;margin-inline-end:8px}.x-result-extra>::slotted(*:last-child){-webkit-margin-end:0;margin-inline-end:0}.x-result-content{margin-top:var(--x-result-content-margin-top, var(--x-spacing-lg, 24px));padding:var(--x-result-content-padding-vertical, var(--x-spacing-lg, 24px)) var(--x-result-content-padding-horizontal, var(--x-spacing-xl, 32px));background-color:var(--x-result-content-bg, var(--x-color-fill-quaternary, rgba(0, 0, 0, 0.02)));text-align:left;border-radius:var(--x-border-radius, 6px)}`;
|
|
1277
|
+
|
|
1278
|
+
const XResult = class {
|
|
1279
|
+
constructor(hostRef) {
|
|
1280
|
+
index.registerInstance(this, hostRef);
|
|
1281
|
+
}
|
|
1282
|
+
get el() { return index.getElement(this); }
|
|
1283
|
+
// ========================================
|
|
1284
|
+
// PROPS
|
|
1285
|
+
// ========================================
|
|
1286
|
+
/**
|
|
1287
|
+
* Result status, decides icons and colors.
|
|
1288
|
+
* @example
|
|
1289
|
+
* <x-result status="success"></x-result>
|
|
1290
|
+
*/
|
|
1291
|
+
status = 'info';
|
|
1292
|
+
/**
|
|
1293
|
+
* The title of the result.
|
|
1294
|
+
* @example
|
|
1295
|
+
* <x-result resultTitle="Success"></x-result>
|
|
1296
|
+
*/
|
|
1297
|
+
resultTitle;
|
|
1298
|
+
/**
|
|
1299
|
+
* The subTitle of the result.
|
|
1300
|
+
* @example
|
|
1301
|
+
* <x-result subTitle="All done"></x-result>
|
|
1302
|
+
*/
|
|
1303
|
+
subTitle;
|
|
1304
|
+
/**
|
|
1305
|
+
* Customize class for each semantic structure.
|
|
1306
|
+
* @example
|
|
1307
|
+
* <x-result classNames={{ title: 'my-title' }}></x-result>
|
|
1308
|
+
*/
|
|
1309
|
+
classNames;
|
|
1310
|
+
/**
|
|
1311
|
+
* Customize inline style for each semantic structure.
|
|
1312
|
+
* @example
|
|
1313
|
+
* <x-result styles={{ title: 'color: red;' }}></x-result>
|
|
1314
|
+
*/
|
|
1315
|
+
styles;
|
|
1316
|
+
/**
|
|
1317
|
+
* Customize the icon size.
|
|
1318
|
+
* @example
|
|
1319
|
+
* <x-result iconSize={100}></x-result>
|
|
1320
|
+
*/
|
|
1321
|
+
iconSize = 72;
|
|
1322
|
+
// ========================================
|
|
1323
|
+
// PRIVATE METHODS
|
|
1324
|
+
// ========================================
|
|
1325
|
+
/**
|
|
1326
|
+
* Renders the success icon (check-circle).
|
|
1327
|
+
* @returns JSX.Element - The SVG element for success status.
|
|
1328
|
+
*/
|
|
1329
|
+
renderSuccessIcon() {
|
|
1330
|
+
return index.h("x-icon", { size: this.iconSize, fill: true, type: 'round', name: config.getIcon('success') });
|
|
1331
|
+
}
|
|
1332
|
+
/**
|
|
1333
|
+
* Renders the error icon (close-circle).
|
|
1334
|
+
* @returns JSX.Element - The SVG element for error status.
|
|
1335
|
+
*/
|
|
1336
|
+
renderErrorIcon() {
|
|
1337
|
+
return index.h("x-icon", { size: this.iconSize, fill: true, type: 'round', name: config.getIcon('error') });
|
|
1338
|
+
}
|
|
1339
|
+
/**
|
|
1340
|
+
* Renders the info icon (exclamation-circle).
|
|
1341
|
+
* @returns JSX.Element - The SVG element for info status.
|
|
1342
|
+
*/
|
|
1343
|
+
renderInfoIcon() {
|
|
1344
|
+
return index.h("x-icon", { size: this.iconSize, fill: true, type: 'round', name: config.getIcon('info') });
|
|
1345
|
+
}
|
|
1346
|
+
/**
|
|
1347
|
+
* Renders the warning icon (warning triangle).
|
|
1348
|
+
* @returns JSX.Element - The SVG element for warning status.
|
|
1349
|
+
*/
|
|
1350
|
+
renderWarningIcon() {
|
|
1351
|
+
return index.h("x-icon", { size: this.iconSize, fill: true, type: 'round', name: config.getIcon('warning') });
|
|
1352
|
+
}
|
|
1353
|
+
/**
|
|
1354
|
+
* Renders the 403 status illustration.
|
|
1355
|
+
* @returns JSX.Element - The SVG illustration for 403 Forbidden.
|
|
1356
|
+
*/
|
|
1357
|
+
render403Icon() {
|
|
1358
|
+
return (index.h("svg", { class: "x-result-image", viewBox: "0 0 251 294" }, index.h("g", { fill: "none", "fill-rule": "evenodd" }, index.h("path", { d: "M0 129.023v-2.084C0 58.364 55.591 2.774 124.165 2.774h2.085c68.574 0 124.165 55.59 124.165 124.165v2.084c0 68.575-55.59 124.166-124.165 124.166h-2.085C55.591 253.189 0 197.598 0 129.023", fill: "#E4EBF7" }), index.h("path", { d: "M41.417 132.92a8.231 8.231 0 1 1-16.38-1.65 8.231 8.231 0 0 1 16.38 1.65", fill: "#FFF" }), index.h("path", { d: "M37.793 128.246c-2.745.088-4.97 2.45-4.97 5.227s2.225 5.01 4.97 4.922c2.745-.088 4.97-2.45 4.97-5.227s-2.225-5.01-4.97-4.922", fill: "#FFF" }), index.h("path", { d: "M212.906 121.005a8.231 8.231 0 1 1-16.38-1.65 8.231 8.231 0 0 1 16.38 1.65", fill: "#FFF" }), index.h("path", { d: "M209.282 116.331c-2.745.088-4.97 2.45-4.97 5.227s2.225 5.01 4.97 4.922c2.745-.088 4.97-2.45 4.97-5.227s-2.225-5.01-4.97-4.922", fill: "#FFF" }), index.h("g", null, index.h("path", { d: "M125.25 110.503c8.825 0 15.975 7.15 15.975 15.975 0 8.825-7.15 15.975-15.975 15.975-8.825 0-15.975-7.15-15.975-15.975 0-8.825 7.15-15.975 15.975-15.975", fill: "#FFF" }), index.h("text", { fill: "#A3B1BF", "font-family": "sans-serif", "font-size": "80", "font-weight": "600", x: "70", y: "170" }, "403")))));
|
|
1359
|
+
}
|
|
1360
|
+
/**
|
|
1361
|
+
* Renders the 404 status illustration.
|
|
1362
|
+
* @returns JSX.Element - The SVG illustration for 404 Not Found.
|
|
1363
|
+
*/
|
|
1364
|
+
render404Icon() {
|
|
1365
|
+
return (index.h("svg", { class: "x-result-image", viewBox: "0 0 252 294" }, index.h("g", { fill: "none", "fill-rule": "evenodd" }, index.h("path", { d: "M0 129.023v-2.084C0 58.364 55.591 2.774 124.165 2.774h2.085c68.574 0 124.165 55.59 124.165 124.165v2.084c0 68.575-55.59 124.166-124.165 124.166h-2.085C55.591 253.189 0 197.598 0 129.023", fill: "#E4EBF7" }), index.h("path", { d: "M41.417 132.92a8.231 8.231 0 1 1-16.38-1.65 8.231 8.231 0 0 1 16.38 1.65", fill: "#FFF" }), index.h("path", { d: "M37.793 128.246c-2.745.088-4.97 2.45-4.97 5.227s2.225 5.01 4.97 4.922c2.745-.088 4.97-2.45 4.97-5.227s-2.225-5.01-4.97-4.922", fill: "#FFF" }), index.h("path", { d: "M212.906 121.005a8.231 8.231 0 1 1-16.38-1.65 8.231 8.231 0 0 1 16.38 1.65", fill: "#FFF" }), index.h("path", { d: "M209.282 116.331c-2.745.088-4.97 2.45-4.97 5.227s2.225 5.01 4.97 4.922c2.745-.088 4.97-2.45 4.97-5.227s-2.225-5.01-4.97-4.922", fill: "#FFF" }), index.h("g", null, index.h("path", { d: "M125.25 110.503c8.825 0 15.975 7.15 15.975 15.975 0 8.825-7.15 15.975-15.975 15.975-8.825 0-15.975-7.15-15.975-15.975 0-8.825 7.15-15.975 15.975-15.975", fill: "#FFF" }), index.h("text", { fill: "#A3B1BF", "font-family": "sans-serif", "font-size": "80", "font-weight": "600", x: "70", y: "170" }, "404")))));
|
|
1366
|
+
}
|
|
1367
|
+
/**
|
|
1368
|
+
* Renders the 500 status illustration.
|
|
1369
|
+
* @returns JSX.Element - The SVG illustration for 500 Server Error.
|
|
1370
|
+
*/
|
|
1371
|
+
render500Icon() {
|
|
1372
|
+
return (index.h("svg", { class: "x-result-image", viewBox: "0 0 254 294" }, index.h("g", { fill: "none", "fill-rule": "evenodd" }, index.h("path", { d: "M0 129.023v-2.084C0 58.364 55.591 2.774 124.165 2.774h2.085c68.574 0 124.165 55.59 124.165 124.165v2.084c0 68.575-55.59 124.166-124.165 124.166h-2.085C55.591 253.189 0 197.598 0 129.023", fill: "#E4EBF7" }), index.h("path", { d: "M41.417 132.92a8.231 8.231 0 1 1-16.38-1.65 8.231 8.231 0 0 1 16.38 1.65", fill: "#FFF" }), index.h("path", { d: "M37.793 128.246c-2.745.088-4.97 2.45-4.97 5.227s2.225 5.01 4.97 4.922c2.745-.088 4.97-2.45 4.97-5.227s-2.225-5.01-4.97-4.922", fill: "#FFF" }), index.h("path", { d: "M212.906 121.005a8.231 8.231 0 1 1-16.38-1.65 8.231 8.231 0 0 1 16.38 1.65", fill: "#FFF" }), index.h("path", { d: "M209.282 116.331c-2.745.088-4.97 2.45-4.97 5.227s2.225 5.01 4.97 4.922c2.745-.088 4.97-2.45 4.97-5.227s-2.225-5.01-4.97-4.922", fill: "#FFF" }), index.h("g", null, index.h("path", { d: "M125.25 110.503c8.825 0 15.975 7.15 15.975 15.975 0 8.825-7.15 15.975-15.975 15.975-8.825 0-15.975-7.15-15.975-15.975 0-8.825 7.15-15.975 15.975-15.975", fill: "#FFF" }), index.h("text", { fill: "#A3B1BF", "font-family": "sans-serif", "font-size": "80", "font-weight": "600", x: "70", y: "170" }, "500")))));
|
|
1373
|
+
}
|
|
1374
|
+
/**
|
|
1375
|
+
* Selects and renders the appropriate icon based on the `status` prop.
|
|
1376
|
+
*
|
|
1377
|
+
* Flow:
|
|
1378
|
+
* 1. Constructs class and style maps for the icon container.
|
|
1379
|
+
* 2. Switches on `this.status` to determine which SVG/Illustration to render.
|
|
1380
|
+
* - Supports 'success', 'error', 'warning', 'info', '403', '404', '500'.
|
|
1381
|
+
* 3. Wraps the icon in a div with proper classes.
|
|
1382
|
+
*
|
|
1383
|
+
* @returns JSX.Element - The rendered icon container.
|
|
1384
|
+
*/
|
|
1385
|
+
renderIcon() {
|
|
1386
|
+
const iconClass = {
|
|
1387
|
+
'x-result-icon': true,
|
|
1388
|
+
[`x-result-icon-${this.status}`]: true,
|
|
1389
|
+
[this.classNames?.icon || '']: !!this.classNames?.icon,
|
|
1390
|
+
};
|
|
1391
|
+
const iconStyle = this.styles?.icon ? { cssText: this.styles.icon } : undefined;
|
|
1392
|
+
let iconContent;
|
|
1393
|
+
switch (this.status) {
|
|
1394
|
+
case 'success':
|
|
1395
|
+
iconContent = this.renderSuccessIcon();
|
|
1396
|
+
break;
|
|
1397
|
+
case 'error':
|
|
1398
|
+
iconContent = this.renderErrorIcon();
|
|
1399
|
+
break;
|
|
1400
|
+
case 'warning':
|
|
1401
|
+
iconContent = this.renderWarningIcon();
|
|
1402
|
+
break;
|
|
1403
|
+
case '403':
|
|
1404
|
+
iconContent = this.render403Icon();
|
|
1405
|
+
break;
|
|
1406
|
+
case '404':
|
|
1407
|
+
iconContent = this.render404Icon();
|
|
1408
|
+
break;
|
|
1409
|
+
case '500':
|
|
1410
|
+
iconContent = this.render500Icon();
|
|
1411
|
+
break;
|
|
1412
|
+
case 'info':
|
|
1413
|
+
default:
|
|
1414
|
+
iconContent = this.renderInfoIcon();
|
|
1415
|
+
break;
|
|
1416
|
+
}
|
|
1417
|
+
return (index.h("div", { class: iconClass, style: iconStyle }, index.h("slot", { name: "icon" }, iconContent)));
|
|
1418
|
+
}
|
|
1419
|
+
/**
|
|
1420
|
+
* Checks if a specific slot has content assigned to it.
|
|
1421
|
+
*
|
|
1422
|
+
* @param slotName - The name of the slot to check.
|
|
1423
|
+
* @returns boolean - True if an element with slot="slotName" exists in children.
|
|
1424
|
+
*/
|
|
1425
|
+
hasSlotContent(slotName) {
|
|
1426
|
+
return Array.from(this.el.children).some(child => child.getAttribute('slot') === slotName);
|
|
1427
|
+
}
|
|
1428
|
+
/**
|
|
1429
|
+
* Generates the class map for the host element.
|
|
1430
|
+
* Includes base class, status modifier, and custom root class.
|
|
1431
|
+
*
|
|
1432
|
+
* @returns Record<string, boolean> - The class map object.
|
|
1433
|
+
*/
|
|
1434
|
+
getHostClasses() {
|
|
1435
|
+
return {
|
|
1436
|
+
'x-result': true,
|
|
1437
|
+
[`x-result-${this.status}`]: true,
|
|
1438
|
+
[this.classNames?.root || '']: !!this.classNames?.root,
|
|
1439
|
+
};
|
|
1440
|
+
}
|
|
1441
|
+
// ========================================
|
|
1442
|
+
// RENDER
|
|
1443
|
+
// ========================================
|
|
1444
|
+
/**
|
|
1445
|
+
* Main render method for the Result component.
|
|
1446
|
+
*
|
|
1447
|
+
* Flow:
|
|
1448
|
+
* 1. Checks for presence of title, subtitle, extra content, and main content via props or slots.
|
|
1449
|
+
* 2. Renders the host element with appropriate classes and styles.
|
|
1450
|
+
* 3. Renders sections in order:
|
|
1451
|
+
* - Icon/Image
|
|
1452
|
+
* - Title
|
|
1453
|
+
* - Subtitle
|
|
1454
|
+
* - Extra (Action buttons)
|
|
1455
|
+
* - Content (Main body)
|
|
1456
|
+
*
|
|
1457
|
+
* @returns JSX.Element
|
|
1458
|
+
*/
|
|
1459
|
+
render() {
|
|
1460
|
+
const hasTitle = this.resultTitle || this.hasSlotContent('title');
|
|
1461
|
+
const hasSubTitle = this.subTitle || this.hasSlotContent('subTitle');
|
|
1462
|
+
const hasExtra = this.hasSlotContent('extra');
|
|
1463
|
+
const hasContent = this.hasSlotContent(null) || Array.from(this.el.childNodes).some(node => !node['slot'] && (node.nodeType === Node.ELEMENT_NODE || (node.nodeType === Node.TEXT_NODE && node.textContent?.trim())));
|
|
1464
|
+
const hostStyle = this.styles?.root ? { cssText: this.styles.root } : undefined;
|
|
1465
|
+
return (index.h(index.Host, { key: '815f4027d20d5cde949e983cf3b827f71a4f94e4', class: this.getHostClasses(), style: hostStyle }, this.renderIcon(), hasTitle && (index.h("div", { key: '46263db169a9441f28b763cb5cda7398b948076d', class: {
|
|
1466
|
+
'x-result-title': true,
|
|
1467
|
+
[this.classNames?.title || '']: !!this.classNames?.title,
|
|
1468
|
+
}, style: this.styles?.title ? { cssText: this.styles.title } : undefined }, index.h("slot", { key: 'aea1e4bffbbc13385cbc5578a9eb5ed2b95489e8', name: "title" }, this.resultTitle))), hasSubTitle && (index.h("div", { key: 'ebe5149df5e0767d9f9c97c3c66dd78c9179b065', class: {
|
|
1469
|
+
'x-result-subtitle': true,
|
|
1470
|
+
[this.classNames?.subTitle || '']: !!this.classNames?.subTitle,
|
|
1471
|
+
}, style: this.styles?.subTitle ? { cssText: this.styles.subTitle } : undefined }, index.h("slot", { key: '6d12de2cdb988925e0ae3c1f1676026c9b027f72', name: "subTitle" }, this.subTitle))), hasExtra && (index.h("div", { key: 'ce4880488c3d2f169f70a08c557e8c0d36920030', class: {
|
|
1472
|
+
'x-result-extra': true,
|
|
1473
|
+
[this.classNames?.extra || '']: !!this.classNames?.extra,
|
|
1474
|
+
}, style: this.styles?.extra ? { cssText: this.styles.extra } : undefined }, index.h("slot", { key: 'aabf4df9d72924b0ddc23df5fad6af5cca7f2e8d', name: "extra" }))), hasContent && (index.h("div", { key: 'f54e568aec6abad6c31c5c3858bbd854708aa2f1', class: {
|
|
1475
|
+
'x-result-content': true,
|
|
1476
|
+
[this.classNames?.content || '']: !!this.classNames?.content,
|
|
1477
|
+
}, style: this.styles?.content ? { cssText: this.styles.content } : undefined }, index.h("slot", { key: 'd47bd66d66453c5a576142ddbb1c6ad6f2036e95' })))));
|
|
1478
|
+
}
|
|
1479
|
+
};
|
|
1480
|
+
XResult.style = xResultCss();
|
|
1481
|
+
|
|
1482
|
+
const xSelectOptionCss = () => `@charset "UTF-8";:root{--x-color-primary:#1677ff;--x-color-primary-rgb:22, 119, 255;--x-color-primary-contrast:#ffffff;--x-color-primary-contrast-rgb:255, 255, 255;--x-color-primary-shade:#0958d9;--x-color-primary-tint:#4096ff;--x-color-primary-bg:#e6f4ff;--x-color-primary-bg-hover:#bae0ff;--x-color-primary-border:#91caff;--x-color-primary-border-hover:#69b1ff;--x-color-primary-hover:#4096ff;--x-color-primary-active:#0958d9;--x-color-primary-text:#1677ff;--x-color-primary-text-hover:#4096ff;--x-color-primary-text-active:#0958d9;--x-color-secondary:#3dc2ff;--x-color-secondary-rgb:61, 194, 255;--x-color-secondary-contrast:#ffffff;--x-color-secondary-contrast-rgb:255, 255, 255;--x-color-secondary-shade:#36abe0;--x-color-secondary-tint:#50c8ff;--x-color-success:#52c41a;--x-color-success-rgb:82, 196, 26;--x-color-success-contrast:#ffffff;--x-color-success-contrast-rgb:255, 255, 255;--x-color-success-shade:#389e0d;--x-color-success-tint:#73d13d;--x-color-success-bg:#f6ffed;--x-color-success-bg-hover:#d9f7be;--x-color-success-border:#b7eb8f;--x-color-success-border-hover:#95de64;--x-color-success-hover:#73d13d;--x-color-success-active:#389e0d;--x-color-success-text:#52c41a;--x-color-success-text-hover:#73d13d;--x-color-success-text-active:#389e0d;--x-color-warning:#faad14;--x-color-warning-rgb:250, 173, 20;--x-color-warning-contrast:#000000;--x-color-warning-contrast-rgb:0, 0, 0;--x-color-warning-shade:#d48806;--x-color-warning-tint:#ffc53d;--x-color-warning-bg:#fffbe6;--x-color-warning-bg-hover:#fff1b8;--x-color-warning-border:#ffe58f;--x-color-warning-border-hover:#ffd666;--x-color-warning-hover:#ffc53d;--x-color-warning-active:#d48806;--x-color-warning-text:#faad14;--x-color-warning-text-hover:#ffc53d;--x-color-warning-text-active:#d48806;--x-color-danger:#ff4d4f;--x-color-danger-rgb:255, 77, 79;--x-color-danger-contrast:#ffffff;--x-color-danger-contrast-rgb:255, 255, 255;--x-color-danger-shade:#cf1322;--x-color-danger-tint:#ff7875;--x-color-error:#ff4d4f;--x-color-error-rgb:255, 77, 79;--x-color-error-bg:#fff2f0;--x-color-error-bg-hover:#ffccc7;--x-color-error-border:#ffa39e;--x-color-error-border-hover:#ff7875;--x-color-error-hover:#ff7875;--x-color-error-active:#d9363e;--x-color-error-text:#ff4d4f;--x-color-error-text-hover:#ff7875;--x-color-error-text-active:#d9363e;--x-color-info:#1677ff;--x-color-info-rgb:22, 119, 255;--x-color-info-bg:#e6f4ff;--x-color-info-bg-hover:#bae0ff;--x-color-info-border:#91caff;--x-color-info-border-hover:#69b1ff;--x-color-info-hover:#69b1ff;--x-color-info-active:#0958d9;--x-color-info-text:#1677ff;--x-color-info-text-hover:#69b1ff;--x-color-info-text-active:#0958d9;--x-color-text:rgba(0, 0, 0, 0.88);--x-color-text-secondary:rgba(0, 0, 0, 0.65);--x-color-text-tertiary:rgba(0, 0, 0, 0.45);--x-color-text-quaternary:rgba(0, 0, 0, 0.25);--x-color-text-disabled:rgba(0, 0, 0, 0.25);--x-color-text-placeholder:rgba(0, 0, 0, 0.25);--x-color-text-heading:rgba(0, 0, 0, 0.88);--x-color-text-label:rgba(0, 0, 0, 0.65);--x-color-text-description:rgba(0, 0, 0, 0.45);--x-color-text-light-solid:#ffffff;--x-color-bg-container:#ffffff;--x-color-bg-elevated:#ffffff;--x-color-bg-layout:#f5f5f5;--x-color-bg-spotlight:rgba(0, 0, 0, 0.85);--x-color-bg-mask:rgba(0, 0, 0, 0.45);--x-color-bg-base:#ffffff;--x-color-bg-container-disabled:#f5f5f5;--x-color-bg-container-loading:rgba(255, 255, 255, 0.65);--x-color-white:#ffffff;--x-color-fill:rgba(0, 0, 0, 0.15);--x-color-fill-secondary:rgba(0, 0, 0, 0.06);--x-color-fill-tertiary:rgba(0, 0, 0, 0.04);--x-color-fill-quaternary:rgba(0, 0, 0, 0.02);--x-color-border:#d9d9d9;--x-color-border-secondary:#f0f0f0;--x-color-border-bg:#ffffff;--x-color-split:rgba(5, 5, 5, 0.06);--x-color-dark:#222428;--x-color-dark-rgb:34, 36, 40;--x-color-dark-contrast:#ffffff;--x-color-dark-contrast-rgb:255, 255, 255;--x-color-dark-shade:#1e2023;--x-color-dark-tint:#383a3e;--x-color-medium:#92949c;--x-color-medium-rgb:146, 148, 156;--x-color-medium-contrast:#ffffff;--x-color-medium-contrast-rgb:255, 255, 255;--x-color-medium-shade:#808289;--x-color-medium-tint:#9d9fa6;--x-color-light:#f4f5f8;--x-color-light-rgb:244, 245, 248;--x-color-light-contrast:#000000;--x-color-light-contrast-rgb:0, 0, 0;--x-color-light-shade:#d7d8da;--x-color-light-tint:#f5f6f9;--x-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--x-font-family-code:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;--x-font-size:14px;--x-font-size-sm:12px;--x-font-size-lg:16px;--x-font-size-xl:20px;--x-font-size-heading-1:38px;--x-font-size-heading-2:30px;--x-font-size-heading-3:24px;--x-font-size-heading-4:20px;--x-font-size-heading-5:16px;--x-line-height:1.5714285714285714;--x-line-height-lg:1.5;--x-line-height-sm:1.6666666666666667;--x-line-height-heading-1:1.2105263157894737;--x-line-height-heading-2:1.2666666666666666;--x-line-height-heading-3:1.3333333333333333;--x-line-height-heading-4:1.4;--x-line-height-heading-5:1.5;--x-font-weight-normal:400;--x-font-weight-medium:500;--x-font-weight-semibold:600;--x-font-weight-strong:600;--x-font-size-base:14px;--x-font-size-xxl:24px;--x-line-height-base:1.5714285714285714;--x-spacing-xxs:4px;--x-spacing-xs:8px;--x-spacing-sm:12px;--x-spacing-md:16px;--x-spacing-lg:20px;--x-spacing-xl:24px;--x-spacing-xxl:32px;--x-spacing-xxxl:48px;--x-margin-xxs:4px;--x-margin-xs:8px;--x-margin-sm:12px;--x-margin-md:16px;--x-margin-lg:24px;--x-margin-xl:32px;--x-margin-xxl:48px;--x-padding-xxs:4px;--x-padding-xs:8px;--x-padding-sm:12px;--x-padding-md:16px;--x-padding-lg:24px;--x-padding-content-horizontal-lg:24px;--x-padding-content-vertical-lg:12px;--x-padding-content-horizontal:16px;--x-padding-content-vertical:12px;--x-padding-content-horizontal-sm:16px;--x-padding-content-vertical-sm:8px;--x-border-radius:6px;--x-border-radius-xs:2px;--x-border-radius-sm:4px;--x-border-radius-lg:8px;--x-border-radius-xl:12px;--x-border-radius-outer:4px;--x-border-radius-base:6px;--x-border-width:1px;--x-border-width-base:1px;--x-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-shadow-lg:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-box-shadow-popover-arrow:2px 2px 5px rgba(0, 0, 0, 0.05);--x-box-shadow-card:0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);--x-box-shadow-drawer-right:-6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12), -9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-left:6px 0 16px 0 rgba(0, 0, 0, 0.08), 3px 0 6px -4px rgba(0, 0, 0, 0.12), 9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-up:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-down:0 -6px 16px 0 rgba(0, 0, 0, 0.08), 0 -3px 6px -4px rgba(0, 0, 0, 0.12), 0 -9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tabs-overflow-left:inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-right:inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-top:inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-bottom:inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);--x-motion-duration-fast:0.1s;--x-motion-duration-mid:0.2s;--x-motion-duration-slow:0.3s;--x-motion-ease-in-out:cubic-bezier(0.645, 0.045, 0.355, 1);--x-motion-ease-out:cubic-bezier(0.215, 0.61, 0.355, 1);--x-motion-ease-in:cubic-bezier(0.55, 0.055, 0.675, 0.19);--x-motion-ease-out-back:cubic-bezier(0.12, 0.4, 0.29, 1.46);--x-motion-ease-in-back:cubic-bezier(0.71, -0.46, 0.88, 0.6);--x-motion-ease-in-out-circle:cubic-bezier(0.78, 0.14, 0.15, 0.86);--x-motion-ease-out-circle:cubic-bezier(0.08, 0.82, 0.17, 1);--x-motion-ease-in-circle:cubic-bezier(0.6, 0.04, 0.98, 0.34);--x-motion-ease-in-quint:cubic-bezier(0.755, 0.05, 0.855, 0.06);--x-motion-ease-out-quint:cubic-bezier(0.23, 1, 0.32, 1);--x-z-index-base:0;--x-z-index-popup-base:1000;--x-z-index-popup:1030;--x-z-index-affix:10;--x-z-index-modal:1000;--x-z-index-modal-mask:1000;--x-z-index-drawer:1000;--x-z-index-popover:1030;--x-z-index-dropdown:1050;--x-z-index-tooltip:1070;--x-z-index-notification:1080;--x-z-index-message:1090;--x-z-index-popconfirm:1060;--x-z-index-table-fixed:10;--x-opacity-loading:0.65;--x-opacity-image:1;--x-opacity-disabled:0.5;--x-control-height:32px;--x-control-height-xs:24px;--x-control-height-sm:24px;--x-control-height-lg:40px;--x-control-radio-size:16px;--x-control-checkbox-size:16px;--x-control-padding-horizontal:12px;--x-control-padding-horizontal-sm:8px;--x-control-outline-width:2px;--x-control-outline:rgba(5, 145, 255, 0.1);--x-control-item-bg-hover:rgba(0, 0, 0, 0.04);--x-control-item-bg-active:#e6f4ff;--x-control-item-bg-active-hover:#bae0ff;--x-control-item-bg-active-disabled:rgba(0, 0, 0, 0.15);--x-control-tmp-outline:rgba(0, 0, 0, 0.02);--x-color-yellow:#fadb14;--x-color-yellow-rgb:250, 219, 20;--x-font-family-base:var(--x-font-family);--x-color-link:#1677ff;--x-color-link-hover:#69b1ff;--x-color-link-active:#0958d9;--x-color-icon:rgba(0, 0, 0, 0.45);--x-color-icon-hover:rgba(0, 0, 0, 0.88);--x-color-highlight:#ff4d4f;--x-color-bg-text-hover:rgba(0, 0, 0, 0.06);--x-color-bg-text-active:rgba(0, 0, 0, 0.15);--x-screen-xs:480px;--x-screen-xs-min:480px;--x-screen-xs-max:575px;--x-screen-sm:576px;--x-screen-sm-min:576px;--x-screen-sm-max:767px;--x-screen-md:768px;--x-screen-md-min:768px;--x-screen-md-max:991px;--x-screen-lg:992px;--x-screen-lg-min:992px;--x-screen-lg-max:1199px;--x-screen-xl:1200px;--x-screen-xl-min:1200px;--x-screen-xl-max:1599px;--x-screen-xxl:1600px;--x-screen-xxl-min:1600px;--x-color-fill-content:rgba(0, 0, 0, 0.06);--x-color-fill-content-hover:rgba(0, 0, 0, 0.15);--x-color-fill-alter:rgba(0, 0, 0, 0.02);--x-scrollbar-width:12px;--x-scrollbar-track-bg:rgba(0, 0, 0, 0.04);--x-scrollbar-thumb-bg:rgba(0, 0, 0, 0.25);--x-scrollbar-thumb-bg-hover:rgba(0, 0, 0, 0.35);--x-menu-dark-bg:#001529;--x-menu-dark-item-bg:#001529;--x-menu-dark-popup-bg:#001529;--x-menu-dark-submenu-item-bg:#000c17}.x-select-option{display:block;position:relative;min-height:var(--x-select-option-min-height, var(--x-control-height, 15px));padding:var(--x-select-option-padding-block, var(--x-spacing-xs, 8px)) var(--x-select-option-padding-inline, var(--x-spacing-xs, 8px));color:var(--x-select-option-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-weight:var(--x-select-option-font-weight, var(--x-font-weight-normal, 400));font-size:var(--x-select-option-font-size, var(--x-font-size-base, 14px));line-height:var(--x-select-option-line-height, var(--x-line-height-base, 1));cursor:pointer;-webkit-transition:background var(--x-select-option-motion-duration, var(--x-motion-duration-mid, 0.2s)) ease;transition:background var(--x-select-option-motion-duration, var(--x-motion-duration-mid, 0.2s)) ease}.x-select-option.x-select-option-active{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.x-select-option:hover,.x-select-option.x-select-option-active{background-color:var(--x-select-option-bg-hover, var(--x-color-bg-text-hover, rgba(0, 0, 0, 0.06)))}.x-select-option.x-select-option-selected{color:var(--x-select-option-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-weight:var(--x-select-option-font-weight-selected, var(--x-font-weight-semibold, 600));background-color:var(--x-select-option-bg-selected, var(--x-color-primary-bg, #e6f4ff))}.x-select-option.x-select-option-selected:hover,.x-select-option.x-select-option-selected.x-select-option-active{background-color:var(--x-select-option-bg-selected-hover, var(--x-color-primary-bg-hover, #bae0ff))}.x-select-option.x-select-option-disabled{color:var(--x-select-option-color-disabled, var(--x-color-text-disabled, rgba(0, 0, 0, 0.25)));cursor:not-allowed;background-color:transparent}.x-select-option.x-select-option-disabled:hover,.x-select-option.x-select-option-disabled.x-select-option-active{background-color:transparent}.x-select-option-content{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex:auto;flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.x-select-option-state{-ms-flex:none;flex:none;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding-left:var(--x-select-option-state-padding-left, var(--x-spacing-sm, 12px));color:var(--x-select-option-state-color, var(--x-color-primary, #1677ff))}`;
|
|
1483
|
+
|
|
1484
|
+
const XSelectOption = class {
|
|
1485
|
+
constructor(hostRef) {
|
|
1486
|
+
index.registerInstance(this, hostRef);
|
|
1487
|
+
}
|
|
1488
|
+
get el() { return index.getElement(this); }
|
|
1489
|
+
/**
|
|
1490
|
+
* Whether the option is disabled.
|
|
1491
|
+
* @example
|
|
1492
|
+
* <x-select-option disabled></x-select-option>
|
|
1493
|
+
*/
|
|
1494
|
+
disabled = false;
|
|
1495
|
+
/**
|
|
1496
|
+
* The value of the option.
|
|
1497
|
+
* @example
|
|
1498
|
+
* <x-select-option value="us"></x-select-option>
|
|
1499
|
+
*/
|
|
1500
|
+
value;
|
|
1501
|
+
/**
|
|
1502
|
+
* The label of the option (used for display in the select box when selected)
|
|
1503
|
+
* If not provided, will try to use the text content.
|
|
1504
|
+
* @example
|
|
1505
|
+
* <x-select-option label="United States"></x-select-option>
|
|
1506
|
+
*/
|
|
1507
|
+
label;
|
|
1508
|
+
/**
|
|
1509
|
+
* Title attribute.
|
|
1510
|
+
* @example
|
|
1511
|
+
* <x-select-option optionTitle="Tooltip"></x-select-option>
|
|
1512
|
+
*/
|
|
1513
|
+
optionTitle;
|
|
1514
|
+
/**
|
|
1515
|
+
* Internal: whether this option is selected.
|
|
1516
|
+
*/
|
|
1517
|
+
selected = false;
|
|
1518
|
+
/**
|
|
1519
|
+
* Internal: whether this option is active (hovered/focused via keyboard).
|
|
1520
|
+
*/
|
|
1521
|
+
active = false;
|
|
1522
|
+
/**
|
|
1523
|
+
* Renders the Select Option component.
|
|
1524
|
+
*
|
|
1525
|
+
* Flow:
|
|
1526
|
+
* 1. Applies classes based on state (selected, active, disabled).
|
|
1527
|
+
* 2. Sets ARIA roles for accessibility.
|
|
1528
|
+
* 3. Renders the option content (projected via slot).
|
|
1529
|
+
* 4. Renders a checkmark icon if the option is selected.
|
|
1530
|
+
*
|
|
1531
|
+
* @returns JSX.Element - The host element representing an option.
|
|
1532
|
+
*/
|
|
1533
|
+
render() {
|
|
1534
|
+
return (index.h(index.Host, { key: 'b75e12cc85f999090a9d9eb574c1b43aa6ae9efa', class: {
|
|
1535
|
+
'x-select-option': true,
|
|
1536
|
+
'x-select-option-selected': this.selected,
|
|
1537
|
+
'x-select-option-active': this.active,
|
|
1538
|
+
'x-select-option-disabled': this.disabled,
|
|
1539
|
+
}, title: this.optionTitle, role: "option", "aria-selected": this.selected ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false' }, index.h("div", { key: '3d1c1ae207aa4b141397b85bfd125f8e2f3a5f44', class: "x-select-option-content" }, index.h("slot", { key: 'dbce7dfb1f1191b5d5c7ef8dde91cdfecf09d835' })), this.selected && (index.h("div", { key: 'd21e3a536ab6cf8620e23980c7b8190c3d136d58', class: "x-select-option-state" }, index.h("span", { key: '7af063874895dac03505c74ad8170c2a0a1d167b', role: "img", "aria-label": "check", class: "anticon anticon-check x-select-selected-icon" }, index.h("svg", { key: '075e667053ece6734193ca634fa45fa7e6696789', viewBox: "64 64 896 896", focusable: "false", "data-icon": "check", width: "1em", height: "1em", fill: "currentColor", "aria-hidden": "true" }, index.h("path", { key: '2a3d658eb3695351173e899b62e00ba82d6d3b57', d: "M912 190h-69c-4.4 0-8 3.6-8 8v27.1c0 1.8.7 3.6 2 4.9l376 474c2.5 3.2 6.4 5 10.5 5h54c4.1 0 8-1.8 10.5-5L910 202.9c1.3-1.3 2-3.1 2-4.9V198c0-4.4-3.6-8-8-8z" }), index.h("path", { key: '3e90191a7ef5a60245d81217fa0b707d56d42e82', d: "M912 190h-69c-4.4 0-8 3.6-8 8v27.1c0 1.8.7 3.6 2 4.9l376 474c2.5 3.2 6.4 5 10.5 5h54c4.1 0 8-1.8 10.5-5L910 202.9c1.3-1.3 2-3.1 2-4.9V198c0-4.4-3.6-8-8-8z", opacity: "0" }), index.h("path", { key: '90da6aa15798242c541d003cbcaca1f0da74bed3', d: "M433.1 657.7a31.8 31.8 0 0051.7 0l206.8-271.6c6.6-8.6 3.7-21.4-5.9-24.1l-42.4-11.9c-3.4-1-7.1.2-9.3 3.1L459 554.5l-86.6-97.4c-2.2-2.5-5.8-3.5-9.1-2.5l-43 12.1c-9.6 2.7-12.5 15.5-5.9 24.1l118.7 166.9z" })))))));
|
|
1540
|
+
}
|
|
1541
|
+
};
|
|
1542
|
+
XSelectOption.style = xSelectOptionCss();
|
|
1543
|
+
|
|
1544
|
+
const xTagCss = () => `@charset "UTF-8";:root{--x-color-primary:#1677ff;--x-color-primary-rgb:22, 119, 255;--x-color-primary-contrast:#ffffff;--x-color-primary-contrast-rgb:255, 255, 255;--x-color-primary-shade:#0958d9;--x-color-primary-tint:#4096ff;--x-color-primary-bg:#e6f4ff;--x-color-primary-bg-hover:#bae0ff;--x-color-primary-border:#91caff;--x-color-primary-border-hover:#69b1ff;--x-color-primary-hover:#4096ff;--x-color-primary-active:#0958d9;--x-color-primary-text:#1677ff;--x-color-primary-text-hover:#4096ff;--x-color-primary-text-active:#0958d9;--x-color-secondary:#3dc2ff;--x-color-secondary-rgb:61, 194, 255;--x-color-secondary-contrast:#ffffff;--x-color-secondary-contrast-rgb:255, 255, 255;--x-color-secondary-shade:#36abe0;--x-color-secondary-tint:#50c8ff;--x-color-success:#52c41a;--x-color-success-rgb:82, 196, 26;--x-color-success-contrast:#ffffff;--x-color-success-contrast-rgb:255, 255, 255;--x-color-success-shade:#389e0d;--x-color-success-tint:#73d13d;--x-color-success-bg:#f6ffed;--x-color-success-bg-hover:#d9f7be;--x-color-success-border:#b7eb8f;--x-color-success-border-hover:#95de64;--x-color-success-hover:#73d13d;--x-color-success-active:#389e0d;--x-color-success-text:#52c41a;--x-color-success-text-hover:#73d13d;--x-color-success-text-active:#389e0d;--x-color-warning:#faad14;--x-color-warning-rgb:250, 173, 20;--x-color-warning-contrast:#000000;--x-color-warning-contrast-rgb:0, 0, 0;--x-color-warning-shade:#d48806;--x-color-warning-tint:#ffc53d;--x-color-warning-bg:#fffbe6;--x-color-warning-bg-hover:#fff1b8;--x-color-warning-border:#ffe58f;--x-color-warning-border-hover:#ffd666;--x-color-warning-hover:#ffc53d;--x-color-warning-active:#d48806;--x-color-warning-text:#faad14;--x-color-warning-text-hover:#ffc53d;--x-color-warning-text-active:#d48806;--x-color-danger:#ff4d4f;--x-color-danger-rgb:255, 77, 79;--x-color-danger-contrast:#ffffff;--x-color-danger-contrast-rgb:255, 255, 255;--x-color-danger-shade:#cf1322;--x-color-danger-tint:#ff7875;--x-color-error:#ff4d4f;--x-color-error-rgb:255, 77, 79;--x-color-error-bg:#fff2f0;--x-color-error-bg-hover:#ffccc7;--x-color-error-border:#ffa39e;--x-color-error-border-hover:#ff7875;--x-color-error-hover:#ff7875;--x-color-error-active:#d9363e;--x-color-error-text:#ff4d4f;--x-color-error-text-hover:#ff7875;--x-color-error-text-active:#d9363e;--x-color-info:#1677ff;--x-color-info-rgb:22, 119, 255;--x-color-info-bg:#e6f4ff;--x-color-info-bg-hover:#bae0ff;--x-color-info-border:#91caff;--x-color-info-border-hover:#69b1ff;--x-color-info-hover:#69b1ff;--x-color-info-active:#0958d9;--x-color-info-text:#1677ff;--x-color-info-text-hover:#69b1ff;--x-color-info-text-active:#0958d9;--x-color-text:rgba(0, 0, 0, 0.88);--x-color-text-secondary:rgba(0, 0, 0, 0.65);--x-color-text-tertiary:rgba(0, 0, 0, 0.45);--x-color-text-quaternary:rgba(0, 0, 0, 0.25);--x-color-text-disabled:rgba(0, 0, 0, 0.25);--x-color-text-placeholder:rgba(0, 0, 0, 0.25);--x-color-text-heading:rgba(0, 0, 0, 0.88);--x-color-text-label:rgba(0, 0, 0, 0.65);--x-color-text-description:rgba(0, 0, 0, 0.45);--x-color-text-light-solid:#ffffff;--x-color-bg-container:#ffffff;--x-color-bg-elevated:#ffffff;--x-color-bg-layout:#f5f5f5;--x-color-bg-spotlight:rgba(0, 0, 0, 0.85);--x-color-bg-mask:rgba(0, 0, 0, 0.45);--x-color-bg-base:#ffffff;--x-color-bg-container-disabled:#f5f5f5;--x-color-bg-container-loading:rgba(255, 255, 255, 0.65);--x-color-white:#ffffff;--x-color-fill:rgba(0, 0, 0, 0.15);--x-color-fill-secondary:rgba(0, 0, 0, 0.06);--x-color-fill-tertiary:rgba(0, 0, 0, 0.04);--x-color-fill-quaternary:rgba(0, 0, 0, 0.02);--x-color-border:#d9d9d9;--x-color-border-secondary:#f0f0f0;--x-color-border-bg:#ffffff;--x-color-split:rgba(5, 5, 5, 0.06);--x-color-dark:#222428;--x-color-dark-rgb:34, 36, 40;--x-color-dark-contrast:#ffffff;--x-color-dark-contrast-rgb:255, 255, 255;--x-color-dark-shade:#1e2023;--x-color-dark-tint:#383a3e;--x-color-medium:#92949c;--x-color-medium-rgb:146, 148, 156;--x-color-medium-contrast:#ffffff;--x-color-medium-contrast-rgb:255, 255, 255;--x-color-medium-shade:#808289;--x-color-medium-tint:#9d9fa6;--x-color-light:#f4f5f8;--x-color-light-rgb:244, 245, 248;--x-color-light-contrast:#000000;--x-color-light-contrast-rgb:0, 0, 0;--x-color-light-shade:#d7d8da;--x-color-light-tint:#f5f6f9;--x-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--x-font-family-code:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;--x-font-size:14px;--x-font-size-sm:12px;--x-font-size-lg:16px;--x-font-size-xl:20px;--x-font-size-heading-1:38px;--x-font-size-heading-2:30px;--x-font-size-heading-3:24px;--x-font-size-heading-4:20px;--x-font-size-heading-5:16px;--x-line-height:1.5714285714285714;--x-line-height-lg:1.5;--x-line-height-sm:1.6666666666666667;--x-line-height-heading-1:1.2105263157894737;--x-line-height-heading-2:1.2666666666666666;--x-line-height-heading-3:1.3333333333333333;--x-line-height-heading-4:1.4;--x-line-height-heading-5:1.5;--x-font-weight-normal:400;--x-font-weight-medium:500;--x-font-weight-semibold:600;--x-font-weight-strong:600;--x-font-size-base:14px;--x-font-size-xxl:24px;--x-line-height-base:1.5714285714285714;--x-spacing-xxs:4px;--x-spacing-xs:8px;--x-spacing-sm:12px;--x-spacing-md:16px;--x-spacing-lg:20px;--x-spacing-xl:24px;--x-spacing-xxl:32px;--x-spacing-xxxl:48px;--x-margin-xxs:4px;--x-margin-xs:8px;--x-margin-sm:12px;--x-margin-md:16px;--x-margin-lg:24px;--x-margin-xl:32px;--x-margin-xxl:48px;--x-padding-xxs:4px;--x-padding-xs:8px;--x-padding-sm:12px;--x-padding-md:16px;--x-padding-lg:24px;--x-padding-content-horizontal-lg:24px;--x-padding-content-vertical-lg:12px;--x-padding-content-horizontal:16px;--x-padding-content-vertical:12px;--x-padding-content-horizontal-sm:16px;--x-padding-content-vertical-sm:8px;--x-border-radius:6px;--x-border-radius-xs:2px;--x-border-radius-sm:4px;--x-border-radius-lg:8px;--x-border-radius-xl:12px;--x-border-radius-outer:4px;--x-border-radius-base:6px;--x-border-width:1px;--x-border-width-base:1px;--x-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-shadow-lg:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-box-shadow-popover-arrow:2px 2px 5px rgba(0, 0, 0, 0.05);--x-box-shadow-card:0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);--x-box-shadow-drawer-right:-6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12), -9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-left:6px 0 16px 0 rgba(0, 0, 0, 0.08), 3px 0 6px -4px rgba(0, 0, 0, 0.12), 9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-up:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-down:0 -6px 16px 0 rgba(0, 0, 0, 0.08), 0 -3px 6px -4px rgba(0, 0, 0, 0.12), 0 -9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tabs-overflow-left:inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-right:inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-top:inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-bottom:inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);--x-motion-duration-fast:0.1s;--x-motion-duration-mid:0.2s;--x-motion-duration-slow:0.3s;--x-motion-ease-in-out:cubic-bezier(0.645, 0.045, 0.355, 1);--x-motion-ease-out:cubic-bezier(0.215, 0.61, 0.355, 1);--x-motion-ease-in:cubic-bezier(0.55, 0.055, 0.675, 0.19);--x-motion-ease-out-back:cubic-bezier(0.12, 0.4, 0.29, 1.46);--x-motion-ease-in-back:cubic-bezier(0.71, -0.46, 0.88, 0.6);--x-motion-ease-in-out-circle:cubic-bezier(0.78, 0.14, 0.15, 0.86);--x-motion-ease-out-circle:cubic-bezier(0.08, 0.82, 0.17, 1);--x-motion-ease-in-circle:cubic-bezier(0.6, 0.04, 0.98, 0.34);--x-motion-ease-in-quint:cubic-bezier(0.755, 0.05, 0.855, 0.06);--x-motion-ease-out-quint:cubic-bezier(0.23, 1, 0.32, 1);--x-z-index-base:0;--x-z-index-popup-base:1000;--x-z-index-popup:1030;--x-z-index-affix:10;--x-z-index-modal:1000;--x-z-index-modal-mask:1000;--x-z-index-drawer:1000;--x-z-index-popover:1030;--x-z-index-dropdown:1050;--x-z-index-tooltip:1070;--x-z-index-notification:1080;--x-z-index-message:1090;--x-z-index-popconfirm:1060;--x-z-index-table-fixed:10;--x-opacity-loading:0.65;--x-opacity-image:1;--x-opacity-disabled:0.5;--x-control-height:32px;--x-control-height-xs:24px;--x-control-height-sm:24px;--x-control-height-lg:40px;--x-control-radio-size:16px;--x-control-checkbox-size:16px;--x-control-padding-horizontal:12px;--x-control-padding-horizontal-sm:8px;--x-control-outline-width:2px;--x-control-outline:rgba(5, 145, 255, 0.1);--x-control-item-bg-hover:rgba(0, 0, 0, 0.04);--x-control-item-bg-active:#e6f4ff;--x-control-item-bg-active-hover:#bae0ff;--x-control-item-bg-active-disabled:rgba(0, 0, 0, 0.15);--x-control-tmp-outline:rgba(0, 0, 0, 0.02);--x-color-yellow:#fadb14;--x-color-yellow-rgb:250, 219, 20;--x-font-family-base:var(--x-font-family);--x-color-link:#1677ff;--x-color-link-hover:#69b1ff;--x-color-link-active:#0958d9;--x-color-icon:rgba(0, 0, 0, 0.45);--x-color-icon-hover:rgba(0, 0, 0, 0.88);--x-color-highlight:#ff4d4f;--x-color-bg-text-hover:rgba(0, 0, 0, 0.06);--x-color-bg-text-active:rgba(0, 0, 0, 0.15);--x-screen-xs:480px;--x-screen-xs-min:480px;--x-screen-xs-max:575px;--x-screen-sm:576px;--x-screen-sm-min:576px;--x-screen-sm-max:767px;--x-screen-md:768px;--x-screen-md-min:768px;--x-screen-md-max:991px;--x-screen-lg:992px;--x-screen-lg-min:992px;--x-screen-lg-max:1199px;--x-screen-xl:1200px;--x-screen-xl-min:1200px;--x-screen-xl-max:1599px;--x-screen-xxl:1600px;--x-screen-xxl-min:1600px;--x-color-fill-content:rgba(0, 0, 0, 0.06);--x-color-fill-content-hover:rgba(0, 0, 0, 0.15);--x-color-fill-alter:rgba(0, 0, 0, 0.02);--x-scrollbar-width:12px;--x-scrollbar-track-bg:rgba(0, 0, 0, 0.04);--x-scrollbar-thumb-bg:rgba(0, 0, 0, 0.25);--x-scrollbar-thumb-bg-hover:rgba(0, 0, 0, 0.35);--x-menu-dark-bg:#001529;--x-menu-dark-item-bg:#001529;--x-menu-dark-popup-bg:#001529;--x-menu-dark-submenu-item-bg:#000c17}:host{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;-webkit-margin-end:var(--x-tag-margin-right, var(--x-spacing-xs, 8px));margin-inline-end:var(--x-tag-margin-right, var(--x-spacing-xs, 8px));padding:0 var(--x-tag-padding-inline, 7px);color:var(--x-tag-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));font-size:var(--x-tag-font-size, var(--x-font-size-sm, 12px));font-variant:tabular-nums;line-height:var(--x-tag-line-height, 20px);list-style:none;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum";display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;height:auto;white-space:nowrap;background:var(--x-tag-bg, var(--x-color-fill-quaternary, rgba(0, 0, 0, 0.02)));border:var(--x-tag-border-width, var(--x-border-width-base, 1px)) solid var(--x-tag-border-color, var(--x-color-border, #d9d9d9));border-radius:var(--x-tag-border-radius, var(--x-border-radius-sm, 4px));opacity:1;-webkit-transition:all var(--x-tag-motion-duration, var(--x-motion-duration-mid, 0.2s));transition:all var(--x-tag-motion-duration, var(--x-motion-duration-mid, 0.2s));cursor:default;text-decoration:none}:host:focus{outline:none}:host(.x-tag-hidden){display:none}:host(.x-tag-closing){opacity:0;-webkit-transform:scale(0.8);transform:scale(0.8)}:host(.x-tag-borderless){background:var(--x-tag-borderless-bg, transparent);border-color:transparent}:host(.x-tag-disabled){cursor:not-allowed;opacity:0.65;pointer-events:none}:host(.x-tag-closable){-webkit-padding-end:calc(var(--x-tag-padding-inline, 7px) - var(--x-tag-close-padding-offset, 2px));padding-inline-end:calc(var(--x-tag-padding-inline, 7px) - var(--x-tag-close-padding-offset, 2px))}:host(.x-tag-outlined){background:transparent;border-color:var(--x-tag-border-color, var(--x-color-border, #d9d9d9))}:host(.x-tag-filled){background:var(--x-tag-bg, var(--x-color-fill-quaternary, rgba(0, 0, 0, 0.02)));border-color:transparent}:host(.x-tag-solid){background:var(--x-tag-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));border-color:var(--x-tag-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));color:var(--x-color-text-light-solid, #fff)}.x-tag-content{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;color:inherit;text-decoration:none}a.x-tag-content{cursor:pointer}a.x-tag-content:hover{opacity:0.85}::slotted([slot=icon]){-webkit-margin-end:var(--x-tag-icon-margin, 4px);margin-inline-end:var(--x-tag-icon-margin, 4px);font-size:inherit}.x-tag-close-icon{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-webkit-margin-start:var(--x-tag-close-margin-left, 3px);margin-inline-start:var(--x-tag-close-margin-left, 3px);padding:0;color:var(--x-tag-close-color, var(--x-color-icon, rgba(0, 0, 0, 0.45)));font-size:var(--x-tag-close-icon-size, 10px);line-height:var(--x-tag-close-line-height, 1);cursor:pointer;border:none;background:transparent;-webkit-transition:all var(--x-tag-motion-duration, var(--x-motion-duration-mid, 0.2s));transition:all var(--x-tag-motion-duration, var(--x-motion-duration-mid, 0.2s))}.x-tag-close-icon:hover{color:var(--x-tag-close-color-hover, var(--x-color-icon-hover, rgba(0, 0, 0, 0.88)))}.x-tag-close-icon:focus{outline:none}.x-tag-close-icon svg{width:1em;height:1em;fill:currentColor}:host(.x-tag-magenta.x-tag-outlined){color:#c41d7f;background:transparent;border-color:#ffadd2}:host(.x-tag-magenta.x-tag-outlined) .x-tag-close-icon{color:#c41d7f;opacity:0.65}:host(.x-tag-magenta.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-magenta.x-tag-filled){color:#c41d7f;background:#fff0f6;border-color:transparent}:host(.x-tag-magenta.x-tag-filled) .x-tag-close-icon{color:#c41d7f;opacity:0.65}:host(.x-tag-magenta.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-magenta.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#c41d7f;border-color:#c41d7f}:host(.x-tag-magenta.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-magenta.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-red.x-tag-outlined){color:#cf1322;background:transparent;border-color:#ffa39e}:host(.x-tag-red.x-tag-outlined) .x-tag-close-icon{color:#cf1322;opacity:0.65}:host(.x-tag-red.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-red.x-tag-filled){color:#cf1322;background:#fff1f0;border-color:transparent}:host(.x-tag-red.x-tag-filled) .x-tag-close-icon{color:#cf1322;opacity:0.65}:host(.x-tag-red.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-red.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#cf1322;border-color:#cf1322}:host(.x-tag-red.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-red.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-volcano.x-tag-outlined){color:#d4380d;background:transparent;border-color:#ffbb96}:host(.x-tag-volcano.x-tag-outlined) .x-tag-close-icon{color:#d4380d;opacity:0.65}:host(.x-tag-volcano.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-volcano.x-tag-filled){color:#d4380d;background:#fff2e8;border-color:transparent}:host(.x-tag-volcano.x-tag-filled) .x-tag-close-icon{color:#d4380d;opacity:0.65}:host(.x-tag-volcano.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-volcano.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#d4380d;border-color:#d4380d}:host(.x-tag-volcano.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-volcano.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-orange.x-tag-outlined){color:#d46b08;background:transparent;border-color:#ffd591}:host(.x-tag-orange.x-tag-outlined) .x-tag-close-icon{color:#d46b08;opacity:0.65}:host(.x-tag-orange.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-orange.x-tag-filled){color:#d46b08;background:#fff7e6;border-color:transparent}:host(.x-tag-orange.x-tag-filled) .x-tag-close-icon{color:#d46b08;opacity:0.65}:host(.x-tag-orange.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-orange.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#d46b08;border-color:#d46b08}:host(.x-tag-orange.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-orange.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-gold.x-tag-outlined){color:#d48806;background:transparent;border-color:#ffe58f}:host(.x-tag-gold.x-tag-outlined) .x-tag-close-icon{color:#d48806;opacity:0.65}:host(.x-tag-gold.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-gold.x-tag-filled){color:#d48806;background:#fffbe6;border-color:transparent}:host(.x-tag-gold.x-tag-filled) .x-tag-close-icon{color:#d48806;opacity:0.65}:host(.x-tag-gold.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-gold.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#d48806;border-color:#d48806}:host(.x-tag-gold.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-gold.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-lime.x-tag-outlined){color:#7cb305;background:transparent;border-color:#eaff8f}:host(.x-tag-lime.x-tag-outlined) .x-tag-close-icon{color:#7cb305;opacity:0.65}:host(.x-tag-lime.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-lime.x-tag-filled){color:#7cb305;background:#fcffe6;border-color:transparent}:host(.x-tag-lime.x-tag-filled) .x-tag-close-icon{color:#7cb305;opacity:0.65}:host(.x-tag-lime.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-lime.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#7cb305;border-color:#7cb305}:host(.x-tag-lime.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-lime.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-green.x-tag-outlined){color:#389e0d;background:transparent;border-color:#b7eb8f}:host(.x-tag-green.x-tag-outlined) .x-tag-close-icon{color:#389e0d;opacity:0.65}:host(.x-tag-green.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-green.x-tag-filled){color:#389e0d;background:#f6ffed;border-color:transparent}:host(.x-tag-green.x-tag-filled) .x-tag-close-icon{color:#389e0d;opacity:0.65}:host(.x-tag-green.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-green.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#389e0d;border-color:#389e0d}:host(.x-tag-green.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-green.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-cyan.x-tag-outlined){color:#08979c;background:transparent;border-color:#87e8de}:host(.x-tag-cyan.x-tag-outlined) .x-tag-close-icon{color:#08979c;opacity:0.65}:host(.x-tag-cyan.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-cyan.x-tag-filled){color:#08979c;background:#e6fffb;border-color:transparent}:host(.x-tag-cyan.x-tag-filled) .x-tag-close-icon{color:#08979c;opacity:0.65}:host(.x-tag-cyan.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-cyan.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#08979c;border-color:#08979c}:host(.x-tag-cyan.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-cyan.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-blue.x-tag-outlined){color:#1677ff;background:transparent;border-color:#91caff}:host(.x-tag-blue.x-tag-outlined) .x-tag-close-icon{color:#1677ff;opacity:0.65}:host(.x-tag-blue.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-blue.x-tag-filled){color:#1677ff;background:#e6f4ff;border-color:transparent}:host(.x-tag-blue.x-tag-filled) .x-tag-close-icon{color:#1677ff;opacity:0.65}:host(.x-tag-blue.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-blue.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#1677ff;border-color:#1677ff}:host(.x-tag-blue.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-blue.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-geekblue.x-tag-outlined){color:#1d39c4;background:transparent;border-color:#adc6ff}:host(.x-tag-geekblue.x-tag-outlined) .x-tag-close-icon{color:#1d39c4;opacity:0.65}:host(.x-tag-geekblue.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-geekblue.x-tag-filled){color:#1d39c4;background:#f0f5ff;border-color:transparent}:host(.x-tag-geekblue.x-tag-filled) .x-tag-close-icon{color:#1d39c4;opacity:0.65}:host(.x-tag-geekblue.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-geekblue.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#1d39c4;border-color:#1d39c4}:host(.x-tag-geekblue.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-geekblue.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-purple.x-tag-outlined){color:#531dab;background:transparent;border-color:#d3adf7}:host(.x-tag-purple.x-tag-outlined) .x-tag-close-icon{color:#531dab;opacity:0.65}:host(.x-tag-purple.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-purple.x-tag-filled){color:#531dab;background:#f9f0ff;border-color:transparent}:host(.x-tag-purple.x-tag-filled) .x-tag-close-icon{color:#531dab;opacity:0.65}:host(.x-tag-purple.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-purple.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#531dab;border-color:#531dab}:host(.x-tag-purple.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-purple.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-pink.x-tag-outlined){color:#c41d7f;background:transparent;border-color:#ffadd2}:host(.x-tag-pink.x-tag-outlined) .x-tag-close-icon{color:#c41d7f;opacity:0.65}:host(.x-tag-pink.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-pink.x-tag-filled){color:#c41d7f;background:#fff0f6;border-color:transparent}:host(.x-tag-pink.x-tag-filled) .x-tag-close-icon{color:#c41d7f;opacity:0.65}:host(.x-tag-pink.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-pink.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#c41d7f;border-color:#c41d7f}:host(.x-tag-pink.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-pink.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-yellow.x-tag-outlined){color:#d4b106;background:transparent;border-color:#fffb8f}:host(.x-tag-yellow.x-tag-outlined) .x-tag-close-icon{color:#d4b106;opacity:0.65}:host(.x-tag-yellow.x-tag-outlined) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-yellow.x-tag-filled){color:#d4b106;background:#feffe6;border-color:transparent}:host(.x-tag-yellow.x-tag-filled) .x-tag-close-icon{color:#d4b106;opacity:0.65}:host(.x-tag-yellow.x-tag-filled) .x-tag-close-icon:hover{opacity:1}:host(.x-tag-yellow.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:#d4b106;border-color:#d4b106}:host(.x-tag-yellow.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-yellow.x-tag-solid) .x-tag-close-icon:hover{color:#fff}:host(.x-tag-success.x-tag-outlined){color:var(--x-tag-success-color, var(--x-color-success, #52c41a));background:transparent;border-color:var(--x-tag-success-border-color, var(--x-color-success-border, #b7eb8f))}:host(.x-tag-success.x-tag-filled){color:var(--x-tag-success-color, var(--x-color-success, #52c41a));background:var(--x-tag-success-bg, var(--x-color-success-bg, #f6ffed));border-color:transparent}:host(.x-tag-success.x-tag-solid){color:var(--x-color-text-light-solid, #fff);background:var(--x-tag-success-color, var(--x-color-success, #52c41a));border-color:var(--x-tag-success-color, var(--x-color-success, #52c41a))}:host(.x-tag-processing.x-tag-outlined){color:var(--x-tag-processing-color, var(--x-color-primary, #1677ff));background:transparent;border-color:var(--x-tag-processing-border-color, var(--x-color-primary-border, #91caff))}:host(.x-tag-processing.x-tag-filled){color:var(--x-tag-processing-color, var(--x-color-primary, #1677ff));background:var(--x-tag-processing-bg, var(--x-color-primary-bg, #e6f4ff));border-color:transparent}:host(.x-tag-processing.x-tag-solid){color:var(--x-tag-processing-color, var(--x-color-primary, #1677ff));background:var(--x-tag-processing-color, var(--x-color-primary, #1677ff));border-color:var(--x-tag-processing-color, var(--x-color-primary, #1677ff))}:host(.x-tag-error.x-tag-outlined){color:var(--x-tag-error-color, var(--x-color-error, #ff4d4f));background:transparent;border-color:var(--x-tag-error-border-color, var(--x-color-error-border, #ffccc7))}:host(.x-tag-error.x-tag-filled){color:var(--x-tag-error-color, var(--x-color-error, #ff4d4f));background:var(--x-tag-error-bg, var(--x-color-error-bg, #fff2f0));border-color:transparent}:host(.x-tag-error.x-tag-solid){color:var(--x-tag-error-color, var(--x-color-error, #ff4d4f));background:var(--x-tag-error-color, var(--x-color-error, #ff4d4f));border-color:var(--x-tag-error-color, var(--x-color-error, #ff4d4f))}:host(.x-tag-warning.x-tag-outlined){color:var(--x-tag-warning-color, var(--x-color-warning, #faad14));background:transparent;border-color:var(--x-tag-warning-border-color, var(--x-color-warning-border, #ffe58f))}:host(.x-tag-warning.x-tag-filled){color:var(--x-tag-warning-color, var(--x-color-warning, #faad14));background:var(--x-tag-warning-bg, var(--x-color-warning-bg, #fffbe6));border-color:transparent}:host(.x-tag-warning.x-tag-solid){color:var(--x-tag-warning-color, var(--x-color-warning, #faad14));background:var(--x-tag-warning-color, var(--x-color-warning, #faad14));border-color:var(--x-tag-warning-color, var(--x-color-warning, #faad14))}:host(.x-tag-default){color:var(--x-tag-default-color, var(--x-color-text, rgba(0, 0, 0, 0.88)));background:var(--x-tag-default-bg, var(--x-color-fill-quaternary, rgba(0, 0, 0, 0.02)));border-color:var(--x-tag-default-border-color, var(--x-color-border, #d9d9d9))}:host(.x-tag-solid) .x-tag-close-icon{color:rgba(255, 255, 255, 0.75)}:host(.x-tag-solid) .x-tag-close-icon:hover{color:var(--x-color-text-light-solid, #fff)}`;
|
|
1545
|
+
|
|
1546
|
+
/* eslint-disable @typescript-eslint/no-inferrable-types */
|
|
1547
|
+
// Preset colors list
|
|
1548
|
+
const PRESET_COLORS = [
|
|
1549
|
+
'magenta', 'red', 'volcano', 'orange', 'gold', 'lime', 'green',
|
|
1550
|
+
'cyan', 'blue', 'geekblue', 'purple', 'pink'
|
|
1551
|
+
];
|
|
1552
|
+
// Status colors
|
|
1553
|
+
const STATUS_COLORS = ['success', 'processing', 'error', 'warning', 'default'];
|
|
1554
|
+
const XTag = class {
|
|
1555
|
+
constructor(hostRef) {
|
|
1556
|
+
index.registerInstance(this, hostRef);
|
|
1557
|
+
this.xClose = index.createEvent(this, "xClose", 7);
|
|
1558
|
+
this.xClick = index.createEvent(this, "xClick", 7);
|
|
1559
|
+
}
|
|
1560
|
+
get el() { return index.getElement(this); }
|
|
1561
|
+
// ========================================
|
|
1562
|
+
// PROPS
|
|
1563
|
+
// ========================================
|
|
1564
|
+
/**
|
|
1565
|
+
* Whether the Tag can be closed.
|
|
1566
|
+
* @example
|
|
1567
|
+
* <x-tag closable>Closable</x-tag>
|
|
1568
|
+
*/
|
|
1569
|
+
closable = false;
|
|
1570
|
+
/**
|
|
1571
|
+
* Custom close icon. Set to null or false to hide close button.
|
|
1572
|
+
* @example
|
|
1573
|
+
* <x-tag closable closeIcon={false}></x-tag>
|
|
1574
|
+
*/
|
|
1575
|
+
closeIcon = true;
|
|
1576
|
+
/**
|
|
1577
|
+
* Color of the Tag (preset color or custom hex/rgb).
|
|
1578
|
+
* @example
|
|
1579
|
+
* <x-tag color="magenta"></x-tag>
|
|
1580
|
+
*/
|
|
1581
|
+
color;
|
|
1582
|
+
/**
|
|
1583
|
+
* Whether the Tag is disabled.
|
|
1584
|
+
* @example
|
|
1585
|
+
* <x-tag disabled></x-tag>
|
|
1586
|
+
*/
|
|
1587
|
+
disabled = false;
|
|
1588
|
+
/**
|
|
1589
|
+
* The address to jump when clicking (renders as <a> tag).
|
|
1590
|
+
* @example
|
|
1591
|
+
* <x-tag href="/docs" target="_blank">Docs</x-tag>
|
|
1592
|
+
*/
|
|
1593
|
+
href;
|
|
1594
|
+
/**
|
|
1595
|
+
* Target for href link.
|
|
1596
|
+
* @example
|
|
1597
|
+
* <x-tag href="/docs" target="_blank">Docs</x-tag>
|
|
1598
|
+
*/
|
|
1599
|
+
target;
|
|
1600
|
+
/**
|
|
1601
|
+
* Whether the Tag is visible.
|
|
1602
|
+
* @example
|
|
1603
|
+
* <x-tag visible={false}></x-tag>
|
|
1604
|
+
*/
|
|
1605
|
+
visible = true;
|
|
1606
|
+
/**
|
|
1607
|
+
* Variant style of the tag: outlined (default), filled, or solid.
|
|
1608
|
+
* @example
|
|
1609
|
+
* <x-tag variant="solid" color="green"></x-tag>
|
|
1610
|
+
*/
|
|
1611
|
+
variant = 'outlined';
|
|
1612
|
+
/**
|
|
1613
|
+
* Whether the tag is bordered.
|
|
1614
|
+
* @example
|
|
1615
|
+
* <x-tag bordered={false}></x-tag>
|
|
1616
|
+
*/
|
|
1617
|
+
bordered = true;
|
|
1618
|
+
// ========================================
|
|
1619
|
+
// STATE
|
|
1620
|
+
// ========================================
|
|
1621
|
+
/**
|
|
1622
|
+
* Whether tag is in closing animation.
|
|
1623
|
+
*/
|
|
1624
|
+
isClosing = false;
|
|
1625
|
+
// ========================================
|
|
1626
|
+
// EVENTS
|
|
1627
|
+
// ========================================
|
|
1628
|
+
/**
|
|
1629
|
+
* Callback executed when tag is closed.
|
|
1630
|
+
* @example
|
|
1631
|
+
* <x-tag closable onXClose={(ev) => console.log(ev.detail)}></x-tag>
|
|
1632
|
+
*/
|
|
1633
|
+
xClose;
|
|
1634
|
+
/**
|
|
1635
|
+
* Callback when tag is clicked.
|
|
1636
|
+
* @example
|
|
1637
|
+
* <x-tag onXClick={(ev) => console.log(ev.detail)}></x-tag>
|
|
1638
|
+
*/
|
|
1639
|
+
xClick;
|
|
1640
|
+
// ========================================
|
|
1641
|
+
// PRIVATE METHODS
|
|
1642
|
+
// ========================================
|
|
1643
|
+
/**
|
|
1644
|
+
* Handles the close interaction to hide the tag.
|
|
1645
|
+
*
|
|
1646
|
+
* Flow:
|
|
1647
|
+
* 1. Stops event propagation.
|
|
1648
|
+
* 2. Checks if disabled; if so, returns.
|
|
1649
|
+
* 3. Emits `xClose` event with the mouse event.
|
|
1650
|
+
* 4. If the event was not prevented by the consumer:
|
|
1651
|
+
* - Sets `isClosing` to true to trigger exit animation.
|
|
1652
|
+
* - Uses `setTimeout` to wait for animation to finish.
|
|
1653
|
+
* - Sets `visible` to false, removing the tag from view.
|
|
1654
|
+
*
|
|
1655
|
+
* @param e - The mouse event from the close button.
|
|
1656
|
+
*/
|
|
1657
|
+
handleClose = (e) => {
|
|
1658
|
+
e.stopPropagation();
|
|
1659
|
+
if (this.disabled)
|
|
1660
|
+
return;
|
|
1661
|
+
// Emit event with original event.
|
|
1662
|
+
this.xClose.emit(e);
|
|
1663
|
+
// If not prevented, hide the tag after animation.
|
|
1664
|
+
if (!e.defaultPrevented) {
|
|
1665
|
+
this.isClosing = true;
|
|
1666
|
+
// Wait for animation
|
|
1667
|
+
setTimeout(() => {
|
|
1668
|
+
this.visible = false;
|
|
1669
|
+
}, 200);
|
|
1670
|
+
}
|
|
1671
|
+
};
|
|
1672
|
+
/**
|
|
1673
|
+
* Handles click events on the tag itself.
|
|
1674
|
+
* Emits `xClick` if not disabled.
|
|
1675
|
+
*
|
|
1676
|
+
* @param e - The mouse event.
|
|
1677
|
+
*/
|
|
1678
|
+
handleClick = (e) => {
|
|
1679
|
+
if (this.disabled)
|
|
1680
|
+
return;
|
|
1681
|
+
this.xClick.emit(e);
|
|
1682
|
+
};
|
|
1683
|
+
/**
|
|
1684
|
+
* Checks if the current color is one of the predefined preset colors.
|
|
1685
|
+
* @returns {boolean} True if the color is a preset.
|
|
1686
|
+
*/
|
|
1687
|
+
isPresetColor() {
|
|
1688
|
+
return !!this.color && PRESET_COLORS.includes(this.color);
|
|
1689
|
+
}
|
|
1690
|
+
/**
|
|
1691
|
+
* Checks if the current color is one of the predefined status colors.
|
|
1692
|
+
* @returns {boolean} True if the color is a status color.
|
|
1693
|
+
*/
|
|
1694
|
+
isStatusColor() {
|
|
1695
|
+
return !!this.color && STATUS_COLORS.includes(this.color);
|
|
1696
|
+
}
|
|
1697
|
+
/**
|
|
1698
|
+
* Checks if the current color is a custom color (e.g., hex or rgb)
|
|
1699
|
+
* that is not part of the preset or status color sets.
|
|
1700
|
+
* @returns {boolean} True if the color is a custom color.
|
|
1701
|
+
*/
|
|
1702
|
+
isCustomColor() {
|
|
1703
|
+
return !!this.color && !this.isPresetColor() && !this.isStatusColor();
|
|
1704
|
+
}
|
|
1705
|
+
/**
|
|
1706
|
+
* Returns a style object for custom colors, adjusting background, border,
|
|
1707
|
+
* and text colors based on the tag's variant.
|
|
1708
|
+
* @returns {Object} An object with CSS property-value pairs.
|
|
1709
|
+
*/
|
|
1710
|
+
getCustomStyle() {
|
|
1711
|
+
if (!this.isCustomColor())
|
|
1712
|
+
return {};
|
|
1713
|
+
const style = {};
|
|
1714
|
+
if (this.variant === 'solid') {
|
|
1715
|
+
// Solid: dark background, white text
|
|
1716
|
+
style.backgroundColor = this.color;
|
|
1717
|
+
style.borderColor = this.color;
|
|
1718
|
+
style.color = '#fff';
|
|
1719
|
+
}
|
|
1720
|
+
else if (this.variant === 'filled') {
|
|
1721
|
+
// Filled: light background (we can't auto-lighten, so use same as solid)
|
|
1722
|
+
style.backgroundColor = this.color;
|
|
1723
|
+
style.borderColor = 'transparent';
|
|
1724
|
+
style.color = '#fff';
|
|
1725
|
+
}
|
|
1726
|
+
else {
|
|
1727
|
+
// Outlined (default): transparent bg, colored border & text
|
|
1728
|
+
style.borderColor = this.color;
|
|
1729
|
+
style.color = this.color;
|
|
1730
|
+
style.backgroundColor = 'transparent';
|
|
1731
|
+
}
|
|
1732
|
+
return style;
|
|
1733
|
+
}
|
|
1734
|
+
// ========================================
|
|
1735
|
+
// RENDER
|
|
1736
|
+
// ========================================
|
|
1737
|
+
/**
|
|
1738
|
+
* Renders the close icon if the tag is configured to be closable.
|
|
1739
|
+
* @returns {JSX.Element | null} The close icon element or null if not closable.
|
|
1740
|
+
*/
|
|
1741
|
+
renderCloseIcon() {
|
|
1742
|
+
if (!this.closable || this.closeIcon === false)
|
|
1743
|
+
return null;
|
|
1744
|
+
return (index.h("span", { class: "x-tag-close-icon", onClick: this.handleClose, role: "button", tabindex: this.disabled ? -1 : 0, "aria-label": "close" }, index.h("x-icon", { name: config.getIcon('close') })));
|
|
1745
|
+
}
|
|
1746
|
+
/**
|
|
1747
|
+
* Calculates the CSS classes for the tag based on its properties and state.
|
|
1748
|
+
* @returns {Object} An object mapping class names to boolean values.
|
|
1749
|
+
*/
|
|
1750
|
+
getHostClasses() {
|
|
1751
|
+
const isPreset = this.isPresetColor();
|
|
1752
|
+
const isStatus = this.isStatusColor();
|
|
1753
|
+
const isCustom = this.isCustomColor();
|
|
1754
|
+
return {
|
|
1755
|
+
'x-tag': true,
|
|
1756
|
+
'x-tag-hidden': !this.visible,
|
|
1757
|
+
'x-tag-closing': this.isClosing,
|
|
1758
|
+
'x-tag-disabled': this.disabled,
|
|
1759
|
+
'x-tag-borderless': !this.bordered,
|
|
1760
|
+
[`x-tag-${this.variant}`]: true,
|
|
1761
|
+
[`x-tag-${this.color}`]: isPreset || isStatus,
|
|
1762
|
+
'x-tag-has-color': isCustom,
|
|
1763
|
+
'x-tag-closable': this.closable,
|
|
1764
|
+
};
|
|
1765
|
+
}
|
|
1766
|
+
/**
|
|
1767
|
+
* Renders the Tag component.
|
|
1768
|
+
*
|
|
1769
|
+
* Flow:
|
|
1770
|
+
* 1. Checks `visible` state; if false, renders nothing.
|
|
1771
|
+
* 2. Determines tag element type: `<a>` if `href` is present, otherwise `<span>`.
|
|
1772
|
+
* 3. Calculates host classes based on props (color, variant, bordered, closable).
|
|
1773
|
+
* 4. Calculates custom styles for non-preset colors.
|
|
1774
|
+
* 5. Renders:
|
|
1775
|
+
* - Icon slot.
|
|
1776
|
+
* - Main content wrapper (text/children).
|
|
1777
|
+
* - Close icon (if `closable` is true).
|
|
1778
|
+
*
|
|
1779
|
+
* @returns JSX.Element | null
|
|
1780
|
+
*/
|
|
1781
|
+
render() {
|
|
1782
|
+
if (!this.visible)
|
|
1783
|
+
return null;
|
|
1784
|
+
const TagElement = this.href ? 'a' : 'span';
|
|
1785
|
+
const linkProps = this.href ? { href: this.href, target: this.target } : {};
|
|
1786
|
+
return (index.h(index.Host, { class: this.getHostClasses(), style: this.getCustomStyle(), onClick: this.handleClick }, index.h("slot", { name: "icon" }), index.h(TagElement, { class: "x-tag-content", ...linkProps }, index.h("slot", null)), this.renderCloseIcon()));
|
|
1787
|
+
}
|
|
1788
|
+
};
|
|
1789
|
+
XTag.style = xTagCss();
|
|
1790
|
+
|
|
1791
|
+
const xTextareaCss = () => `@charset "UTF-8";:root{--x-color-primary:#1677ff;--x-color-primary-rgb:22, 119, 255;--x-color-primary-contrast:#ffffff;--x-color-primary-contrast-rgb:255, 255, 255;--x-color-primary-shade:#0958d9;--x-color-primary-tint:#4096ff;--x-color-primary-bg:#e6f4ff;--x-color-primary-bg-hover:#bae0ff;--x-color-primary-border:#91caff;--x-color-primary-border-hover:#69b1ff;--x-color-primary-hover:#4096ff;--x-color-primary-active:#0958d9;--x-color-primary-text:#1677ff;--x-color-primary-text-hover:#4096ff;--x-color-primary-text-active:#0958d9;--x-color-secondary:#3dc2ff;--x-color-secondary-rgb:61, 194, 255;--x-color-secondary-contrast:#ffffff;--x-color-secondary-contrast-rgb:255, 255, 255;--x-color-secondary-shade:#36abe0;--x-color-secondary-tint:#50c8ff;--x-color-success:#52c41a;--x-color-success-rgb:82, 196, 26;--x-color-success-contrast:#ffffff;--x-color-success-contrast-rgb:255, 255, 255;--x-color-success-shade:#389e0d;--x-color-success-tint:#73d13d;--x-color-success-bg:#f6ffed;--x-color-success-bg-hover:#d9f7be;--x-color-success-border:#b7eb8f;--x-color-success-border-hover:#95de64;--x-color-success-hover:#73d13d;--x-color-success-active:#389e0d;--x-color-success-text:#52c41a;--x-color-success-text-hover:#73d13d;--x-color-success-text-active:#389e0d;--x-color-warning:#faad14;--x-color-warning-rgb:250, 173, 20;--x-color-warning-contrast:#000000;--x-color-warning-contrast-rgb:0, 0, 0;--x-color-warning-shade:#d48806;--x-color-warning-tint:#ffc53d;--x-color-warning-bg:#fffbe6;--x-color-warning-bg-hover:#fff1b8;--x-color-warning-border:#ffe58f;--x-color-warning-border-hover:#ffd666;--x-color-warning-hover:#ffc53d;--x-color-warning-active:#d48806;--x-color-warning-text:#faad14;--x-color-warning-text-hover:#ffc53d;--x-color-warning-text-active:#d48806;--x-color-danger:#ff4d4f;--x-color-danger-rgb:255, 77, 79;--x-color-danger-contrast:#ffffff;--x-color-danger-contrast-rgb:255, 255, 255;--x-color-danger-shade:#cf1322;--x-color-danger-tint:#ff7875;--x-color-error:#ff4d4f;--x-color-error-rgb:255, 77, 79;--x-color-error-bg:#fff2f0;--x-color-error-bg-hover:#ffccc7;--x-color-error-border:#ffa39e;--x-color-error-border-hover:#ff7875;--x-color-error-hover:#ff7875;--x-color-error-active:#d9363e;--x-color-error-text:#ff4d4f;--x-color-error-text-hover:#ff7875;--x-color-error-text-active:#d9363e;--x-color-info:#1677ff;--x-color-info-rgb:22, 119, 255;--x-color-info-bg:#e6f4ff;--x-color-info-bg-hover:#bae0ff;--x-color-info-border:#91caff;--x-color-info-border-hover:#69b1ff;--x-color-info-hover:#69b1ff;--x-color-info-active:#0958d9;--x-color-info-text:#1677ff;--x-color-info-text-hover:#69b1ff;--x-color-info-text-active:#0958d9;--x-color-text:rgba(0, 0, 0, 0.88);--x-color-text-secondary:rgba(0, 0, 0, 0.65);--x-color-text-tertiary:rgba(0, 0, 0, 0.45);--x-color-text-quaternary:rgba(0, 0, 0, 0.25);--x-color-text-disabled:rgba(0, 0, 0, 0.25);--x-color-text-placeholder:rgba(0, 0, 0, 0.25);--x-color-text-heading:rgba(0, 0, 0, 0.88);--x-color-text-label:rgba(0, 0, 0, 0.65);--x-color-text-description:rgba(0, 0, 0, 0.45);--x-color-text-light-solid:#ffffff;--x-color-bg-container:#ffffff;--x-color-bg-elevated:#ffffff;--x-color-bg-layout:#f5f5f5;--x-color-bg-spotlight:rgba(0, 0, 0, 0.85);--x-color-bg-mask:rgba(0, 0, 0, 0.45);--x-color-bg-base:#ffffff;--x-color-bg-container-disabled:#f5f5f5;--x-color-bg-container-loading:rgba(255, 255, 255, 0.65);--x-color-white:#ffffff;--x-color-fill:rgba(0, 0, 0, 0.15);--x-color-fill-secondary:rgba(0, 0, 0, 0.06);--x-color-fill-tertiary:rgba(0, 0, 0, 0.04);--x-color-fill-quaternary:rgba(0, 0, 0, 0.02);--x-color-border:#d9d9d9;--x-color-border-secondary:#f0f0f0;--x-color-border-bg:#ffffff;--x-color-split:rgba(5, 5, 5, 0.06);--x-color-dark:#222428;--x-color-dark-rgb:34, 36, 40;--x-color-dark-contrast:#ffffff;--x-color-dark-contrast-rgb:255, 255, 255;--x-color-dark-shade:#1e2023;--x-color-dark-tint:#383a3e;--x-color-medium:#92949c;--x-color-medium-rgb:146, 148, 156;--x-color-medium-contrast:#ffffff;--x-color-medium-contrast-rgb:255, 255, 255;--x-color-medium-shade:#808289;--x-color-medium-tint:#9d9fa6;--x-color-light:#f4f5f8;--x-color-light-rgb:244, 245, 248;--x-color-light-contrast:#000000;--x-color-light-contrast-rgb:0, 0, 0;--x-color-light-shade:#d7d8da;--x-color-light-tint:#f5f6f9;--x-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--x-font-family-code:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;--x-font-size:14px;--x-font-size-sm:12px;--x-font-size-lg:16px;--x-font-size-xl:20px;--x-font-size-heading-1:38px;--x-font-size-heading-2:30px;--x-font-size-heading-3:24px;--x-font-size-heading-4:20px;--x-font-size-heading-5:16px;--x-line-height:1.5714285714285714;--x-line-height-lg:1.5;--x-line-height-sm:1.6666666666666667;--x-line-height-heading-1:1.2105263157894737;--x-line-height-heading-2:1.2666666666666666;--x-line-height-heading-3:1.3333333333333333;--x-line-height-heading-4:1.4;--x-line-height-heading-5:1.5;--x-font-weight-normal:400;--x-font-weight-medium:500;--x-font-weight-semibold:600;--x-font-weight-strong:600;--x-font-size-base:14px;--x-font-size-xxl:24px;--x-line-height-base:1.5714285714285714;--x-spacing-xxs:4px;--x-spacing-xs:8px;--x-spacing-sm:12px;--x-spacing-md:16px;--x-spacing-lg:20px;--x-spacing-xl:24px;--x-spacing-xxl:32px;--x-spacing-xxxl:48px;--x-margin-xxs:4px;--x-margin-xs:8px;--x-margin-sm:12px;--x-margin-md:16px;--x-margin-lg:24px;--x-margin-xl:32px;--x-margin-xxl:48px;--x-padding-xxs:4px;--x-padding-xs:8px;--x-padding-sm:12px;--x-padding-md:16px;--x-padding-lg:24px;--x-padding-content-horizontal-lg:24px;--x-padding-content-vertical-lg:12px;--x-padding-content-horizontal:16px;--x-padding-content-vertical:12px;--x-padding-content-horizontal-sm:16px;--x-padding-content-vertical-sm:8px;--x-border-radius:6px;--x-border-radius-xs:2px;--x-border-radius-sm:4px;--x-border-radius-lg:8px;--x-border-radius-xl:12px;--x-border-radius-outer:4px;--x-border-radius-base:6px;--x-border-width:1px;--x-border-width-base:1px;--x-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-shadow-lg:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-secondary:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tertiary:0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);--x-box-shadow-popover-arrow:2px 2px 5px rgba(0, 0, 0, 0.05);--x-box-shadow-card:0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);--x-box-shadow-drawer-right:-6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12), -9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-left:6px 0 16px 0 rgba(0, 0, 0, 0.08), 3px 0 6px -4px rgba(0, 0, 0, 0.12), 9px 0 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-up:0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-drawer-down:0 -6px 16px 0 rgba(0, 0, 0, 0.08), 0 -3px 6px -4px rgba(0, 0, 0, 0.12), 0 -9px 28px 8px rgba(0, 0, 0, 0.05);--x-box-shadow-tabs-overflow-left:inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-right:inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-top:inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);--x-box-shadow-tabs-overflow-bottom:inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);--x-motion-duration-fast:0.1s;--x-motion-duration-mid:0.2s;--x-motion-duration-slow:0.3s;--x-motion-ease-in-out:cubic-bezier(0.645, 0.045, 0.355, 1);--x-motion-ease-out:cubic-bezier(0.215, 0.61, 0.355, 1);--x-motion-ease-in:cubic-bezier(0.55, 0.055, 0.675, 0.19);--x-motion-ease-out-back:cubic-bezier(0.12, 0.4, 0.29, 1.46);--x-motion-ease-in-back:cubic-bezier(0.71, -0.46, 0.88, 0.6);--x-motion-ease-in-out-circle:cubic-bezier(0.78, 0.14, 0.15, 0.86);--x-motion-ease-out-circle:cubic-bezier(0.08, 0.82, 0.17, 1);--x-motion-ease-in-circle:cubic-bezier(0.6, 0.04, 0.98, 0.34);--x-motion-ease-in-quint:cubic-bezier(0.755, 0.05, 0.855, 0.06);--x-motion-ease-out-quint:cubic-bezier(0.23, 1, 0.32, 1);--x-z-index-base:0;--x-z-index-popup-base:1000;--x-z-index-popup:1030;--x-z-index-affix:10;--x-z-index-modal:1000;--x-z-index-modal-mask:1000;--x-z-index-drawer:1000;--x-z-index-popover:1030;--x-z-index-dropdown:1050;--x-z-index-tooltip:1070;--x-z-index-notification:1080;--x-z-index-message:1090;--x-z-index-popconfirm:1060;--x-z-index-table-fixed:10;--x-opacity-loading:0.65;--x-opacity-image:1;--x-opacity-disabled:0.5;--x-control-height:32px;--x-control-height-xs:24px;--x-control-height-sm:24px;--x-control-height-lg:40px;--x-control-radio-size:16px;--x-control-checkbox-size:16px;--x-control-padding-horizontal:12px;--x-control-padding-horizontal-sm:8px;--x-control-outline-width:2px;--x-control-outline:rgba(5, 145, 255, 0.1);--x-control-item-bg-hover:rgba(0, 0, 0, 0.04);--x-control-item-bg-active:#e6f4ff;--x-control-item-bg-active-hover:#bae0ff;--x-control-item-bg-active-disabled:rgba(0, 0, 0, 0.15);--x-control-tmp-outline:rgba(0, 0, 0, 0.02);--x-color-yellow:#fadb14;--x-color-yellow-rgb:250, 219, 20;--x-font-family-base:var(--x-font-family);--x-color-link:#1677ff;--x-color-link-hover:#69b1ff;--x-color-link-active:#0958d9;--x-color-icon:rgba(0, 0, 0, 0.45);--x-color-icon-hover:rgba(0, 0, 0, 0.88);--x-color-highlight:#ff4d4f;--x-color-bg-text-hover:rgba(0, 0, 0, 0.06);--x-color-bg-text-active:rgba(0, 0, 0, 0.15);--x-screen-xs:480px;--x-screen-xs-min:480px;--x-screen-xs-max:575px;--x-screen-sm:576px;--x-screen-sm-min:576px;--x-screen-sm-max:767px;--x-screen-md:768px;--x-screen-md-min:768px;--x-screen-md-max:991px;--x-screen-lg:992px;--x-screen-lg-min:992px;--x-screen-lg-max:1199px;--x-screen-xl:1200px;--x-screen-xl-min:1200px;--x-screen-xl-max:1599px;--x-screen-xxl:1600px;--x-screen-xxl-min:1600px;--x-color-fill-content:rgba(0, 0, 0, 0.06);--x-color-fill-content-hover:rgba(0, 0, 0, 0.15);--x-color-fill-alter:rgba(0, 0, 0, 0.02);--x-scrollbar-width:12px;--x-scrollbar-track-bg:rgba(0, 0, 0, 0.04);--x-scrollbar-thumb-bg:rgba(0, 0, 0, 0.25);--x-scrollbar-thumb-bg-hover:rgba(0, 0, 0, 0.35);--x-menu-dark-bg:#001529;--x-menu-dark-item-bg:#001529;--x-menu-dark-popup-bg:#001529;--x-menu-dark-submenu-item-bg:#000c17}:host{display:inline-block;width:100%;position:relative;font-family:inherit;vertical-align:bottom}.x-textarea{position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%;min-width:0;padding:0 var(--x-control-padding-horizontal, var(--x-spacing-md, 12px));min-height:var(--x-control-height, var(--x-size-control-height, 32px));background-color:var(--x-control-bg, var(--x-color-bg-container, #ffffff));border:var(--x-control-border-width, var(--x-border-width-base, 1px)) solid var(--x-control-border-color, var(--x-color-border, #d9d9d9));border-radius:var(--x-control-border-radius, var(--x-border-radius-base, 6px));-webkit-transition:all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1);-webkit-box-sizing:border-box;box-sizing:border-box}.x-textarea:hover:not(.disabled):not([disabled]):not([class*=-disabled]){border-color:var(--x-control-border-color-hover, var(--x-color-primary-hover, #4096ff))}.x-textarea.focused:not(.disabled):not([disabled]):not([class*=-disabled]),.x-textarea:focus-within:not(.disabled):not([disabled]):not([class*=-disabled]){border-color:var(--x-control-border-color-focus, var(--x-color-primary, #1677ff)) !important;-webkit-box-shadow:0 0 0 3px var(--x-color-primary-bg, rgba(22, 119, 255, 0.06));box-shadow:0 0 0 3px var(--x-color-primary-bg, rgba(22, 119, 255, 0.06));z-index:1;outline:none}.x-textarea.disabled,.x-textarea[disabled],.x-textarea[class*=-disabled]{background-color:var(--x-control-bg-disabled, var(--x-color-bg-container-disabled, rgba(0, 0, 0, 0.04)));border-color:var(--x-control-border-color-disabled, var(--x-color-border, #d9d9d9));color:var(--x-control-color-disabled, var(--x-color-text-disabled, rgba(0, 0, 0, 0.25)));cursor:not-allowed}.x-textarea.disabled:hover,.x-textarea[disabled]:hover,.x-textarea[class*=-disabled]:hover{border-color:var(--x-control-border-color-disabled, var(--x-color-border, #d9d9d9)) !important}.x-textarea{display:block;padding:var(--x-textarea-padding-vertical, var(--x-spacing-xxs, 4px)) var(--x-textarea-padding-horizontal, var(--x-spacing-md, 12px));line-height:var(--x-textarea-line-height, var(--x-control-line-height, var(--x-line-height-base, 1.5714285714)));min-height:auto;resize:vertical}.x-textarea::-webkit-input-placeholder{color:var(--x-textarea-placeholder-color, var(--x-control-placeholder-color, var(--x-color-text-placeholder, rgba(0, 0, 0, 0.25))))}.x-textarea::-moz-placeholder{color:var(--x-textarea-placeholder-color, var(--x-control-placeholder-color, var(--x-color-text-placeholder, rgba(0, 0, 0, 0.25))))}.x-textarea:-ms-input-placeholder{color:var(--x-textarea-placeholder-color, var(--x-control-placeholder-color, var(--x-color-text-placeholder, rgba(0, 0, 0, 0.25))))}.x-textarea::-ms-input-placeholder{color:var(--x-textarea-placeholder-color, var(--x-control-placeholder-color, var(--x-color-text-placeholder, rgba(0, 0, 0, 0.25))))}.x-textarea::placeholder{color:var(--x-textarea-placeholder-color, var(--x-control-placeholder-color, var(--x-color-text-placeholder, rgba(0, 0, 0, 0.25))))}:host(.x-textarea-wrapper-error) .x-textarea{border-color:var(--x-control-border-color-error, var(--x-color-error, #ff4d4f))}:host(.x-textarea-wrapper-error) .x-textarea:hover:not(.disabled):not([disabled]){border-color:var(--x-control-border-color-error-hover, var(--x-color-error-hover, #ff7875))}:host(.x-textarea-wrapper-error) .x-textarea.focused,:host(.x-textarea-wrapper-error) .x-textarea:focus-within{border-color:var(--x-control-border-color-error, var(--x-color-error, #ff4d4f));-webkit-box-shadow:0 0 0 3px var(--x-control-focus-shadow-error-color, var(--x-color-error-bg, rgba(255, 38, 5, 0.06)));box-shadow:0 0 0 3px var(--x-control-focus-shadow-error-color, var(--x-color-error-bg, rgba(255, 38, 5, 0.06)))}:host(.x-textarea-wrapper-warning) .x-textarea{border-color:var(--x-control-border-color-warning, var(--x-color-warning, #faad14))}:host(.x-textarea-wrapper-warning) .x-textarea:hover:not(.disabled):not([disabled]){border-color:var(--x-control-border-color-warning-hover, var(--x-color-warning-hover, #ffc53d))}:host(.x-textarea-wrapper-warning) .x-textarea.focused,:host(.x-textarea-wrapper-warning) .x-textarea:focus-within{border-color:var(--x-control-border-color-warning, var(--x-color-warning, #faad14));-webkit-box-shadow:0 0 0 3px var(--x-control-focus-shadow-warning-color, var(--x-color-warning-bg, rgba(255, 215, 5, 0.1)));box-shadow:0 0 0 3px var(--x-control-focus-shadow-warning-color, var(--x-color-warning-bg, rgba(255, 215, 5, 0.1)))}:host(.x-textarea-wrapper-borderless) .x-textarea{background-color:transparent;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}:host(.x-textarea-wrapper-borderless) .x-textarea:hover{border-color:transparent}:host(.x-textarea-wrapper-borderless) .x-textarea.focused,:host(.x-textarea-wrapper-borderless) .x-textarea:focus-within{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}:host(.x-textarea-wrapper-borderless) .x-textarea{padding:0}.x-textarea-clear-icon{position:absolute;top:var(--x-textarea-padding-vertical, var(--x-spacing-xxs, 4px));right:var(--x-textarea-padding-vertical, var(--x-spacing-xxs, 4px));z-index:1;color:var(--x-textarea-clear-icon-color, var(--x-color-text-quaternary, rgba(0, 0, 0, 0.25)));font-size:var(--x-textarea-clear-icon-size, var(--x-font-size-sm, 12px));cursor:pointer;-webkit-transition:color var(--x-textarea-motion-duration-mid, var(--x-motion-duration-mid, 0.2s));transition:color var(--x-textarea-motion-duration-mid, var(--x-motion-duration-mid, 0.2s));background:var(--x-textarea-bg, var(--x-control-bg, var(--x-color-bg-container, #ffffff)))}.x-textarea-clear-icon:hover{color:var(--x-textarea-clear-icon-color-hover, var(--x-color-text-secondary, rgba(0, 0, 0, 0.45)))}:host(.x-textarea-show-count) .x-textarea{padding-bottom:var(--x-textarea-padding-bottom-count, var(--x-spacing-xl, 20px))}.x-textarea-data-count{position:absolute;bottom:var(--x-textarea-padding-vertical, var(--x-spacing-xxs, 4px));right:var(--x-textarea-padding-horizontal, var(--x-spacing-md, 12px));color:var(--x-textarea-count-color, var(--x-color-text-secondary, rgba(0, 0, 0, 0.45)));font-size:var(--x-textarea-count-font-size, var(--x-font-size-sm, 12px));white-space:nowrap;pointer-events:none}`;
|
|
1792
|
+
|
|
1793
|
+
const XTextarea = class {
|
|
1794
|
+
constructor(hostRef) {
|
|
1795
|
+
index.registerInstance(this, hostRef);
|
|
1796
|
+
this.xChange = index.createEvent(this, "xChange", 7);
|
|
1797
|
+
this.xInput = index.createEvent(this, "xInput", 7);
|
|
1798
|
+
this.xPressEnter = index.createEvent(this, "xPressEnter", 7);
|
|
1799
|
+
this.xResize = index.createEvent(this, "xResize", 7);
|
|
1800
|
+
}
|
|
1801
|
+
get el() { return index.getElement(this); }
|
|
1802
|
+
/**
|
|
1803
|
+
* If allow to remove input content with clear icon
|
|
1804
|
+
* @example
|
|
1805
|
+
* <x-textarea allowClear></x-textarea>
|
|
1806
|
+
*/
|
|
1807
|
+
allowClear = false;
|
|
1808
|
+
/**
|
|
1809
|
+
* Height autosize feature, can be set to true | false or an object { minRows: 2, maxRows: 6 }
|
|
1810
|
+
* @example
|
|
1811
|
+
* <x-textarea autoSize={{ minRows: 2, maxRows: 6 }}></x-textarea>
|
|
1812
|
+
*/
|
|
1813
|
+
autoSize = false;
|
|
1814
|
+
/**
|
|
1815
|
+
* Whether has border style
|
|
1816
|
+
* @example
|
|
1817
|
+
* <x-textarea bordered={false}></x-textarea>
|
|
1818
|
+
*/
|
|
1819
|
+
bordered = true;
|
|
1820
|
+
/**
|
|
1821
|
+
* The initial input content
|
|
1822
|
+
* @example
|
|
1823
|
+
* <x-textarea defaultValue="hello"></x-textarea>
|
|
1824
|
+
*/
|
|
1825
|
+
defaultValue = '';
|
|
1826
|
+
/**
|
|
1827
|
+
* Whether the input is disabled
|
|
1828
|
+
* @example
|
|
1829
|
+
* <x-textarea disabled></x-textarea>
|
|
1830
|
+
*/
|
|
1831
|
+
disabled = false;
|
|
1832
|
+
/**
|
|
1833
|
+
* The max length
|
|
1834
|
+
* @example
|
|
1835
|
+
* <x-textarea maxLength={200}></x-textarea>
|
|
1836
|
+
*/
|
|
1837
|
+
maxLength;
|
|
1838
|
+
/**
|
|
1839
|
+
* Whether show text count
|
|
1840
|
+
* @example
|
|
1841
|
+
* <x-textarea showCount></x-textarea>
|
|
1842
|
+
*/
|
|
1843
|
+
showCount = false;
|
|
1844
|
+
/**
|
|
1845
|
+
* Set validation status
|
|
1846
|
+
* @example
|
|
1847
|
+
* <x-textarea status="error"></x-textarea>
|
|
1848
|
+
*/
|
|
1849
|
+
status;
|
|
1850
|
+
/**
|
|
1851
|
+
* The input content
|
|
1852
|
+
* @example
|
|
1853
|
+
* <x-textarea value="demo"></x-textarea>
|
|
1854
|
+
*/
|
|
1855
|
+
value;
|
|
1856
|
+
/**
|
|
1857
|
+
* Placeholder
|
|
1858
|
+
* @example
|
|
1859
|
+
* <x-textarea placeholder="Type here"></x-textarea>
|
|
1860
|
+
*/
|
|
1861
|
+
placeholder;
|
|
1862
|
+
/**
|
|
1863
|
+
* Rows
|
|
1864
|
+
* @example
|
|
1865
|
+
* <x-textarea rows={4}></x-textarea>
|
|
1866
|
+
*/
|
|
1867
|
+
rows = 2;
|
|
1868
|
+
/**
|
|
1869
|
+
* Focus state.
|
|
1870
|
+
*/
|
|
1871
|
+
focused = false;
|
|
1872
|
+
/**
|
|
1873
|
+
* Emitted when value changes.
|
|
1874
|
+
* @example
|
|
1875
|
+
* <x-textarea onXChange={(ev) => console.log(ev.detail)}></x-textarea>
|
|
1876
|
+
*/
|
|
1877
|
+
xChange;
|
|
1878
|
+
/**
|
|
1879
|
+
* Emitted on input.
|
|
1880
|
+
* @example
|
|
1881
|
+
* <x-textarea onXInput={(ev) => console.log(ev.detail)}></x-textarea>
|
|
1882
|
+
*/
|
|
1883
|
+
xInput;
|
|
1884
|
+
/**
|
|
1885
|
+
* Emitted when pressing Enter.
|
|
1886
|
+
* @example
|
|
1887
|
+
* <x-textarea onXPressEnter={(ev) => console.log(ev.key)}></x-textarea>
|
|
1888
|
+
*/
|
|
1889
|
+
xPressEnter;
|
|
1890
|
+
/**
|
|
1891
|
+
* Emitted when textarea resizes.
|
|
1892
|
+
* @example
|
|
1893
|
+
* <x-textarea onXResize={(ev) => console.log(ev.detail)}></x-textarea>
|
|
1894
|
+
*/
|
|
1895
|
+
xResize;
|
|
1896
|
+
/**
|
|
1897
|
+
* Component lifecycle method called before loading.
|
|
1898
|
+
* Initializes the internal value from `defaultValue` if `value` is undefined.
|
|
1899
|
+
*/
|
|
1900
|
+
componentWillLoad() {
|
|
1901
|
+
if (this.value === undefined) {
|
|
1902
|
+
this.value = this.defaultValue;
|
|
1903
|
+
}
|
|
1904
|
+
}
|
|
1905
|
+
/**
|
|
1906
|
+
* Handles input events from the textarea element.
|
|
1907
|
+
*
|
|
1908
|
+
* Flow:
|
|
1909
|
+
* 1. Updates the internal `value` state with the new input value.
|
|
1910
|
+
* 2. Emits `xInput` event with the native input event.
|
|
1911
|
+
* 3. Emits `xChange` event with the new string value.
|
|
1912
|
+
* 4. If `autoSize` is enabled, triggers resize logic.
|
|
1913
|
+
*
|
|
1914
|
+
* @param e - The input event.
|
|
1915
|
+
*/
|
|
1916
|
+
handleInput(e) {
|
|
1917
|
+
const target = e.target;
|
|
1918
|
+
this.value = target.value;
|
|
1919
|
+
this.xInput.emit(e);
|
|
1920
|
+
this.xChange.emit(this.value);
|
|
1921
|
+
if (this.autoSize) {
|
|
1922
|
+
this.resizeTextarea(target);
|
|
1923
|
+
}
|
|
1924
|
+
}
|
|
1925
|
+
/**
|
|
1926
|
+
* Resizes the textarea based on its content height.
|
|
1927
|
+
*
|
|
1928
|
+
* Flow:
|
|
1929
|
+
* 1. Temporarily resets height to 'auto' to correctly measure `scrollHeight`.
|
|
1930
|
+
* 2. Sets the height to `scrollHeight` to fit content.
|
|
1931
|
+
* 3. (Note: Full implementation would respect `minRows` and `maxRows` constraints here).
|
|
1932
|
+
*
|
|
1933
|
+
* @param target - The textarea element to resize.
|
|
1934
|
+
*/
|
|
1935
|
+
resizeTextarea(target) {
|
|
1936
|
+
target.style.height = 'auto';
|
|
1937
|
+
target.style.height = `${target.scrollHeight}px`;
|
|
1938
|
+
// Logic for minRows/maxRows would go here
|
|
1939
|
+
}
|
|
1940
|
+
/**
|
|
1941
|
+
* Handles keydown events.
|
|
1942
|
+
* Emits `xPressEnter` when the Enter key is pressed.
|
|
1943
|
+
*
|
|
1944
|
+
* @param e - The keyboard event.
|
|
1945
|
+
*/
|
|
1946
|
+
handleKeyDown(e) {
|
|
1947
|
+
if (e.key === 'Enter') {
|
|
1948
|
+
this.xPressEnter.emit(e);
|
|
1949
|
+
}
|
|
1950
|
+
}
|
|
1951
|
+
/**
|
|
1952
|
+
* Handles click on the clear icon.
|
|
1953
|
+
*
|
|
1954
|
+
* Flow:
|
|
1955
|
+
* 1. Stops event propagation to avoid triggering parent clicks.
|
|
1956
|
+
* 2. Resets `value` to an empty string.
|
|
1957
|
+
* 3. Emits `xChange` with empty string.
|
|
1958
|
+
*
|
|
1959
|
+
* @param e - The mouse event.
|
|
1960
|
+
*/
|
|
1961
|
+
handleClear(e) {
|
|
1962
|
+
e.stopPropagation();
|
|
1963
|
+
this.value = '';
|
|
1964
|
+
this.xChange.emit('');
|
|
1965
|
+
}
|
|
1966
|
+
/**
|
|
1967
|
+
* Renders the Textarea component.
|
|
1968
|
+
*
|
|
1969
|
+
* Flow:
|
|
1970
|
+
* 1. Constructs wrapper classes based on state (disabled, focused, status, bordered).
|
|
1971
|
+
* 2. Renders the native `<textarea>` element with bound props and event listeners.
|
|
1972
|
+
* 3. Renders the clear icon if `allowClear` is true and value exists.
|
|
1973
|
+
* 4. Renders the character count if `showCount` is true.
|
|
1974
|
+
*
|
|
1975
|
+
* @returns JSX.Element
|
|
1976
|
+
*/
|
|
1977
|
+
render() {
|
|
1978
|
+
return (index.h(index.Host, { key: '7336e2d3945d33f7a4ee8d18966d49c7dffff769', class: {
|
|
1979
|
+
'x-textarea-wrapper': true,
|
|
1980
|
+
'x-textarea-wrapper-disabled': this.disabled,
|
|
1981
|
+
'x-textarea-wrapper-focused': this.focused,
|
|
1982
|
+
'x-textarea-wrapper-error': this.status === 'error',
|
|
1983
|
+
'x-textarea-wrapper-warning': this.status === 'warning',
|
|
1984
|
+
'x-textarea-wrapper-borderless': !this.bordered,
|
|
1985
|
+
'x-textarea-show-count': this.showCount,
|
|
1986
|
+
} }, index.h("textarea", { key: '662c51000b0f313ebba4cefe5249a32a6e4225a4', class: {
|
|
1987
|
+
'x-textarea': true,
|
|
1988
|
+
'disabled': this.disabled,
|
|
1989
|
+
}, disabled: this.disabled, maxLength: this.maxLength, value: this.value, placeholder: this.placeholder, rows: this.rows, onInput: (e) => this.handleInput(e), onKeyDown: (e) => this.handleKeyDown(e), onFocus: () => this.focused = true, onBlur: () => this.focused = false }), this.allowClear && this.value && (index.h("span", { key: '03d488cc303a172cffd64fe85f653f0f8a2620b7', class: "x-textarea-clear-icon", onClick: (e) => this.handleClear(e) }, index.h("span", { key: '88a02fb55371f35bc0a45159aee3bd324d706f7c', role: "img", "aria-label": "close-circle", class: "anticon anticon-close-circle" }, index.h("x-icon", { key: '976c1ef0428afb40a70fde38446d52952b37d57c', name: config.getIcon('clear') })))), this.showCount && (index.h("span", { key: '07e2ff90d325eba478d87f24305032194417c64c', class: "x-textarea-data-count", "data-count": `${this.value ? this.value.length : 0}${this.maxLength ? ` / ${this.maxLength}` : ''}` }, this.value ? this.value.length : 0, this.maxLength ? ` / ${this.maxLength}` : ''))));
|
|
1990
|
+
}
|
|
1991
|
+
};
|
|
1992
|
+
XTextarea.style = xTextareaCss();
|
|
1993
|
+
|
|
1994
|
+
class FlowService {
|
|
1995
|
+
nodes = [];
|
|
1996
|
+
edges = [];
|
|
1997
|
+
viewport = { x: 0, y: 0, zoom: 1 };
|
|
1998
|
+
selectedNodeIds = [];
|
|
1999
|
+
selectedEdgeIds = [];
|
|
2000
|
+
nodeValues = {};
|
|
2001
|
+
clipboardNodes = [];
|
|
2002
|
+
clipboardEdges = [];
|
|
2003
|
+
history = [];
|
|
2004
|
+
historyIndex = -1;
|
|
2005
|
+
listeners = [];
|
|
2006
|
+
constructor(initialNodes = [], initialEdges = []) {
|
|
2007
|
+
this.nodes = initialNodes;
|
|
2008
|
+
this.edges = initialEdges;
|
|
2009
|
+
this.saveToHistory();
|
|
2010
|
+
}
|
|
2011
|
+
subscribe(listener) {
|
|
2012
|
+
this.listeners.push(listener);
|
|
2013
|
+
return () => {
|
|
2014
|
+
this.listeners = this.listeners.filter(l => l !== listener);
|
|
2015
|
+
};
|
|
2016
|
+
}
|
|
2017
|
+
notify() {
|
|
2018
|
+
this.listeners.forEach(l => l());
|
|
2019
|
+
}
|
|
2020
|
+
forceLayout() {
|
|
2021
|
+
// Basic force layout implementation or trigger
|
|
2022
|
+
this.notify();
|
|
2023
|
+
}
|
|
2024
|
+
saveToHistory() {
|
|
2025
|
+
const last = this.history[this.historyIndex];
|
|
2026
|
+
if (last && JSON.stringify(last.nodes) === JSON.stringify(this.nodes) && JSON.stringify(last.edges) === JSON.stringify(this.edges))
|
|
2027
|
+
return;
|
|
2028
|
+
this.history = this.history.slice(0, this.historyIndex + 1);
|
|
2029
|
+
this.history.push({ nodes: JSON.parse(JSON.stringify(this.nodes)), edges: JSON.parse(JSON.stringify(this.edges)) });
|
|
2030
|
+
this.historyIndex = this.history.length - 1;
|
|
2031
|
+
if (this.history.length > 50) {
|
|
2032
|
+
this.history.shift();
|
|
2033
|
+
this.historyIndex--;
|
|
2034
|
+
}
|
|
2035
|
+
}
|
|
2036
|
+
undo() {
|
|
2037
|
+
if (this.historyIndex > 0) {
|
|
2038
|
+
this.historyIndex--;
|
|
2039
|
+
const snapshot = this.history[this.historyIndex];
|
|
2040
|
+
this.nodes = JSON.parse(JSON.stringify(snapshot.nodes));
|
|
2041
|
+
this.edges = JSON.parse(JSON.stringify(snapshot.edges));
|
|
2042
|
+
this.notify();
|
|
2043
|
+
}
|
|
2044
|
+
}
|
|
2045
|
+
redo() {
|
|
2046
|
+
if (this.historyIndex < this.history.length - 1) {
|
|
2047
|
+
this.historyIndex++;
|
|
2048
|
+
const snapshot = this.history[this.historyIndex];
|
|
2049
|
+
this.nodes = JSON.parse(JSON.stringify(snapshot.nodes));
|
|
2050
|
+
this.edges = JSON.parse(JSON.stringify(snapshot.edges));
|
|
2051
|
+
this.notify();
|
|
2052
|
+
}
|
|
2053
|
+
}
|
|
2054
|
+
getNodes() { return this.nodes.filter(n => this.isNodeVisible(n.id)); }
|
|
2055
|
+
isNodeVisible(nodeId) {
|
|
2056
|
+
const node = this.nodes.find(n => n.id === nodeId);
|
|
2057
|
+
if (!node)
|
|
2058
|
+
return false;
|
|
2059
|
+
if (node.hidden)
|
|
2060
|
+
return false;
|
|
2061
|
+
let parent = this.nodes.find(n => n.id === node.parentId);
|
|
2062
|
+
while (parent) {
|
|
2063
|
+
if (parent.isCollapsed)
|
|
2064
|
+
return false;
|
|
2065
|
+
parent = this.nodes.find(n => n.id === parent.parentId);
|
|
2066
|
+
}
|
|
2067
|
+
return true;
|
|
2068
|
+
}
|
|
2069
|
+
getEdges() { return this.edges.filter(e => this.isNodeVisible(e.source) && this.isNodeVisible(e.target)); }
|
|
2070
|
+
getViewport() { return this.viewport; }
|
|
2071
|
+
getSelectedNodes() { return this.selectedNodeIds; }
|
|
2072
|
+
getSelectedEdges() { return this.selectedEdgeIds; }
|
|
2073
|
+
setNodes(nodes) {
|
|
2074
|
+
// Preserve width and height if not provided in the new array, keeping the service as the source of truth for these
|
|
2075
|
+
this.nodes = nodes.map(newNode => {
|
|
2076
|
+
const existingNode = this.nodes.find(n => n.id === newNode.id);
|
|
2077
|
+
if (existingNode) {
|
|
2078
|
+
return {
|
|
2079
|
+
...newNode,
|
|
2080
|
+
width: newNode.width || existingNode.width,
|
|
2081
|
+
height: newNode.height || existingNode.height,
|
|
2082
|
+
shape: newNode.shape || existingNode.shape
|
|
2083
|
+
};
|
|
2084
|
+
}
|
|
2085
|
+
return newNode;
|
|
2086
|
+
});
|
|
2087
|
+
this.notify();
|
|
2088
|
+
}
|
|
2089
|
+
setEdges(edges) { this.edges = edges; this.notify(); }
|
|
2090
|
+
setViewport(viewport) { this.viewport = viewport; this.notify(); }
|
|
2091
|
+
updateNodeValue(nodeId, value) { this.nodeValues[nodeId] = value; this.propagate(nodeId); this.notify(); }
|
|
2092
|
+
propagate(nodeId) {
|
|
2093
|
+
const value = this.nodeValues[nodeId];
|
|
2094
|
+
this.edges.filter(e => e.source === nodeId).forEach(edge => {
|
|
2095
|
+
if (this.nodes.find(n => n.id === edge.target))
|
|
2096
|
+
console.log(`Propagating from ${nodeId} to ${edge.target}:`, value);
|
|
2097
|
+
});
|
|
2098
|
+
}
|
|
2099
|
+
addNode(node) { this.nodes = [...this.nodes, node]; this.saveToHistory(); this.notify(); }
|
|
2100
|
+
updateNodePosition(nodeId, x, y, snapToGridSize = 0) {
|
|
2101
|
+
const node = this.nodes.find(n => n.id === nodeId);
|
|
2102
|
+
if (!node)
|
|
2103
|
+
return;
|
|
2104
|
+
let finalX = snapToGridSize > 0 ? Math.round(x / snapToGridSize) * snapToGridSize : x;
|
|
2105
|
+
let finalY = snapToGridSize > 0 ? Math.round(y / snapToGridSize) * snapToGridSize : y;
|
|
2106
|
+
// Boundary constraints for children
|
|
2107
|
+
if (node.parentId) {
|
|
2108
|
+
const parent = this.nodes.find(n => n.id === node.parentId);
|
|
2109
|
+
if (parent) {
|
|
2110
|
+
finalX = Math.max(0, Math.min(finalX, (parent.width || 400) - (node.width || 150)));
|
|
2111
|
+
finalY = Math.max(0, Math.min(finalY, (parent.height || 300) - (node.height || 48)));
|
|
2112
|
+
}
|
|
2113
|
+
}
|
|
2114
|
+
// Helper Line Snapping
|
|
2115
|
+
const threshold = 10;
|
|
2116
|
+
this.nodes.forEach(other => {
|
|
2117
|
+
if (other.id === nodeId || other.parentId === nodeId)
|
|
2118
|
+
return;
|
|
2119
|
+
if (Math.abs(finalX - other.position.x) < threshold)
|
|
2120
|
+
finalX = other.position.x;
|
|
2121
|
+
if (Math.abs(finalY - other.position.y) < threshold)
|
|
2122
|
+
finalY = other.position.y;
|
|
2123
|
+
});
|
|
2124
|
+
const dx = finalX - node.position.x, dy = finalY - node.position.y;
|
|
2125
|
+
if (dx === 0 && dy === 0)
|
|
2126
|
+
return;
|
|
2127
|
+
const idsToMove = this.selectedNodeIds.includes(nodeId) ? this.selectedNodeIds : [nodeId];
|
|
2128
|
+
const movedNodesSet = new Set();
|
|
2129
|
+
// Find all nodes in the hierarchy to move
|
|
2130
|
+
const nodesToUpdate = new Map();
|
|
2131
|
+
idsToMove.forEach(id => {
|
|
2132
|
+
this.collectNodesToMove(id, dx, dy, movedNodesSet, nodesToUpdate);
|
|
2133
|
+
});
|
|
2134
|
+
// Single pass update
|
|
2135
|
+
this.nodes = this.nodes.map(n => {
|
|
2136
|
+
const update = nodesToUpdate.get(n.id);
|
|
2137
|
+
return update ? { ...n, position: update } : n;
|
|
2138
|
+
});
|
|
2139
|
+
this.notify();
|
|
2140
|
+
}
|
|
2141
|
+
collectNodesToMove(id, dx, dy, movedNodesSet, map) {
|
|
2142
|
+
if (movedNodesSet.has(id))
|
|
2143
|
+
return;
|
|
2144
|
+
const node = this.nodes.find(n => n.id === id);
|
|
2145
|
+
if (!node)
|
|
2146
|
+
return;
|
|
2147
|
+
movedNodesSet.add(id);
|
|
2148
|
+
map.set(id, { x: node.position.x + dx, y: node.position.y + dy });
|
|
2149
|
+
this.nodes.filter(n => n.parentId === id).forEach(child => this.collectNodesToMove(child.id, dx, dy, movedNodesSet, map));
|
|
2150
|
+
}
|
|
2151
|
+
onConnect(connection) {
|
|
2152
|
+
if (!this.isValidConnection(connection))
|
|
2153
|
+
return null;
|
|
2154
|
+
// STRICT: Only one connection between the same pair of nodes in the same direction
|
|
2155
|
+
// (regardless of handles if user just wants "1 line")
|
|
2156
|
+
// Or at least catch if handles are effectively the same.
|
|
2157
|
+
const isDuplicate = this.edges.some(e => e.source === connection.source &&
|
|
2158
|
+
e.target === connection.target &&
|
|
2159
|
+
(e.sourceHandle || 'floating') === (connection.sourceHandle || 'floating') &&
|
|
2160
|
+
(e.targetHandle || 'floating') === (connection.targetHandle || 'floating'));
|
|
2161
|
+
if (isDuplicate)
|
|
2162
|
+
return null;
|
|
2163
|
+
const id = `e-${connection.source}-${connection.target}-${Date.now()}-${Math.floor(Math.random() * 1000)}`;
|
|
2164
|
+
this.edges = [...this.edges, {
|
|
2165
|
+
id,
|
|
2166
|
+
...connection,
|
|
2167
|
+
type: 'default',
|
|
2168
|
+
animated: false,
|
|
2169
|
+
sourceHandle: connection.sourceHandle || 'floating',
|
|
2170
|
+
targetHandle: connection.targetHandle || 'floating'
|
|
2171
|
+
}];
|
|
2172
|
+
this.saveToHistory();
|
|
2173
|
+
this.notify();
|
|
2174
|
+
return id;
|
|
2175
|
+
}
|
|
2176
|
+
toggleNodeCollapse(nodeId) { this.nodes = this.nodes.map(n => n.id === nodeId ? { ...n, isCollapsed: !n.isCollapsed } : n); this.saveToHistory(); this.notify(); }
|
|
2177
|
+
isValidConnection(connection) {
|
|
2178
|
+
if (connection.source === connection.target)
|
|
2179
|
+
return false;
|
|
2180
|
+
if (this.isCycle(connection.source, connection.target))
|
|
2181
|
+
return false;
|
|
2182
|
+
// Check if any connection already exists between these two nodes in this direction
|
|
2183
|
+
// to strictly enforce "one line per pair" as requested.
|
|
2184
|
+
const alreadyConnected = this.edges.some(e => e.source === connection.source && e.target === connection.target);
|
|
2185
|
+
if (alreadyConnected)
|
|
2186
|
+
return false;
|
|
2187
|
+
const sourceNode = this.nodes.find(n => n.id === connection.source), targetNode = this.nodes.find(n => n.id === connection.target);
|
|
2188
|
+
if (sourceNode?.maxConnections !== undefined && this.edges.filter(e => e.source === connection.source).length >= sourceNode.maxConnections)
|
|
2189
|
+
return false;
|
|
2190
|
+
if (targetNode?.maxConnections !== undefined && this.edges.filter(e => e.target === connection.target).length >= targetNode.maxConnections)
|
|
2191
|
+
return false;
|
|
2192
|
+
return true;
|
|
2193
|
+
}
|
|
2194
|
+
updateEdge(edgeId, updates) { this.edges = this.edges.map(e => e.id === edgeId ? { ...e, ...updates } : e); this.saveToHistory(); this.notify(); }
|
|
2195
|
+
isCycle(source, target) {
|
|
2196
|
+
if (source === target)
|
|
2197
|
+
return true;
|
|
2198
|
+
const visited = new Set(), queue = [target];
|
|
2199
|
+
while (queue.length > 0) {
|
|
2200
|
+
const current = queue.shift();
|
|
2201
|
+
if (!current)
|
|
2202
|
+
continue;
|
|
2203
|
+
if (current === source)
|
|
2204
|
+
return true;
|
|
2205
|
+
if (visited.has(current))
|
|
2206
|
+
continue;
|
|
2207
|
+
visited.add(current);
|
|
2208
|
+
this.edges.filter(e => e.source === current).forEach(e => queue.push(e.target));
|
|
2209
|
+
}
|
|
2210
|
+
return false;
|
|
2211
|
+
}
|
|
2212
|
+
deleteSelected() {
|
|
2213
|
+
this.nodes = this.nodes.filter(n => !this.selectedNodeIds.includes(n.id));
|
|
2214
|
+
this.edges = this.edges.filter(e => !this.selectedEdgeIds.includes(e.id) && !this.selectedNodeIds.includes(e.source) && !this.selectedNodeIds.includes(e.target));
|
|
2215
|
+
this.selectedNodeIds = [];
|
|
2216
|
+
this.selectedEdgeIds = [];
|
|
2217
|
+
this.saveToHistory();
|
|
2218
|
+
this.notify();
|
|
2219
|
+
}
|
|
2220
|
+
groupSelected() {
|
|
2221
|
+
if (this.selectedNodeIds.length < 2)
|
|
2222
|
+
return;
|
|
2223
|
+
const selectedNodes = this.nodes.filter(n => this.selectedNodeIds.includes(n.id));
|
|
2224
|
+
const minX = Math.min(...selectedNodes.map(n => n.position.x)), minY = Math.min(...selectedNodes.map(n => n.position.y)), maxX = Math.max(...selectedNodes.map(n => n.position.x + (n.width || 150))), maxY = Math.max(...selectedNodes.map(n => n.position.y + (n.height || 48)));
|
|
2225
|
+
const groupId = `group-${Date.now()}`;
|
|
2226
|
+
const groupNode = { id: groupId, type: 'group', position: { x: minX - 20, y: minY - 40 }, width: maxX - minX + 40, height: maxY - minY + 60, data: { label: 'New Group' }, zIndex: 1, style: { background: 'rgba(0,0,0,0.02)', border: '1px dashed #ccc' } };
|
|
2227
|
+
this.nodes = [...this.nodes.map(n => this.selectedNodeIds.includes(n.id) ? { ...n, parentId: groupId } : n), groupNode];
|
|
2228
|
+
this.selectedNodeIds = [groupId];
|
|
2229
|
+
this.saveToHistory();
|
|
2230
|
+
this.notify();
|
|
2231
|
+
}
|
|
2232
|
+
autoLayout(direction = 'LR') {
|
|
2233
|
+
const visited = new Set(), levelMap = {}, rootNodes = this.nodes.filter(n => !this.edges.some(e => e.target === n.id));
|
|
2234
|
+
const assignLevels = (nodeId, level) => {
|
|
2235
|
+
levelMap[nodeId] = Math.max(levelMap[nodeId] || 0, level);
|
|
2236
|
+
if (visited.has(nodeId))
|
|
2237
|
+
return;
|
|
2238
|
+
visited.add(nodeId);
|
|
2239
|
+
this.edges.filter(e => e.source === nodeId).forEach(e => assignLevels(e.target, level + 1));
|
|
2240
|
+
};
|
|
2241
|
+
rootNodes.forEach(n => assignLevels(n.id, 0));
|
|
2242
|
+
this.nodes.forEach(n => {
|
|
2243
|
+
if (levelMap[n.id] === undefined)
|
|
2244
|
+
assignLevels(n.id, 0);
|
|
2245
|
+
});
|
|
2246
|
+
const nodesByLevel = {};
|
|
2247
|
+
Object.entries(levelMap).forEach(([id, level]) => { nodesByLevel[level] = [...(nodesByLevel[level] || []), id]; });
|
|
2248
|
+
const gapX = 250, gapY = 100;
|
|
2249
|
+
this.nodes = this.nodes.map(n => { const level = levelMap[n.id], index = nodesByLevel[level].indexOf(n.id); return { ...n, position: direction === 'LR' ? { x: level * gapX, y: index * gapY + 100 } : { x: index * gapX + 200, y: level * gapY + 100 } }; });
|
|
2250
|
+
this.saveToHistory();
|
|
2251
|
+
this.notify();
|
|
2252
|
+
}
|
|
2253
|
+
selectNode(nodeId, multi = false) {
|
|
2254
|
+
if (multi) {
|
|
2255
|
+
if (this.selectedNodeIds.includes(nodeId))
|
|
2256
|
+
this.selectedNodeIds = this.selectedNodeIds.filter(id => id !== nodeId);
|
|
2257
|
+
else
|
|
2258
|
+
this.selectedNodeIds = [...this.selectedNodeIds, nodeId];
|
|
2259
|
+
}
|
|
2260
|
+
else {
|
|
2261
|
+
this.selectedNodeIds = [nodeId];
|
|
2262
|
+
this.selectedEdgeIds = [];
|
|
2263
|
+
}
|
|
2264
|
+
this.notify();
|
|
2265
|
+
}
|
|
2266
|
+
setParent(nodeId, parentId) {
|
|
2267
|
+
const node = this.nodes.find(n => n.id === nodeId);
|
|
2268
|
+
if (!node || node.parentId === parentId)
|
|
2269
|
+
return;
|
|
2270
|
+
if (parentId) {
|
|
2271
|
+
const parent = this.nodes.find(n => n.id === parentId);
|
|
2272
|
+
if (parent) {
|
|
2273
|
+
// Move to relative coordinates
|
|
2274
|
+
const relX = node.position.x - parent.position.x;
|
|
2275
|
+
const relY = node.position.y - parent.position.y;
|
|
2276
|
+
this.nodes = this.nodes.map(n => n.id === nodeId ? { ...n, parentId, position: { x: relX, y: relY } } : n);
|
|
2277
|
+
}
|
|
2278
|
+
}
|
|
2279
|
+
else {
|
|
2280
|
+
// Move back to absolute coordinates if it has a parent
|
|
2281
|
+
const parent = node.parentId ? this.nodes.find(n => n.id === node.parentId) : null;
|
|
2282
|
+
if (parent) {
|
|
2283
|
+
this.nodes = this.nodes.map(n => n.id === nodeId ? { ...n, parentId: null, position: { x: node.position.x + parent.position.x, y: node.position.y + parent.position.y } } : n);
|
|
2284
|
+
}
|
|
2285
|
+
else {
|
|
2286
|
+
this.nodes = this.nodes.map(n => n.id === nodeId ? { ...n, parentId: null } : n);
|
|
2287
|
+
}
|
|
2288
|
+
}
|
|
2289
|
+
this.saveToHistory();
|
|
2290
|
+
this.notify();
|
|
2291
|
+
}
|
|
2292
|
+
updateNode(nodeId, updates) {
|
|
2293
|
+
this.nodes = this.nodes.map(n => n.id === nodeId ? { ...n, ...updates, data: { ...n.data, ...updates.data } } : n);
|
|
2294
|
+
this.notify();
|
|
2295
|
+
}
|
|
2296
|
+
rotateNode(nodeId, angle) {
|
|
2297
|
+
this.nodes = this.nodes.map(n => n.id === nodeId ? { ...n, rotation: angle } : n);
|
|
2298
|
+
this.notify(); // Don't save to history every drag step, maybe on up
|
|
2299
|
+
}
|
|
2300
|
+
selectEdge(edgeId, multi = false) {
|
|
2301
|
+
if (multi) {
|
|
2302
|
+
if (this.selectedEdgeIds.includes(edgeId))
|
|
2303
|
+
this.selectedEdgeIds = this.selectedEdgeIds.filter(id => id !== edgeId);
|
|
2304
|
+
else
|
|
2305
|
+
this.selectedEdgeIds = [...this.selectedEdgeIds, edgeId];
|
|
2306
|
+
}
|
|
2307
|
+
else {
|
|
2308
|
+
this.selectedEdgeIds = [edgeId];
|
|
2309
|
+
this.selectedNodeIds = [];
|
|
2310
|
+
}
|
|
2311
|
+
this.notify();
|
|
2312
|
+
}
|
|
2313
|
+
clearSelection() { this.selectedNodeIds = []; this.selectedEdgeIds = []; this.notify(); }
|
|
2314
|
+
deleteEdge(edgeId) { this.edges = this.edges.filter(e => e.id !== edgeId); this.saveToHistory(); this.notify(); }
|
|
2315
|
+
deleteNode(nodeId) {
|
|
2316
|
+
const inEdges = this.edges.filter(e => e.target === nodeId);
|
|
2317
|
+
const outEdges = this.edges.filter(e => e.source === nodeId);
|
|
2318
|
+
// Delete Middle Node logic: If exactly one in and one out, reconnect them
|
|
2319
|
+
if (inEdges.length === 1 && outEdges.length === 1) {
|
|
2320
|
+
const sourceId = inEdges[0].source;
|
|
2321
|
+
const targetId = outEdges[0].target;
|
|
2322
|
+
this.addEdge({
|
|
2323
|
+
id: `reconnect-${Date.now()}`,
|
|
2324
|
+
source: sourceId,
|
|
2325
|
+
target: targetId,
|
|
2326
|
+
sourceHandle: inEdges[0].sourceHandle,
|
|
2327
|
+
targetHandle: outEdges[0].targetHandle,
|
|
2328
|
+
type: inEdges[0].type
|
|
2329
|
+
});
|
|
2330
|
+
}
|
|
2331
|
+
this.nodes = this.nodes.filter(n => n.id !== nodeId);
|
|
2332
|
+
this.edges = this.edges.filter(e => e.source !== nodeId && e.target !== nodeId);
|
|
2333
|
+
this.selectedNodeIds = this.selectedNodeIds.filter(id => id !== nodeId);
|
|
2334
|
+
this.saveToHistory();
|
|
2335
|
+
this.notify();
|
|
2336
|
+
}
|
|
2337
|
+
addEdge(edge) { this.edges = [...this.edges, edge]; this.saveToHistory(); this.notify(); }
|
|
2338
|
+
copySelected() {
|
|
2339
|
+
this.clipboardNodes = this.nodes.filter(n => this.selectedNodeIds.includes(n.id)).map(n => ({ ...n }));
|
|
2340
|
+
this.clipboardEdges = this.edges.filter(e => this.selectedNodeIds.includes(e.source) && this.selectedNodeIds.includes(e.target)).map(e => ({ ...e }));
|
|
2341
|
+
}
|
|
2342
|
+
paste(x, y) {
|
|
2343
|
+
if (this.clipboardNodes.length === 0)
|
|
2344
|
+
return;
|
|
2345
|
+
const idMap = {};
|
|
2346
|
+
const minX = Math.min(...this.clipboardNodes.map(n => n.position.x)), minY = Math.min(...this.clipboardNodes.map(n => n.position.y));
|
|
2347
|
+
const targetX = x === undefined ? minX + 20 : x, targetY = y === undefined ? minY + 20 : y;
|
|
2348
|
+
const dx = targetX - minX, dy = targetY - minY;
|
|
2349
|
+
const newNodes = this.clipboardNodes.map(n => {
|
|
2350
|
+
const newId = `node-${Date.now()}-${Math.random()}`;
|
|
2351
|
+
idMap[n.id] = newId;
|
|
2352
|
+
return { ...n, id: newId, position: { x: n.position.x + dx, y: n.position.y + dy }, selected: true };
|
|
2353
|
+
});
|
|
2354
|
+
const newEdges = this.clipboardEdges.map(e => ({ ...e, id: `edge-${Date.now()}-${Math.random()}`, source: idMap[e.source], target: idMap[e.target] }));
|
|
2355
|
+
this.nodes = [...this.nodes.map(n => ({ ...n, selected: false })), ...newNodes];
|
|
2356
|
+
this.edges = [...this.edges, ...newEdges];
|
|
2357
|
+
this.selectedNodeIds = newNodes.map(n => n.id);
|
|
2358
|
+
this.saveToHistory();
|
|
2359
|
+
this.notify();
|
|
2360
|
+
}
|
|
2361
|
+
generateStressTest(count) {
|
|
2362
|
+
const newNodes = [];
|
|
2363
|
+
for (let i = 0; i < count; i++) {
|
|
2364
|
+
newNodes.push({
|
|
2365
|
+
id: `stress-${i}`,
|
|
2366
|
+
position: { x: Math.random() * 2000, y: Math.random() * 2000 },
|
|
2367
|
+
data: { label: `Node ${i}` },
|
|
2368
|
+
zIndex: 10
|
|
2369
|
+
});
|
|
2370
|
+
}
|
|
2371
|
+
this.nodes = [...this.nodes, ...newNodes];
|
|
2372
|
+
this.notify();
|
|
2373
|
+
}
|
|
2374
|
+
getFullState() { return { nodes: this.nodes, edges: this.edges, viewport: this.viewport, nodeValues: this.nodeValues }; }
|
|
2375
|
+
}
|
|
2376
|
+
|
|
2377
|
+
const xWorkflowCss = () => `:host{display:block;width:100%;height:100%;overflow:hidden}.workflow-container{position:relative;width:100%;height:100%;background:#f8f9fa;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:none;touch-action:none;outline:none}.background-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.dots-bg{width:100%;height:100%;background-image:radial-gradient(#d1d5db 1px, transparent 1px);background-size:20px 20px}.flow-renderer{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-transform-origin:0 0;transform-origin:0 0;will-change:transform}.nodes-layer,.edges-svg,.drawings-layer{position:absolute;top:0;left:0;width:100%;height:100%}.edges-svg{overflow:visible;pointer-events:none}.node{position:absolute;background:#ffffff;border:1px solid #d1d5db;border-radius:6px;-webkit-box-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1);box-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:-webkit-transform 0.1s ease-out;transition:-webkit-transform 0.1s ease-out;transition:transform 0.1s ease-out;transition:transform 0.1s ease-out, -webkit-transform 0.1s ease-out}.node.dragging{-webkit-transition:none;transition:none;cursor:-webkit-grabbing;cursor:grabbing;-webkit-box-shadow:0 10px 15px -3px rgba(0, 0, 0, 0.1);box-shadow:0 10px 15px -3px rgba(0, 0, 0, 0.1);z-index:100}.node{color:#1f2937;font-family:inherit;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:8px 12px;min-width:100px;min-height:40px;z-index:10;-webkit-transform-origin:center center;transform-origin:center center}.node.shape-circle{border-radius:50%}.node.shape-diamond{background:transparent !important;border:none !important;-webkit-box-shadow:none !important;box-shadow:none !important;-webkit-clip-path:none !important;clip-path:none !important}.node.shape-diamond .node-shape-wrapper{position:absolute;inset:0;z-index:0;pointer-events:none}.node.shape-diamond .node-shape-svg{width:100%;height:100%;overflow:visible}.node.shape-diamond .node-shape-svg .shape-path{fill:#ffffff;stroke:#d1d5db;stroke-width:1.5px;-webkit-transition:all 0.2s ease;transition:all 0.2s ease;vector-effect:non-scaling-stroke}.node.shape-diamond .node-shape-svg .shape-path.selected{stroke:#3b82f6;stroke-width:3px;-webkit-filter:drop-shadow(0 0 4px rgba(59, 130, 246, 0.3));filter:drop-shadow(0 0 4px rgba(59, 130, 246, 0.3))}.node.shape-diamond .node-content{position:relative;z-index:1;-webkit-transform:scale(0.7);transform:scale(0.7);pointer-events:auto}.node-content{pointer-events:none;font-size:14px;font-weight:500;text-align:center;width:100%;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;gap:8px}.node-content>*{pointer-events:auto}.node.dragging{cursor:-webkit-grabbing;cursor:grabbing;-webkit-box-shadow:0 10px 15px -3px rgba(0, 0, 0, 0.1);box-shadow:0 10px 15px -3px rgba(0, 0, 0, 0.1);z-index:100;-webkit-transition:none;transition:none}.node.selected{border-color:#3b82f6;-webkit-box-shadow:0 0 0 2px #3b82f6;box-shadow:0 0 0 2px #3b82f6}.handle{position:absolute;width:12px;height:12px;background:white;border:2px solid #3b82f6;border-radius:50%;cursor:crosshair;z-index:20}.handle::after{content:"";position:absolute;top:-10px;left:-10px;right:-10px;bottom:-10px}.handle:hover{background:#2563eb;border-color:#2563eb}.handle.top{top:-6px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.handle.right{right:-6px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.handle.bottom{bottom:-6px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.handle.left{left:-6px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.edge-path{fill:none;stroke:#b1b1b7;stroke-width:2px;pointer-events:auto;cursor:pointer;-webkit-transition:stroke 0.2s;transition:stroke 0.2s}.edge-path:hover{stroke-width:3px;stroke:#3b82f6}.edge-path.selected{stroke:#3b82f6;stroke-width:3px}.edge-path.animated{stroke-dasharray:5;-webkit-animation:dash 1s linear infinite;animation:dash 1s linear infinite}.edge-path.turbo{stroke:#ff00ff;stroke-width:3px;-webkit-filter:drop-shadow(0 0 5px rgba(255, 0, 255, 0.8));filter:drop-shadow(0 0 5px rgba(255, 0, 255, 0.8));stroke-dasharray:10;-webkit-animation:turbo-dash 0.5s linear infinite;animation:turbo-dash 0.5s linear infinite}@-webkit-keyframes turbo-dash{from{stroke-dashoffset:20}to{stroke-dashoffset:0}}@keyframes turbo-dash{from{stroke-dashoffset:20}to{stroke-dashoffset:0}}@-webkit-keyframes dash{from{stroke-dashoffset:10}to{stroke-dashoffset:0}}@keyframes dash{from{stroke-dashoffset:10}to{stroke-dashoffset:0}}.node-toolbar{position:absolute;top:-45px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);background:white;border:1px solid #ddd;border-radius:6px;padding:4px;display:-ms-flexbox;display:flex;gap:4px;-webkit-box-shadow:0 2px 8px rgba(0, 0, 0, 0.15);box-shadow:0 2px 8px rgba(0, 0, 0, 0.15);z-index:100}.node-toolbar .color-picker{display:-ms-flexbox;display:flex;gap:2px;padding:0 4px}.node-toolbar .color-picker .color-swatch{width:16px;height:16px;border-radius:2px;border:1px solid #eee;cursor:pointer;-webkit-transition:-webkit-transform 0.1s;transition:-webkit-transform 0.1s;transition:transform 0.1s;transition:transform 0.1s, -webkit-transform 0.1s}.node-toolbar .color-picker .color-swatch:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.node-toolbar button{background:transparent;border:none;color:#333;cursor:pointer;padding:4px;border-radius:2px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;font-size:14px}.toolbar-btn{background:transparent;border:none;color:white;cursor:pointer;padding:4px;border-radius:2px;display:-ms-flexbox;display:flex}.toolbar-btn:hover{background:rgba(255, 255, 255, 0.1)}.edge-toolbar{display:-ms-flexbox;display:flex;background:#333;padding:4px;border-radius:4px;gap:4px}.edge-toolbar-btn{background:transparent;border:none;color:white;cursor:pointer;padding:4px}.node-resizer{position:absolute;right:0;bottom:0;width:10px;height:10px;background:#3b82f6;cursor:nwse-resize;border-radius:2px 0 0 0}.node-rotator{position:absolute;top:-24px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:20px;height:20px;background:white;border:1px solid #3b82f6;border-radius:50%;cursor:-webkit-grab;cursor:grab;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.1)}.node-rotator::before{content:"";position:absolute;bottom:-15px;left:50%;width:1px;height:15px;background:#3b82f6}.node-collapse-btn{background:transparent;border:none;padding:2px;cursor:pointer;display:-ms-flexbox;display:flex;color:inherit;opacity:0.6}.node-collapse-btn:hover{opacity:1}.context-menu{position:fixed;background:white;border:1px solid #ddd;-webkit-box-shadow:0 4px 12px rgba(0, 0, 0, 0.15);box-shadow:0 4px 12px rgba(0, 0, 0, 0.15);border-radius:4px;padding:4px 0;z-index:100000;min-width:150px}.menu-item{padding:8px 16px;cursor:pointer;font-size:13px}.menu-item:hover{background:#f3f4f6}.divider{height:1px;background:#eee;margin:4px 0}.selection-rect{position:absolute;background:rgba(59, 130, 246, 0.1);border:1px solid rgba(59, 130, 246, 0.5);pointer-events:none;z-index:10000}.user-cursor{position:absolute;pointer-events:none;z-index:10000;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-webkit-transition:all 0.1s linear;transition:all 0.1s linear}.user-cursor svg{-webkit-filter:drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3));filter:drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3))}.user-cursor .user-name{margin-top:2px;padding:2px 6px;border-radius:4px;color:white;font-size:10px;font-weight:500;white-space:nowrap;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.2);box-shadow:0 1px 3px rgba(0, 0, 0, 0.2)}.edge-handle{fill:white;stroke:#3b82f6;stroke-width:2px;cursor:crosshair;pointer-events:auto}.edge-path.proximity-preview{stroke:#b1b1b7;stroke-width:2px;pointer-events:none}.edge-label{background:white;padding:2px 4px;border-radius:4px;border:1px solid #b1b1b7;font-size:10px;color:#333;text-align:center;white-space:nowrap;pointer-events:none}.workflow-container.theme-dark{background:#141414}.workflow-container.theme-dark .dots-bg{background-image:radial-gradient(#333 1px, transparent 1px)}.workflow-container.theme-dark .node{background:#222;border-color:#333;color:#eee;-webkit-box-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.5);box-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.5)}.workflow-container.theme-dark .handle{background:#222}.workflow-container.theme-dark .context-menu{background:#222;border-color:#444;color:#eee}.workflow-container.theme-dark .context-menu .menu-item:hover{background:#333}.workflow-container.theme-dark .context-menu .divider{background:#444}.workflow-container.theme-dark .edge-label{background:#333;color:#eee;border-color:#444}`;
|
|
2378
|
+
|
|
2379
|
+
const XWorkflow = class {
|
|
2380
|
+
constructor(hostRef) {
|
|
2381
|
+
index.registerInstance(this, hostRef);
|
|
2382
|
+
this.xNodesChange = index.createEvent(this, "xNodesChange", 7);
|
|
2383
|
+
this.xEdgesChange = index.createEvent(this, "xEdgesChange", 7);
|
|
2384
|
+
this.xViewportChange = index.createEvent(this, "xViewportChange", 7);
|
|
2385
|
+
this.xNodeClick = index.createEvent(this, "xNodeClick", 7);
|
|
2386
|
+
this.xEdgeClick = index.createEvent(this, "xEdgeClick", 7);
|
|
2387
|
+
this.xConnect = index.createEvent(this, "xConnect", 7);
|
|
2388
|
+
this.xWorkflowChange = index.createEvent(this, "xWorkflowChange", 7);
|
|
2389
|
+
}
|
|
2390
|
+
get el() { return index.getElement(this); }
|
|
2391
|
+
nodes = [];
|
|
2392
|
+
edges = [];
|
|
2393
|
+
fitView = false;
|
|
2394
|
+
interactive = true;
|
|
2395
|
+
viewportValue = { x: 0, y: 0, zoom: 1 };
|
|
2396
|
+
snapToGridValue = 0;
|
|
2397
|
+
background = { variant: 'dots' };
|
|
2398
|
+
tool = 'select';
|
|
2399
|
+
theme = 'light';
|
|
2400
|
+
turboMode = false;
|
|
2401
|
+
displayMode = 'advanced';
|
|
2402
|
+
users = [];
|
|
2403
|
+
nodeToolbarVisible = true;
|
|
2404
|
+
nodeToolbarMode = 'selected';
|
|
2405
|
+
edgeRoutingMode = 'fixed';
|
|
2406
|
+
flowNodes = [];
|
|
2407
|
+
flowEdges = [];
|
|
2408
|
+
flowViewport = { x: 0, y: 0, zoom: 1 };
|
|
2409
|
+
pendingConnection = null;
|
|
2410
|
+
selectedNodes = [];
|
|
2411
|
+
draggingNodeId = null;
|
|
2412
|
+
proximityPreview = null;
|
|
2413
|
+
helperLines = [];
|
|
2414
|
+
contextMenu = null;
|
|
2415
|
+
selectionRect = null;
|
|
2416
|
+
drawings = [];
|
|
2417
|
+
activeDrawing = null;
|
|
2418
|
+
editingEdgeId = null;
|
|
2419
|
+
focusedNodeId = null;
|
|
2420
|
+
xNodesChange;
|
|
2421
|
+
xEdgesChange;
|
|
2422
|
+
xViewportChange;
|
|
2423
|
+
xNodeClick;
|
|
2424
|
+
xEdgeClick;
|
|
2425
|
+
xConnect;
|
|
2426
|
+
xWorkflowChange;
|
|
2427
|
+
service;
|
|
2428
|
+
isDraggingCanvas = false;
|
|
2429
|
+
isUpdatingFromProp = false;
|
|
2430
|
+
isInteracting = false;
|
|
2431
|
+
lastMousePos = { x: 0, y: 0 };
|
|
2432
|
+
container;
|
|
2433
|
+
throttleTimer = null;
|
|
2434
|
+
async forceLayout() {
|
|
2435
|
+
this.service.forceLayout();
|
|
2436
|
+
}
|
|
2437
|
+
componentWillLoad() {
|
|
2438
|
+
this.service = new FlowService(this.nodes, this.edges);
|
|
2439
|
+
this.service.setViewport(this.viewportValue);
|
|
2440
|
+
this.updateState();
|
|
2441
|
+
this.service.subscribe(() => {
|
|
2442
|
+
this.updateState();
|
|
2443
|
+
this.throttleEmitWorkflowChange();
|
|
2444
|
+
});
|
|
2445
|
+
}
|
|
2446
|
+
throttleEmitWorkflowChange() {
|
|
2447
|
+
if (this.throttleTimer)
|
|
2448
|
+
return;
|
|
2449
|
+
this.throttleTimer = setTimeout(() => {
|
|
2450
|
+
this.xWorkflowChange.emit(this.service.getFullState());
|
|
2451
|
+
this.throttleTimer = null;
|
|
2452
|
+
}, 100);
|
|
2453
|
+
}
|
|
2454
|
+
handleNodesPropChange(nodes) {
|
|
2455
|
+
this.isUpdatingFromProp = true;
|
|
2456
|
+
this.service.setNodes(nodes);
|
|
2457
|
+
this.isUpdatingFromProp = false;
|
|
2458
|
+
}
|
|
2459
|
+
handleEdgesPropChange(edges) {
|
|
2460
|
+
this.isUpdatingFromProp = true;
|
|
2461
|
+
this.service.setEdges(edges);
|
|
2462
|
+
this.isUpdatingFromProp = false;
|
|
2463
|
+
}
|
|
2464
|
+
handleViewportChange(vp) {
|
|
2465
|
+
this.isUpdatingFromProp = true;
|
|
2466
|
+
this.service.setViewport(vp);
|
|
2467
|
+
this.isUpdatingFromProp = false;
|
|
2468
|
+
}
|
|
2469
|
+
updateState() {
|
|
2470
|
+
this.flowNodes = [...this.service.getNodes()];
|
|
2471
|
+
this.flowEdges = [...this.service.getEdges()];
|
|
2472
|
+
this.flowViewport = { ...this.service.getViewport() };
|
|
2473
|
+
this.selectedNodes = [...this.service.getSelectedNodes()];
|
|
2474
|
+
// During active interaction (drag/pan), suppress heavy external sync to prevent parent re-renders.
|
|
2475
|
+
// We will emit the final state on mouseup.
|
|
2476
|
+
if (!this.isUpdatingFromProp && !this.isInteracting) {
|
|
2477
|
+
this.xViewportChange.emit(this.flowViewport);
|
|
2478
|
+
this.xNodesChange.emit(this.flowNodes);
|
|
2479
|
+
this.xEdgesChange.emit(this.flowEdges);
|
|
2480
|
+
}
|
|
2481
|
+
}
|
|
2482
|
+
handleMouseDown = (e) => {
|
|
2483
|
+
if (!this.interactive)
|
|
2484
|
+
return;
|
|
2485
|
+
const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX;
|
|
2486
|
+
const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;
|
|
2487
|
+
const target = e.target;
|
|
2488
|
+
// Check if we're clicking on a node or edge
|
|
2489
|
+
if (target.closest('.node') || target.closest('.edge-group'))
|
|
2490
|
+
return;
|
|
2491
|
+
if (target === this.container || target.closest('.background-canvas')) {
|
|
2492
|
+
const rect = this.container.getBoundingClientRect();
|
|
2493
|
+
const lx = (clientX - rect.left - this.flowViewport.x) / this.flowViewport.zoom, ly = (clientY - rect.top - this.flowViewport.y) / this.flowViewport.zoom;
|
|
2494
|
+
if (this.tool === 'rectangle' || this.tool === 'freehand') {
|
|
2495
|
+
this.startDrawing(lx, ly);
|
|
2496
|
+
return;
|
|
2497
|
+
}
|
|
2498
|
+
this.lastMousePos = { x: clientX, y: clientY };
|
|
2499
|
+
if ('shiftKey' in e && e.shiftKey) {
|
|
2500
|
+
this.selectionRect = { x: (clientX - rect.left), y: (clientY - rect.top), width: 0, height: 0 };
|
|
2501
|
+
this.isInteracting = true;
|
|
2502
|
+
}
|
|
2503
|
+
else {
|
|
2504
|
+
this.isDraggingCanvas = true;
|
|
2505
|
+
this.isInteracting = true;
|
|
2506
|
+
this.service.clearSelection();
|
|
2507
|
+
}
|
|
2508
|
+
this.contextMenu = null;
|
|
2509
|
+
}
|
|
2510
|
+
};
|
|
2511
|
+
handleMove(e) {
|
|
2512
|
+
const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX, clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;
|
|
2513
|
+
const { x, y, zoom } = this.flowViewport, rect = this.container.getBoundingClientRect();
|
|
2514
|
+
if (this.isDraggingCanvas) {
|
|
2515
|
+
const dx = clientX - this.lastMousePos.x, dy = clientY - this.lastMousePos.y;
|
|
2516
|
+
this.lastMousePos = { x: clientX, y: clientY };
|
|
2517
|
+
this.service.setViewport({ x: x + dx, y: y + dy, zoom });
|
|
2518
|
+
}
|
|
2519
|
+
if (this.pendingConnection) {
|
|
2520
|
+
this.pendingConnection = { ...this.pendingConnection, mouseX: (clientX - rect.left - x) / zoom, mouseY: (clientY - rect.top - y) / zoom };
|
|
2521
|
+
}
|
|
2522
|
+
if (this.tool === 'eraser' && (('buttons' in e && e.buttons === 1) || 'touches' in e)) {
|
|
2523
|
+
this.handleEraserAt(clientX, clientY);
|
|
2524
|
+
}
|
|
2525
|
+
if (this.activeDrawing) {
|
|
2526
|
+
const lx = (clientX - rect.left - x) / zoom, ly = (clientY - rect.top - y) / zoom;
|
|
2527
|
+
if (this.activeDrawing.type === 'rectangle')
|
|
2528
|
+
this.activeDrawing = { ...this.activeDrawing, width: lx - this.activeDrawing.position.x, height: ly - this.activeDrawing.position.y };
|
|
2529
|
+
else if (this.activeDrawing.type === 'freehand')
|
|
2530
|
+
this.activeDrawing = { ...this.activeDrawing, points: [...this.activeDrawing.points, { x: lx, y: ly }] };
|
|
2531
|
+
}
|
|
2532
|
+
}
|
|
2533
|
+
handleEraserAt(clientX, clientY) {
|
|
2534
|
+
const rect = this.container.getBoundingClientRect(), { x: vx, y: vy, zoom } = this.flowViewport;
|
|
2535
|
+
const lx = (clientX - rect.left - vx) / zoom, ly = (clientY - rect.top - vy) / zoom;
|
|
2536
|
+
const node = this.flowNodes.find(n => { const w = n.width || 150, h = n.height || 48; return lx >= n.position.x && lx <= n.position.x + w && ly >= n.position.y && ly <= n.position.y + h; });
|
|
2537
|
+
if (node)
|
|
2538
|
+
this.service.deleteNode(node.id);
|
|
2539
|
+
this.drawings = this.drawings.filter(d => {
|
|
2540
|
+
if (d.type === 'rectangle') {
|
|
2541
|
+
const rx = Math.min(d.position.x, d.position.x + (d.width || 0)), ry = Math.min(d.position.y, d.position.y + (d.height || 0)), rw = Math.abs(d.width || 0), rh = Math.abs(d.height || 0);
|
|
2542
|
+
return !(lx >= rx && lx <= rx + rw && ly >= ry && ly <= ry + rh);
|
|
2543
|
+
}
|
|
2544
|
+
return true;
|
|
2545
|
+
});
|
|
2546
|
+
}
|
|
2547
|
+
handleUp() {
|
|
2548
|
+
if (this.isInteracting) {
|
|
2549
|
+
this.isInteracting = false;
|
|
2550
|
+
// Sync final state once interaction ends
|
|
2551
|
+
this.updateState();
|
|
2552
|
+
}
|
|
2553
|
+
this.isDraggingCanvas = false;
|
|
2554
|
+
if (this.activeDrawing) {
|
|
2555
|
+
this.drawings = [...this.drawings, this.activeDrawing];
|
|
2556
|
+
this.activeDrawing = null;
|
|
2557
|
+
}
|
|
2558
|
+
if (this.selectionRect) {
|
|
2559
|
+
this.applyLassoSelection();
|
|
2560
|
+
this.selectionRect = null;
|
|
2561
|
+
}
|
|
2562
|
+
// REMOVED premature clearing of pendingConnection which was causing errors in startConnectionHandler
|
|
2563
|
+
// Drop-to-Group Logic
|
|
2564
|
+
if (this.draggingNodeId) {
|
|
2565
|
+
const node = this.flowNodes.find(n => n.id === this.draggingNodeId);
|
|
2566
|
+
if (node) {
|
|
2567
|
+
// const containerBox = this.container.getBoundingClientRect(); // This line was unused and removed
|
|
2568
|
+
// const absX = node.position.x * this.flowViewport.zoom + this.flowViewport.x; // This line was unused and removed
|
|
2569
|
+
// const absY = node.position.y * this.flowViewport.zoom + this.flowViewport.y; // This line was unused and removed
|
|
2570
|
+
// Find potential parent node (type: group) under the drop position
|
|
2571
|
+
const potentialParent = this.flowNodes.find(n => {
|
|
2572
|
+
if (n.id === node.id || n.type !== 'group')
|
|
2573
|
+
return false;
|
|
2574
|
+
const nw = n.width || 400, nh = n.height || 300;
|
|
2575
|
+
return node.position.x >= n.position.x && node.position.x + (node.width || 150) <= n.position.x + nw &&
|
|
2576
|
+
node.position.y >= n.position.y && node.position.y + (node.height || 48) <= n.position.y + nh;
|
|
2577
|
+
});
|
|
2578
|
+
if (potentialParent)
|
|
2579
|
+
this.service.setParent(node.id, potentialParent.id);
|
|
2580
|
+
else if (node.parentId)
|
|
2581
|
+
this.service.setParent(node.id, null);
|
|
2582
|
+
}
|
|
2583
|
+
}
|
|
2584
|
+
this.isDraggingCanvas = false;
|
|
2585
|
+
this.draggingNodeId = null;
|
|
2586
|
+
this.helperLines = [];
|
|
2587
|
+
}
|
|
2588
|
+
handleKeyDown(e) {
|
|
2589
|
+
if (!this.interactive || e.target.tagName === 'INPUT')
|
|
2590
|
+
return;
|
|
2591
|
+
if ((e.ctrlKey || e.metaKey) && e.key === 'c') {
|
|
2592
|
+
e.preventDefault();
|
|
2593
|
+
this.service.copySelected();
|
|
2594
|
+
}
|
|
2595
|
+
if ((e.ctrlKey || e.metaKey) && e.key === 'v') {
|
|
2596
|
+
e.preventDefault();
|
|
2597
|
+
this.service.paste();
|
|
2598
|
+
}
|
|
2599
|
+
if ((e.ctrlKey || e.metaKey) && e.key === 'z') {
|
|
2600
|
+
e.preventDefault();
|
|
2601
|
+
if (e.shiftKey)
|
|
2602
|
+
this.service.redo();
|
|
2603
|
+
else
|
|
2604
|
+
this.service.undo();
|
|
2605
|
+
}
|
|
2606
|
+
if (e.key === 'Delete' || e.key === 'Backspace') {
|
|
2607
|
+
e.preventDefault();
|
|
2608
|
+
this.service.deleteSelected();
|
|
2609
|
+
}
|
|
2610
|
+
}
|
|
2611
|
+
handleWheel = (e) => {
|
|
2612
|
+
if (!this.interactive)
|
|
2613
|
+
return;
|
|
2614
|
+
e.preventDefault();
|
|
2615
|
+
const zoomSpeed = 0.001, v = this.service.getViewport(), zoomDelta = -e.deltaY * zoomSpeed, newZoom = Math.min(Math.max(v.zoom + zoomDelta, 0.1), 5);
|
|
2616
|
+
if (newZoom === v.zoom)
|
|
2617
|
+
return;
|
|
2618
|
+
const rect = this.container.getBoundingClientRect(), mouseX = e.clientX - rect.left, mouseY = e.clientY - rect.top, cx = (mouseX - v.x) / v.zoom, cy = (mouseY - v.y) / v.zoom;
|
|
2619
|
+
this.service.setViewport({ x: mouseX - cx * newZoom, y: mouseY - cy * newZoom, zoom: newZoom });
|
|
2620
|
+
};
|
|
2621
|
+
render() {
|
|
2622
|
+
const { x, y, zoom } = this.flowViewport, transform = `translate(${x}px, ${y}px) scale(${zoom})`;
|
|
2623
|
+
return (index.h("div", { key: 'db1bff3ac7ea27720be9a937afc0ee78a1c7ddb3', class: { 'workflow-container': true, 'theme-dark': this.theme === 'dark' }, onMouseDown: this.handleMouseDown, onTouchStart: this.handleMouseDown, onWheel: this.handleWheel, ref: (el) => this.container = el }, index.h("div", { key: '24c5d1a846646f25d6ae1ace14f38e7d939d0348', class: "background-canvas" }, this.renderBackground()), index.h("div", { key: 'd96eb3b0188cb0c6f16e2e093873c56fd471ca37', class: "flow-renderer", style: { transform } }, index.h("svg", { key: '2801eb1d3d4fb082be5057f0b1500fbc3ac53583', class: "edges-svg" }, index.h("defs", { key: 'b797372dac820c84edc52087d07805bfb7155126' }, index.h("marker", { key: '8b0584a343dcbbc40a43767e4a6ab0733a0243d3', id: "arrowhead", markerWidth: "10", markerHeight: "7", refX: "9", refY: "3.5", orient: "auto" }, index.h("polygon", { key: 'dfe7c9ad6eeaccba3cd560b891021dad77c32b34', points: "0 0, 10 3.5, 0 7", fill: "currentColor" })), index.h("marker", { key: 'e098834ed3919e64aea097f9d9b2326781841e8e', id: "arrowhead-selected", markerWidth: "10", markerHeight: "7", refX: "9", refY: "3.5", orient: "auto" }, index.h("polygon", { key: '5c99c575d24f2f6cffddc71ecb3fc29c592416ec', points: "0 0, 10 3.5, 0 7", fill: "var(--x-primary-color)" }))), this.flowEdges
|
|
2624
|
+
.sort((a, b) => (a.selected ? 1 : 0) - (b.selected ? 1 : 0))
|
|
2625
|
+
.map(edge => this.renderEdge(edge)), this.renderPendingLine(), this.renderProximityPreview(), this.renderEdgeHandles()), index.h("div", { key: 'cd1699a7dd5a41e238be3d94329686e9e8975253', class: "nodes-layer" }, this.flowNodes.map(node => this.renderNode(node))), index.h("svg", { key: 'bd722c1ce4e18b83b5e954af15162c4fa6bbb44e', class: "drawings-layer" }, this.drawings.map(d => this.renderDrawing(d)), this.activeDrawing && this.renderDrawing(this.activeDrawing)), this.renderHelperLines(), this.renderUsers()), this.renderContextMenu(), this.renderSelectionRect()));
|
|
2626
|
+
}
|
|
2627
|
+
renderBackground() {
|
|
2628
|
+
if (this.background.variant === 'dots') {
|
|
2629
|
+
return (index.h("div", { class: "dots-bg", style: { backgroundSize: `${20 * this.flowViewport.zoom}px ${20 * this.flowViewport.zoom}px` } }));
|
|
2630
|
+
}
|
|
2631
|
+
return null;
|
|
2632
|
+
}
|
|
2633
|
+
renderUsers() {
|
|
2634
|
+
return this.users.map(u => (index.h("div", { class: "user-cursor", style: { left: `${u.position.x}px`, top: `${u.position.y}px` } }, index.h("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: u.color }, index.h("path", { d: "M5 1v22l6-6h11z" })), index.h("span", { class: "user-name", style: { backgroundColor: u.color } }, u.name))));
|
|
2635
|
+
}
|
|
2636
|
+
renderPendingLine() {
|
|
2637
|
+
if (!this.pendingConnection)
|
|
2638
|
+
return null;
|
|
2639
|
+
return (index.h("path", { d: `M${this.pendingConnection.startX},${this.pendingConnection.startY} L${this.pendingConnection.mouseX},${this.pendingConnection.mouseY}`, class: "edge-path pending" }));
|
|
2640
|
+
}
|
|
2641
|
+
renderProximityPreview() {
|
|
2642
|
+
if (!this.proximityPreview)
|
|
2643
|
+
return null;
|
|
2644
|
+
const s = this.flowNodes.find(n => n.id === this.proximityPreview.source);
|
|
2645
|
+
const t = this.flowNodes.find(n => n.id === this.proximityPreview.target);
|
|
2646
|
+
if (!s || !t)
|
|
2647
|
+
return null;
|
|
2648
|
+
const sp = this.getHandlePos(s, this.proximityPreview.sourceHandle, t);
|
|
2649
|
+
const tp = this.getHandlePos(t, this.proximityPreview.targetHandle, s);
|
|
2650
|
+
return (index.h("path", { d: `M${sp.x},${sp.y} L${tp.x},${tp.y}`, class: "edge-path proximity-preview", "stroke-dasharray": "5,5", opacity: "0.5" }));
|
|
2651
|
+
}
|
|
2652
|
+
handleNodeClick(e, nodeId) {
|
|
2653
|
+
const node = this.flowNodes.find(n => n.id === nodeId);
|
|
2654
|
+
if (!node)
|
|
2655
|
+
return;
|
|
2656
|
+
if (e.shiftKey || e.ctrlKey || e.metaKey) {
|
|
2657
|
+
this.service.selectNode(nodeId, true);
|
|
2658
|
+
}
|
|
2659
|
+
else {
|
|
2660
|
+
this.service.selectNode(nodeId, false);
|
|
2661
|
+
}
|
|
2662
|
+
this.xNodeClick.emit(node);
|
|
2663
|
+
}
|
|
2664
|
+
handleEdgeLabelDblClick(e, edgeId) {
|
|
2665
|
+
e.stopPropagation();
|
|
2666
|
+
this.editingEdgeId = edgeId;
|
|
2667
|
+
}
|
|
2668
|
+
handleEdgeLabelChange(e, edgeId) {
|
|
2669
|
+
const newLabel = e.target.value;
|
|
2670
|
+
this.service.updateEdge(edgeId, { label: newLabel });
|
|
2671
|
+
}
|
|
2672
|
+
renderEdgeLabel(edge, x, y) {
|
|
2673
|
+
return (index.h("foreignObject", { x: x - 50, y: y - 12, width: 100, height: 24, class: "edge-label-container" }, index.h("div", { class: "edge-label", onDblClick: (e) => this.handleEdgeLabelDblClick(e, edge.id) }, this.editingEdgeId === edge.id ? (index.h("input", { value: edge.label, onInput: (e) => this.handleEdgeLabelChange(e, edge.id), onKeyDown: (e) => e.key === 'Enter' && (this.editingEdgeId = null), onBlur: () => this.editingEdgeId = null, autoFocus: true, style: { width: '100%', background: 'white', border: '1px solid #ccc', borderRadius: '4px' } })) : (edge.label || ''))));
|
|
2674
|
+
}
|
|
2675
|
+
renderEdge(edge) {
|
|
2676
|
+
const s = this.flowNodes.find(n => n.id === edge.source);
|
|
2677
|
+
const t = this.flowNodes.find(n => n.id === edge.target);
|
|
2678
|
+
if (!s || !t)
|
|
2679
|
+
return null;
|
|
2680
|
+
const sPos = this.getHandlePos(s, edge.sourceHandle, t);
|
|
2681
|
+
const tPos = this.getHandlePos(t, edge.targetHandle, s);
|
|
2682
|
+
let x1 = sPos.x;
|
|
2683
|
+
let y1 = sPos.y;
|
|
2684
|
+
let x2 = tPos.x;
|
|
2685
|
+
let y2 = tPos.y;
|
|
2686
|
+
// ✅ Multi-edge offset
|
|
2687
|
+
const siblings = this.flowEdges.filter(e => e.source === edge.source && e.target === edge.target);
|
|
2688
|
+
const index$1 = siblings.findIndex(e => e.id === edge.id);
|
|
2689
|
+
const offset = siblings.length > 1
|
|
2690
|
+
? (index$1 - (siblings.length - 1) / 2) * 20
|
|
2691
|
+
: 0;
|
|
2692
|
+
// apply offset theo normal vector
|
|
2693
|
+
if (edge.type !== 'straight') {
|
|
2694
|
+
const dx = x2 - x1;
|
|
2695
|
+
const dy = y2 - y1;
|
|
2696
|
+
const len = Math.hypot(dx, dy) || 1;
|
|
2697
|
+
const nx = -dy / len;
|
|
2698
|
+
const ny = dx / len;
|
|
2699
|
+
x1 += nx * offset;
|
|
2700
|
+
y1 += ny * offset;
|
|
2701
|
+
x2 += nx * offset;
|
|
2702
|
+
y2 += ny * offset;
|
|
2703
|
+
}
|
|
2704
|
+
let path = '';
|
|
2705
|
+
// =========================================================
|
|
2706
|
+
// 1. STRAIGHT
|
|
2707
|
+
// =========================================================
|
|
2708
|
+
if (edge.type === 'straight') {
|
|
2709
|
+
path = `M${x1},${y1} L${x2},${y2}`;
|
|
2710
|
+
}
|
|
2711
|
+
// =========================================================
|
|
2712
|
+
// 2. STEP / SMOOTHSTEP (FIXED VERSION)
|
|
2713
|
+
// =========================================================
|
|
2714
|
+
else if (edge.type === 'step' || edge.type === 'smoothstep') {
|
|
2715
|
+
const isSmooth = edge.type === 'smoothstep';
|
|
2716
|
+
const radius = isSmooth ? 8 : 0;
|
|
2717
|
+
const points = [];
|
|
2718
|
+
const midX = x1 + (x2 - x1) / 2;
|
|
2719
|
+
const midY = y1 + (y2 - y1) / 2;
|
|
2720
|
+
// routing basic
|
|
2721
|
+
if (Math.abs(x1 - x2) > Math.abs(y1 - y2)) {
|
|
2722
|
+
// horizontal first
|
|
2723
|
+
points.push({ x: x1, y: y1 });
|
|
2724
|
+
points.push({ x: midX, y: y1 });
|
|
2725
|
+
points.push({ x: midX, y: y2 });
|
|
2726
|
+
points.push({ x: x2, y: y2 });
|
|
2727
|
+
}
|
|
2728
|
+
else {
|
|
2729
|
+
// vertical first
|
|
2730
|
+
points.push({ x: x1, y: y1 });
|
|
2731
|
+
points.push({ x: x1, y: midY });
|
|
2732
|
+
points.push({ x: x2, y: midY });
|
|
2733
|
+
points.push({ x: x2, y: y2 });
|
|
2734
|
+
}
|
|
2735
|
+
const parts = [];
|
|
2736
|
+
parts.push(`M${points[0].x},${points[0].y}`);
|
|
2737
|
+
for (let i = 1; i < points.length - 1; i++) {
|
|
2738
|
+
const prev = points[i - 1];
|
|
2739
|
+
const curr = points[i];
|
|
2740
|
+
const next = points[i + 1];
|
|
2741
|
+
if (radius === 0) {
|
|
2742
|
+
parts.push(`L${curr.x},${curr.y}`);
|
|
2743
|
+
continue;
|
|
2744
|
+
}
|
|
2745
|
+
const dx1 = curr.x - prev.x;
|
|
2746
|
+
const dy1 = curr.y - prev.y;
|
|
2747
|
+
const dx2 = next.x - curr.x;
|
|
2748
|
+
const dy2 = next.y - curr.y;
|
|
2749
|
+
const len1 = Math.hypot(dx1, dy1);
|
|
2750
|
+
const len2 = Math.hypot(dx2, dy2);
|
|
2751
|
+
const r = Math.min(radius, len1 / 2, len2 / 2);
|
|
2752
|
+
const p1x = curr.x - (dx1 / len1) * r;
|
|
2753
|
+
const p1y = curr.y - (dy1 / len1) * r;
|
|
2754
|
+
const p2x = curr.x + (dx2 / len2) * r;
|
|
2755
|
+
const p2y = curr.y + (dy2 / len2) * r;
|
|
2756
|
+
parts.push(`L${p1x},${p1y}`);
|
|
2757
|
+
parts.push(`Q${curr.x},${curr.y} ${p2x},${p2y}`);
|
|
2758
|
+
}
|
|
2759
|
+
const last = points[points.length - 1];
|
|
2760
|
+
parts.push(`L${last.x},${last.y}`);
|
|
2761
|
+
path = parts.join(' ');
|
|
2762
|
+
}
|
|
2763
|
+
// =========================================================
|
|
2764
|
+
// 3. DEFAULT (Bezier)
|
|
2765
|
+
// =========================================================
|
|
2766
|
+
else {
|
|
2767
|
+
const dx = x2 - x1;
|
|
2768
|
+
const curvature = 0.5;
|
|
2769
|
+
path = `
|
|
2770
|
+
M${x1},${y1}
|
|
2771
|
+
C${x1 + dx * curvature},${y1}
|
|
2772
|
+
${x2 - dx * curvature},${y2}
|
|
2773
|
+
${x2},${y2}
|
|
2774
|
+
`;
|
|
2775
|
+
}
|
|
2776
|
+
const isSelected = this.selectedNodes.includes(edge.id); // Assuming edges can be selected
|
|
2777
|
+
return (index.h("g", { key: edge.id, class: { 'edge-group': true } }, index.h("path", { d: path, stroke: "transparent", "stroke-width": "20", fill: "none", style: { cursor: 'pointer', pointerEvents: 'stroke' }, onClick: (e) => {
|
|
2778
|
+
e.stopPropagation();
|
|
2779
|
+
this.service.selectEdge(edge.id, e.ctrlKey || e.metaKey);
|
|
2780
|
+
this.xEdgeClick.emit(edge);
|
|
2781
|
+
} }), index.h("path", { d: path, class: {
|
|
2782
|
+
'edge-path': true,
|
|
2783
|
+
'selected': isSelected,
|
|
2784
|
+
'animated': edge.animated,
|
|
2785
|
+
}, "marker-end": isSelected ? 'url(#arrowhead-selected)' : 'url(#arrowhead)', style: {
|
|
2786
|
+
pointerEvents: 'none',
|
|
2787
|
+
stroke: isSelected
|
|
2788
|
+
? 'var(--x-primary-color)'
|
|
2789
|
+
: (edge.style?.['stroke'] || '#b1b1b7'),
|
|
2790
|
+
strokeDasharray: edge.style?.['strokeDasharray'],
|
|
2791
|
+
} }), edge.selected && (index.h("foreignObject", { x: (x1 + x2) / 2 - 30, y: (y1 + y2) / 2 - 50, width: "60", height: "40" }, index.h("div", { class: "edge-toolbar" }, index.h("button", { class: "edge-toolbar-btn", onClick: (e) => {
|
|
2792
|
+
e.stopPropagation();
|
|
2793
|
+
this.service.updateEdge(edge.id, {
|
|
2794
|
+
animated: !edge.animated,
|
|
2795
|
+
});
|
|
2796
|
+
} }, "\u26A1"), index.h("button", { class: "edge-toolbar-btn", onClick: (e) => {
|
|
2797
|
+
e.stopPropagation();
|
|
2798
|
+
this.service.deleteEdge(edge.id);
|
|
2799
|
+
} }, "\uD83D\uDDD1")))), edge.label &&
|
|
2800
|
+
this.renderEdgeLabel(edge, (x1 + x2) / 2, (y1 + y2) / 2)));
|
|
2801
|
+
}
|
|
2802
|
+
getHandlePos(node, handle, targetNode) {
|
|
2803
|
+
// Ensure we have a width and height to calculate the midpoint/edges
|
|
2804
|
+
const x = Math.round(node.position.x);
|
|
2805
|
+
const y = Math.round(node.position.y);
|
|
2806
|
+
const w = node.width ? Math.round(node.width) : (node.shape === 'diamond' ? 100 : 150);
|
|
2807
|
+
const h = node.height ? Math.round(node.height) : (node.shape === 'diamond' ? 100 : 48);
|
|
2808
|
+
if (handle === 'floating' && targetNode)
|
|
2809
|
+
return this.getFloatingHandlePos(node, targetNode);
|
|
2810
|
+
if (this.edgeRoutingMode === 'auto' && targetNode) {
|
|
2811
|
+
const sc = { x: x + w / 2, y: y + h / 2 };
|
|
2812
|
+
const tc = { x: targetNode.position.x + (targetNode.width || 150) / 2, y: targetNode.position.y + (targetNode.height || 48) / 2 };
|
|
2813
|
+
const dx = tc.x - sc.x;
|
|
2814
|
+
const dy = tc.y - sc.y;
|
|
2815
|
+
if (Math.abs(dx) > Math.abs(dy))
|
|
2816
|
+
handle = dx > 0 ? 'right' : 'left';
|
|
2817
|
+
else
|
|
2818
|
+
handle = dy > 0 ? 'bottom' : 'top';
|
|
2819
|
+
}
|
|
2820
|
+
else if (!handle && targetNode) {
|
|
2821
|
+
const sc = { x: x + w / 2, y: y + h / 2 };
|
|
2822
|
+
const tc = { x: targetNode.position.x + (targetNode.width || 150) / 2, y: targetNode.position.y + (targetNode.height || 48) / 2 };
|
|
2823
|
+
const dx = tc.x - sc.x;
|
|
2824
|
+
const dy = tc.y - sc.y;
|
|
2825
|
+
if (Math.abs(dx) > Math.abs(dy))
|
|
2826
|
+
handle = dx > 0 ? 'right' : 'left';
|
|
2827
|
+
else
|
|
2828
|
+
handle = dy > 0 ? 'bottom' : 'top';
|
|
2829
|
+
}
|
|
2830
|
+
else if (!handle) {
|
|
2831
|
+
handle = 'floating';
|
|
2832
|
+
}
|
|
2833
|
+
// Offset slightly for handle markers (r=4)
|
|
2834
|
+
switch (handle) {
|
|
2835
|
+
case 'top': return { x: x + w / 2, y };
|
|
2836
|
+
case 'right': return { x: x + w, y: y + h / 2 };
|
|
2837
|
+
case 'bottom': return { x: x + w / 2, y: y + h };
|
|
2838
|
+
case 'left': return { x: x, y: y + h / 2 };
|
|
2839
|
+
default: return { x: x + w / 2, y: y + h / 2 };
|
|
2840
|
+
}
|
|
2841
|
+
}
|
|
2842
|
+
getFloatingHandlePos(source, target) {
|
|
2843
|
+
const sw = (source.width || 150) / 2, sh = (source.height || 48) / 2;
|
|
2844
|
+
const sc = { x: source.position.x + sw, y: source.position.y + sh };
|
|
2845
|
+
const tc = { x: target.position.x + (target.width || 150) / 2, y: target.position.y + (target.height || 48) / 2 };
|
|
2846
|
+
const dx = tc.x - sc.x, dy = tc.y - sc.y;
|
|
2847
|
+
const angle = Math.atan2(dy, dx);
|
|
2848
|
+
// Diamond Shape Correction
|
|
2849
|
+
if (source.shape === 'diamond') {
|
|
2850
|
+
const absCos = Math.abs(Math.cos(angle)), absSin = Math.abs(Math.sin(angle));
|
|
2851
|
+
const d = (sw * sh) / (sh * absCos + sw * absSin);
|
|
2852
|
+
return { x: sc.x + d * Math.cos(angle), y: sc.y + d * Math.sin(angle) };
|
|
2853
|
+
}
|
|
2854
|
+
// Circle Shape Correction
|
|
2855
|
+
if (source.shape === 'circle') {
|
|
2856
|
+
const r = Math.min(sw, sh);
|
|
2857
|
+
return { x: sc.x + r * Math.cos(angle), y: sc.y + r * Math.sin(angle) };
|
|
2858
|
+
}
|
|
2859
|
+
if (Math.abs(dx) * sh > Math.abs(dy) * sw)
|
|
2860
|
+
return { x: sc.x + sw * Math.sign(dx), y: sc.y + (dy * sw / Math.abs(dx)) };
|
|
2861
|
+
else
|
|
2862
|
+
return { x: sc.x + (dx * sh / Math.abs(dy)), y: sc.y + sh * Math.sign(dy) };
|
|
2863
|
+
}
|
|
2864
|
+
renderEdgeHandles() {
|
|
2865
|
+
return this.flowEdges
|
|
2866
|
+
.filter(e => e.selected)
|
|
2867
|
+
.map(edge => {
|
|
2868
|
+
const s = this.flowNodes.find(n => n.id === edge.source);
|
|
2869
|
+
const t = this.flowNodes.find(n => n.id === edge.target);
|
|
2870
|
+
if (!s || !t)
|
|
2871
|
+
return null;
|
|
2872
|
+
const sPos = this.getHandlePos(s, edge.sourceHandle, t);
|
|
2873
|
+
const tPos = this.getHandlePos(t, edge.targetHandle, s);
|
|
2874
|
+
return (index.h("g", { class: "edge-controls" }, index.h("circle", { cx: sPos.x, cy: sPos.y, r: "4", class: "edge-handle source", onMouseDown: (e) => this.startEdgeReconnect(e, edge, 'source'), onTouchStart: (e) => this.startEdgeReconnect(e, edge, 'source') }), index.h("circle", { cx: tPos.x, cy: tPos.y, r: "4", class: "edge-handle target", onMouseDown: (e) => this.startEdgeReconnect(e, edge, 'target'), onTouchStart: (e) => this.startEdgeReconnect(e, edge, 'target') })));
|
|
2875
|
+
});
|
|
2876
|
+
}
|
|
2877
|
+
startEdgeReconnect(e, edge, type) {
|
|
2878
|
+
if (this.pendingConnection)
|
|
2879
|
+
return;
|
|
2880
|
+
e.preventDefault();
|
|
2881
|
+
e.stopPropagation();
|
|
2882
|
+
const otherId = type === 'source' ? edge.target : edge.source, otherNode = this.flowNodes.find(n => n.id === otherId);
|
|
2883
|
+
if (!otherNode)
|
|
2884
|
+
return;
|
|
2885
|
+
const rect = this.container.getBoundingClientRect(), { x, y, zoom } = this.flowViewport, otherPos = this.getHandlePos(otherNode, type === 'source' ? edge.targetHandle : edge.sourceHandle), cx = 'touches' in e ? e.touches[0].clientX : e.clientX, cy = 'touches' in e ? e.touches[0].clientY : e.clientY;
|
|
2886
|
+
this.service.deleteEdge(edge.id);
|
|
2887
|
+
this.pendingConnection = { source: otherId, handle: (type === 'source' ? edge.targetHandle : edge.sourceHandle) || 'floating', startX: otherPos.x, startY: otherPos.y, mouseX: (cx - rect.left - x) / zoom, mouseY: (cy - rect.top - y) / zoom };
|
|
2888
|
+
this.startConnectionHandler(otherId, type === 'source' ? 'target' : 'source');
|
|
2889
|
+
}
|
|
2890
|
+
renderNode(node) {
|
|
2891
|
+
const isSelected = this.selectedNodes.includes(node.id);
|
|
2892
|
+
const isFocused = this.focusedNodeId === node.id;
|
|
2893
|
+
const shapeClass = node.shape ? `shape-${node.shape}` : '';
|
|
2894
|
+
return (index.h("div", { key: node.id, "data-id": node.id, class: {
|
|
2895
|
+
'node': true,
|
|
2896
|
+
'selected': isSelected,
|
|
2897
|
+
'dragging': this.draggingNodeId === node.id,
|
|
2898
|
+
'collapsed': node.isCollapsed,
|
|
2899
|
+
[node.className]: !!node.className,
|
|
2900
|
+
[shapeClass]: !!shapeClass,
|
|
2901
|
+
'focused': isFocused,
|
|
2902
|
+
'turbo': this.turboMode,
|
|
2903
|
+
[`type-${node.type}`]: true
|
|
2904
|
+
}, style: {
|
|
2905
|
+
left: `${Math.round(node.position.x)}px`,
|
|
2906
|
+
top: `${Math.round(node.position.y)}px`,
|
|
2907
|
+
width: node.width ? `${node.width}px` : (node.shape === 'diamond' ? '100px' : '150px'),
|
|
2908
|
+
height: node.height ? `${node.height}px` : (node.shape === 'diamond' ? '100px' : '48px'),
|
|
2909
|
+
transform: `rotate(${node.rotation || 0}deg) translateZ(0)`,
|
|
2910
|
+
opacity: (this.focusedNodeId && !isFocused && node.parentId !== this.focusedNodeId) ? '0.3' : '1',
|
|
2911
|
+
zIndex: isSelected ? '1000' : (node.zIndex || 10).toString(),
|
|
2912
|
+
...(node.style || {})
|
|
2913
|
+
}, onMouseDown: (e) => this.handleNodeDragStart(e, node), onTouchStart: (e) => this.handleNodeDragStart(e, node), onClick: (e) => this.handleNodeClick(e, node.id), onDblClick: () => node.type === 'group' && (this.focusedNodeId = this.focusedNodeId === node.id ? null : node.id) }, this.shouldShowToolbar(node) && this.renderNodeToolbar(node), node.shape === 'diamond' && (index.h("div", { class: "node-shape-wrapper" }, index.h("svg", { viewBox: "0 0 100 100", preserveAspectRatio: "none", class: "node-shape-svg" }, index.h("path", { d: "M50 0 L100 50 L50 100 L0 50 Z", class: { 'shape-path': true, 'selected': isSelected } })))), index.h("div", { class: "node-content" }, (node.type === 'group' || node.isParent) && (index.h("button", { class: "node-collapse-btn", onClick: (e) => { e.stopPropagation(); this.service.toggleNodeCollapse(node.id); } }, index.h("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2" }, index.h("path", { d: node.isCollapsed ? "M12 5v14M5 12h14" : "M5 12h14" })))), node.template ? index.h("div", { innerHTML: node.template }) : index.h("slot", { name: `node-${node.type}` }, node.data?.label || node.id)), node.handles ? node.handles.map(h => this.renderCustomHandle(node, h)) : [
|
|
2914
|
+
index.h("div", { key: "top", class: "handle top", onMouseDown: (e) => this.startConnection(e, node.id, 'top') }),
|
|
2915
|
+
index.h("div", { key: "right", class: "handle right", onMouseDown: (e) => this.startConnection(e, node.id, 'right') }),
|
|
2916
|
+
index.h("div", { key: "bottom", class: "handle bottom", onMouseDown: (e) => this.startConnection(e, node.id, 'bottom') }),
|
|
2917
|
+
index.h("div", { key: "left", class: "handle left", onMouseDown: (e) => this.startConnection(e, node.id, 'left') })
|
|
2918
|
+
], isSelected && node.resizable && index.h("div", { class: "node-resizer", onMouseDown: (e) => this.startResize(e, node) }), " ", isSelected && node.rotatable !== false && index.h("div", { class: "node-rotator", onMouseDown: (e) => this.startRotate(e, node) }, index.h("x-icon", { name: "autorenew", size: 12 })), " "));
|
|
2919
|
+
}
|
|
2920
|
+
shouldShowToolbar(node) {
|
|
2921
|
+
if (!this.nodeToolbarVisible)
|
|
2922
|
+
return false;
|
|
2923
|
+
if (this.nodeToolbarMode === 'always')
|
|
2924
|
+
return true;
|
|
2925
|
+
if (this.nodeToolbarMode === 'selected')
|
|
2926
|
+
return this.selectedNodes.includes(node.id);
|
|
2927
|
+
return false; // For hover mode, we'd need some mouse state tracking or CSS
|
|
2928
|
+
}
|
|
2929
|
+
renderNodeToolbar(node) {
|
|
2930
|
+
const colors = ['#ffffff', '#fecaca', '#bfdbfe', '#bbf7d0', '#fef08a', '#e9d5ff'];
|
|
2931
|
+
return (index.h("div", { class: "node-toolbar" }, index.h("div", { class: "color-picker" }, colors.map(c => (index.h("div", { class: "color-swatch", style: { background: c }, onClick: () => this.service.updateNode(node.id, { style: { ...node.style, background: c } }) })))), index.h("x-divider", { type: "vertical" }), index.h("button", { onClick: () => this.service.deleteNode(node.id) }, index.h("x-icon", { name: "delete", size: 14 })), index.h("button", { onClick: () => this.service.copySelected() }, index.h("x-icon", { name: "content_copy", size: 14 }))));
|
|
2932
|
+
}
|
|
2933
|
+
renderCustomHandle(node, h) {
|
|
2934
|
+
return (h("div", { class: { 'handle': true, [h.position]: true }, style: h.style, onMouseDown: (e) => this.startConnection(e, node.id, h.id), onTouchStart: (e) => this.startConnection(e, node.id, h.id) }));
|
|
2935
|
+
}
|
|
2936
|
+
handleNodeDragStart(e, node) {
|
|
2937
|
+
if (node.dragHandle && !e.target.closest(node.dragHandle)) {
|
|
2938
|
+
return;
|
|
2939
|
+
}
|
|
2940
|
+
e.preventDefault(); // Stop simulated mouse events
|
|
2941
|
+
e.stopPropagation();
|
|
2942
|
+
const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX;
|
|
2943
|
+
const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;
|
|
2944
|
+
this.service.selectNode(node.id, ('shiftKey' in e && e.shiftKey));
|
|
2945
|
+
this.startNodeDrag(clientX, clientY, node);
|
|
2946
|
+
}
|
|
2947
|
+
startNodeDrag(startX, startY, node) {
|
|
2948
|
+
const startNodeX = node.position.x;
|
|
2949
|
+
const startNodeY = node.position.y;
|
|
2950
|
+
const zoom = this.flowViewport.zoom;
|
|
2951
|
+
const dragThreshold = 5; // Increased threshold
|
|
2952
|
+
let dragStarted = false;
|
|
2953
|
+
const onMove = (me) => {
|
|
2954
|
+
const cx = 'touches' in me ? me.touches[0].clientX : me.clientX;
|
|
2955
|
+
const cy = 'touches' in me ? me.touches[0].clientY : me.clientY;
|
|
2956
|
+
if (!dragStarted) {
|
|
2957
|
+
const moveDist = Math.sqrt(Math.pow(cx - startX, 2) + Math.pow(cy - startY, 2));
|
|
2958
|
+
if (moveDist > dragThreshold) {
|
|
2959
|
+
dragStarted = true;
|
|
2960
|
+
this.draggingNodeId = node.id;
|
|
2961
|
+
this.isInteracting = true; // Block external sync during drag
|
|
2962
|
+
}
|
|
2963
|
+
else {
|
|
2964
|
+
return;
|
|
2965
|
+
}
|
|
2966
|
+
}
|
|
2967
|
+
const dx = (cx - startX) / zoom;
|
|
2968
|
+
const dy = (cy - startY) / zoom;
|
|
2969
|
+
const newX = startNodeX + dx;
|
|
2970
|
+
const newY = startNodeY + dy;
|
|
2971
|
+
this.service.updateNodePosition(node.id, newX, newY, this.snapToGridValue);
|
|
2972
|
+
this.helperLines = this.calculateHelperLines(node.id, newX, newY);
|
|
2973
|
+
this.checkProximity(node.id, newX, newY);
|
|
2974
|
+
};
|
|
2975
|
+
const onUp = () => {
|
|
2976
|
+
if (this.proximityPreview) {
|
|
2977
|
+
this.service.onConnect(this.proximityPreview);
|
|
2978
|
+
this.proximityPreview = null;
|
|
2979
|
+
}
|
|
2980
|
+
document.removeEventListener('mousemove', onMove);
|
|
2981
|
+
document.removeEventListener('mouseup', onUp);
|
|
2982
|
+
document.removeEventListener('touchmove', onMove);
|
|
2983
|
+
document.removeEventListener('touchend', onUp);
|
|
2984
|
+
this.draggingNodeId = null;
|
|
2985
|
+
this.handleUp();
|
|
2986
|
+
};
|
|
2987
|
+
document.addEventListener('mousemove', onMove);
|
|
2988
|
+
document.addEventListener('mouseup', onUp);
|
|
2989
|
+
document.addEventListener('touchmove', onMove);
|
|
2990
|
+
document.addEventListener('touchend', onUp);
|
|
2991
|
+
}
|
|
2992
|
+
startResize(e, node) {
|
|
2993
|
+
e.stopPropagation();
|
|
2994
|
+
const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX;
|
|
2995
|
+
const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;
|
|
2996
|
+
const startX = clientX;
|
|
2997
|
+
const startY = clientY;
|
|
2998
|
+
const startWidth = node.width || 150;
|
|
2999
|
+
const startHeight = node.height || 48;
|
|
3000
|
+
const zoom = this.flowViewport.zoom;
|
|
3001
|
+
const onMove = (me) => {
|
|
3002
|
+
const cx = 'touches' in me ? me.touches[0].clientX : me.clientX;
|
|
3003
|
+
const cy = 'touches' in me ? me.touches[0].clientY : me.clientY;
|
|
3004
|
+
const dw = (cx - startX) / zoom;
|
|
3005
|
+
const dh = (cy - startY) / zoom;
|
|
3006
|
+
this.service.setNodes(this.flowNodes.map(n => n.id === node.id ? { ...n, width: Math.max(50, startWidth + dw), height: Math.max(30, startHeight + dh) } : n));
|
|
3007
|
+
};
|
|
3008
|
+
const onUp = () => {
|
|
3009
|
+
document.removeEventListener('mousemove', onMove);
|
|
3010
|
+
document.removeEventListener('mouseup', onUp);
|
|
3011
|
+
document.removeEventListener('touchmove', onMove);
|
|
3012
|
+
document.removeEventListener('touchend', onUp);
|
|
3013
|
+
};
|
|
3014
|
+
document.addEventListener('mousemove', onMove);
|
|
3015
|
+
document.addEventListener('mouseup', onUp);
|
|
3016
|
+
document.addEventListener('touchmove', onMove);
|
|
3017
|
+
document.addEventListener('touchend', onUp);
|
|
3018
|
+
}
|
|
3019
|
+
startRotate(e, node) {
|
|
3020
|
+
e.stopPropagation();
|
|
3021
|
+
const rect = this.container.getBoundingClientRect(), { x: vx, y: vy, zoom } = this.flowViewport;
|
|
3022
|
+
const center = {
|
|
3023
|
+
x: node.position.x + (node.width || 150) / 2,
|
|
3024
|
+
y: node.position.y + (node.height || 48) / 2
|
|
3025
|
+
};
|
|
3026
|
+
const onMove = (me) => {
|
|
3027
|
+
const cx = 'touches' in me ? me.touches[0].clientX : me.clientX;
|
|
3028
|
+
const cy = 'touches' in me ? me.touches[0].clientY : me.clientY;
|
|
3029
|
+
const mousePos = { x: (cx - rect.left - vx) / zoom, y: (cy - rect.top - vy) / zoom };
|
|
3030
|
+
const angle = Math.atan2(mousePos.y - center.y, mousePos.x - center.x) * (180 / Math.PI) + 90;
|
|
3031
|
+
this.service.rotateNode(node.id, angle);
|
|
3032
|
+
};
|
|
3033
|
+
const onUp = () => {
|
|
3034
|
+
this.service.saveToHistory();
|
|
3035
|
+
document.removeEventListener('mousemove', onMove);
|
|
3036
|
+
document.removeEventListener('mouseup', onUp);
|
|
3037
|
+
document.removeEventListener('touchmove', onMove);
|
|
3038
|
+
document.removeEventListener('touchend', onUp);
|
|
3039
|
+
};
|
|
3040
|
+
document.addEventListener('mousemove', onMove);
|
|
3041
|
+
document.addEventListener('mouseup', onUp);
|
|
3042
|
+
document.addEventListener('touchmove', onMove);
|
|
3043
|
+
document.addEventListener('touchend', onUp);
|
|
3044
|
+
}
|
|
3045
|
+
applyLassoSelection() {
|
|
3046
|
+
if (!this.selectionRect)
|
|
3047
|
+
return;
|
|
3048
|
+
const { x, y, width, height } = this.selectionRect;
|
|
3049
|
+
const zoom = this.flowViewport.zoom;
|
|
3050
|
+
const viewX = this.flowViewport.x;
|
|
3051
|
+
const viewY = this.flowViewport.y;
|
|
3052
|
+
const rectX = (Math.min(x, x + width) - viewX) / zoom;
|
|
3053
|
+
const rectY = (Math.min(y, y + height) - viewY) / zoom;
|
|
3054
|
+
const rectW = Math.abs(width) / zoom;
|
|
3055
|
+
const rectH = Math.abs(height) / zoom;
|
|
3056
|
+
this.flowNodes.forEach(node => {
|
|
3057
|
+
const nx = node.position.x;
|
|
3058
|
+
const ny = node.position.y;
|
|
3059
|
+
const nw = node.width || 150;
|
|
3060
|
+
const nh = node.height || 48;
|
|
3061
|
+
if (nx >= rectX && nx + nw <= rectX + rectW && ny >= rectY && ny + nh <= rectY + rectH) {
|
|
3062
|
+
this.service.selectNode(node.id, true);
|
|
3063
|
+
}
|
|
3064
|
+
});
|
|
3065
|
+
}
|
|
3066
|
+
renderSelectionRect() {
|
|
3067
|
+
if (!this.selectionRect)
|
|
3068
|
+
return null;
|
|
3069
|
+
const { x, y, width, height } = this.selectionRect;
|
|
3070
|
+
return (index.h("div", { class: "selection-rect", style: {
|
|
3071
|
+
left: `${Math.min(x, x + width)}px`,
|
|
3072
|
+
top: `${Math.min(y, y + height)}px`,
|
|
3073
|
+
width: `${Math.abs(width)}px`,
|
|
3074
|
+
height: `${Math.abs(height)}px`
|
|
3075
|
+
} }));
|
|
3076
|
+
}
|
|
3077
|
+
renderContextMenu() {
|
|
3078
|
+
if (!this.contextMenu)
|
|
3079
|
+
return null;
|
|
3080
|
+
return (index.h("div", { class: "context-menu", style: { left: `${this.contextMenu.x}px`, top: `${this.contextMenu.y}px` } }, index.h("div", { class: "menu-item", onClick: () => this.addNodeAtPos(this.contextMenu.x, this.contextMenu.y) }, "Add Node Here"), index.h("div", { class: "divider" }), this.selectedNodes.length > 1 && (index.h("div", { class: "menu-item", onClick: () => this.service.groupSelected() }, "Group Selected")), index.h("div", { class: "menu-item", onClick: () => this.service.undo() }, "Undo"), index.h("div", { class: "menu-item", onClick: () => this.service.redo() }, "Redo")));
|
|
3081
|
+
}
|
|
3082
|
+
addNodeAtPos(clientX, clientY) {
|
|
3083
|
+
const rect = this.container.getBoundingClientRect();
|
|
3084
|
+
const { x, y, zoom } = this.flowViewport;
|
|
3085
|
+
this.service.addNode({
|
|
3086
|
+
id: `node-${Date.now()}`,
|
|
3087
|
+
position: {
|
|
3088
|
+
x: (clientX - rect.left - x) / zoom,
|
|
3089
|
+
y: (clientY - rect.top - y) / zoom
|
|
3090
|
+
},
|
|
3091
|
+
data: { label: 'New Node' },
|
|
3092
|
+
zIndex: 10
|
|
3093
|
+
});
|
|
3094
|
+
}
|
|
3095
|
+
startConnection(e, nodeId, handle) {
|
|
3096
|
+
if (this.pendingConnection)
|
|
3097
|
+
return;
|
|
3098
|
+
e.preventDefault(); // Stop simulated mouse events
|
|
3099
|
+
e.stopPropagation();
|
|
3100
|
+
const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX;
|
|
3101
|
+
const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;
|
|
3102
|
+
const rect = this.container.getBoundingClientRect();
|
|
3103
|
+
const { x, y, zoom } = this.flowViewport;
|
|
3104
|
+
const node = this.flowNodes.find(n => n.id === nodeId);
|
|
3105
|
+
if (!node)
|
|
3106
|
+
return;
|
|
3107
|
+
// Use handle center instead of click position for start point
|
|
3108
|
+
const hPos = this.getHandlePos(node, handle);
|
|
3109
|
+
this.pendingConnection = {
|
|
3110
|
+
source: nodeId,
|
|
3111
|
+
handle,
|
|
3112
|
+
startX: hPos.x,
|
|
3113
|
+
startY: hPos.y,
|
|
3114
|
+
mouseX: (clientX - rect.left - x) / zoom,
|
|
3115
|
+
mouseY: (clientY - rect.top - y) / zoom
|
|
3116
|
+
};
|
|
3117
|
+
this.proximityPreview = null; // Clear any existing previews
|
|
3118
|
+
this.startConnectionHandler(nodeId, 'source');
|
|
3119
|
+
}
|
|
3120
|
+
startConnectionHandler(nodeId, handleType = 'source') {
|
|
3121
|
+
const onUp = (de) => {
|
|
3122
|
+
const pending = this.pendingConnection;
|
|
3123
|
+
this.pendingConnection = null;
|
|
3124
|
+
this.proximityPreview = null;
|
|
3125
|
+
document.removeEventListener('mouseup', onUp);
|
|
3126
|
+
document.removeEventListener('touchend', onUp);
|
|
3127
|
+
if (!pending)
|
|
3128
|
+
return;
|
|
3129
|
+
const clientX = 'touches' in de ? de.touches[0].clientX : de.clientX, clientY = 'touches' in de ? de.touches[0].clientY : de.clientY, { x: vx, y: vy, zoom } = this.flowViewport, rect = this.container.getBoundingClientRect(), lx = (clientX - rect.left - vx) / zoom, ly = (clientY - rect.top - vy) / zoom, padding = 15, targetNode = this.flowNodes.find(n => {
|
|
3130
|
+
const w = (n.width || 150) + padding * 2, h = (n.height || 48) + padding * 2;
|
|
3131
|
+
return lx >= n.position.x - padding && lx <= n.position.x + w && ly >= n.position.y - padding && ly <= n.position.y + h;
|
|
3132
|
+
});
|
|
3133
|
+
if (targetNode && targetNode.id !== nodeId) {
|
|
3134
|
+
const path = de.composedPath(), targetHandleEl = path.find(el => el.classList && el.classList.contains('handle')), targetHandle = targetHandleEl ? (Array.from(targetHandleEl.classList).find(c => ['top', 'right', 'bottom', 'left'].includes(c))) : 'floating';
|
|
3135
|
+
const connection = handleType === 'source'
|
|
3136
|
+
? { source: nodeId, target: targetNode.id, sourceHandle: pending.handle, targetHandle }
|
|
3137
|
+
: { source: targetNode.id, target: nodeId, sourceHandle: targetHandle, targetHandle: pending.handle };
|
|
3138
|
+
if (this.service.isValidConnection(connection)) {
|
|
3139
|
+
this.service.onConnect(connection);
|
|
3140
|
+
this.xConnect.emit(connection);
|
|
3141
|
+
}
|
|
3142
|
+
}
|
|
3143
|
+
else if (!targetNode) {
|
|
3144
|
+
const newNodeId = `node-${Date.now()}`;
|
|
3145
|
+
this.service.addNode({ id: newNodeId, position: { x: lx - 75, y: ly - 24 }, data: { label: 'New Node' }, zIndex: 10 });
|
|
3146
|
+
const connection = handleType === 'source'
|
|
3147
|
+
? { source: nodeId, target: newNodeId, sourceHandle: pending.handle, targetHandle: 'floating' }
|
|
3148
|
+
: { source: newNodeId, target: nodeId, sourceHandle: 'floating', targetHandle: pending.handle };
|
|
3149
|
+
this.service.onConnect(connection);
|
|
3150
|
+
this.xConnect.emit(connection);
|
|
3151
|
+
}
|
|
3152
|
+
};
|
|
3153
|
+
document.addEventListener('mouseup', onUp);
|
|
3154
|
+
document.addEventListener('touchend', onUp);
|
|
3155
|
+
}
|
|
3156
|
+
startDrawing(x, y) {
|
|
3157
|
+
this.activeDrawing = {
|
|
3158
|
+
id: `draw-${Date.now()}`,
|
|
3159
|
+
type: (this.tool === 'rectangle' ? 'rectangle' : 'freehand'),
|
|
3160
|
+
position: { x, y },
|
|
3161
|
+
points: this.tool === 'freehand' ? [{ x, y }] : [],
|
|
3162
|
+
width: 0,
|
|
3163
|
+
height: 0,
|
|
3164
|
+
style: { stroke: '#111', strokeWidth: '2', fill: 'none' }
|
|
3165
|
+
};
|
|
3166
|
+
}
|
|
3167
|
+
renderDrawing(d) {
|
|
3168
|
+
if (d.type === 'rectangle') {
|
|
3169
|
+
return (index.h("rect", { x: Math.min(d.position.x, d.position.x + (d.width || 0)), y: Math.min(d.position.y, d.position.y + (d.height || 0)), width: Math.abs(d.width || 0), height: Math.abs(d.height || 0), style: d.style }));
|
|
3170
|
+
}
|
|
3171
|
+
else {
|
|
3172
|
+
return (index.h("path", { d: d.points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`).join(' '), style: d.style }));
|
|
3173
|
+
}
|
|
3174
|
+
}
|
|
3175
|
+
checkProximity(nodeId, nx, ny) {
|
|
3176
|
+
const threshold = 50;
|
|
3177
|
+
const node = this.flowNodes.find(n => n.id === nodeId);
|
|
3178
|
+
if (!node)
|
|
3179
|
+
return;
|
|
3180
|
+
const nw = node.width || 150;
|
|
3181
|
+
const nh = node.height || 48;
|
|
3182
|
+
const nc = { x: nx + nw / 2, y: ny + nh / 2 };
|
|
3183
|
+
let closest = null;
|
|
3184
|
+
let minDist = threshold;
|
|
3185
|
+
this.flowNodes.forEach(other => {
|
|
3186
|
+
if (other.id === nodeId || other.parentId === nodeId)
|
|
3187
|
+
return;
|
|
3188
|
+
const ow = other.width || 150;
|
|
3189
|
+
const oh = other.height || 48;
|
|
3190
|
+
const oc = { x: other.position.x + ow / 2, y: other.position.y + oh / 2 };
|
|
3191
|
+
const d = Math.sqrt((nc.x - oc.x) ** 2 + (nc.y - oc.y) ** 2);
|
|
3192
|
+
if (d < minDist) {
|
|
3193
|
+
minDist = d;
|
|
3194
|
+
closest = { source: nodeId, target: other.id, sourceHandle: 'floating', targetHandle: 'floating' };
|
|
3195
|
+
}
|
|
3196
|
+
});
|
|
3197
|
+
this.proximityPreview = closest;
|
|
3198
|
+
}
|
|
3199
|
+
calculateHelperLines(nodeId, x, y) {
|
|
3200
|
+
const threshold = 10;
|
|
3201
|
+
const lines = [];
|
|
3202
|
+
this.flowNodes.forEach(other => {
|
|
3203
|
+
if (other.id === nodeId || other.parentId === nodeId)
|
|
3204
|
+
return;
|
|
3205
|
+
if (Math.abs(x - other.position.x) < threshold)
|
|
3206
|
+
lines.push({ x: other.position.x });
|
|
3207
|
+
if (Math.abs(y - other.position.y) < threshold)
|
|
3208
|
+
lines.push({ y: other.position.y });
|
|
3209
|
+
});
|
|
3210
|
+
return lines;
|
|
3211
|
+
}
|
|
3212
|
+
renderHelperLines() {
|
|
3213
|
+
return index.h("svg", { class: "helper-lines-svg", style: { position: 'absolute', top: '0', left: '0', width: '100%', height: '100%', pointerEvents: 'none' } }, this.helperLines.map(line => line.x !== undefined ? index.h("line", { x1: line.x, y1: "-10000", x2: line.x, y2: "10000", stroke: "#3b82f6", "stroke-dasharray": "2,2" }) : index.h("line", { x1: "-10000", y1: line.y, x2: "10000", y2: line.y, stroke: "#3b82f6", "stroke-dasharray": "2,2" })));
|
|
3214
|
+
}
|
|
3215
|
+
static get watchers() { return {
|
|
3216
|
+
"nodes": [{
|
|
3217
|
+
"handleNodesPropChange": 0
|
|
3218
|
+
}],
|
|
3219
|
+
"edges": [{
|
|
3220
|
+
"handleEdgesPropChange": 0
|
|
3221
|
+
}],
|
|
3222
|
+
"viewportValue": [{
|
|
3223
|
+
"handleViewportChange": 0
|
|
3224
|
+
}]
|
|
3225
|
+
}; }
|
|
3226
|
+
};
|
|
3227
|
+
XWorkflow.style = xWorkflowCss();
|
|
3228
|
+
|
|
3229
|
+
exports.x_alert = XAlert;
|
|
3230
|
+
exports.x_badge = XBadge;
|
|
3231
|
+
exports.x_float_button = XFloatButton;
|
|
3232
|
+
exports.x_form = XForm;
|
|
3233
|
+
exports.x_menu = XMenu;
|
|
3234
|
+
exports.x_menu_item = XMenuItem;
|
|
3235
|
+
exports.x_result = XResult;
|
|
3236
|
+
exports.x_select_option = XSelectOption;
|
|
3237
|
+
exports.x_tag = XTag;
|
|
3238
|
+
exports.x_textarea = XTextarea;
|
|
3239
|
+
exports.x_workflow = XWorkflow;
|