@maxax/ui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/component.d.ts +5 -0
- package/dist/component.d.ts.map +1 -0
- package/dist/components/basic-arrow/BasicArrow.vue.d.ts +14 -0
- package/dist/components/basic-arrow/BasicArrow.vue.d.ts.map +1 -0
- package/dist/components/basic-arrow/context.d.ts +7 -0
- package/dist/components/basic-arrow/context.d.ts.map +1 -0
- package/dist/components/basic-arrow/index.d.ts +8 -0
- package/dist/components/basic-arrow/index.d.ts.map +1 -0
- package/dist/components/basic-arrow/interface.d.ts +8 -0
- package/dist/components/basic-arrow/interface.d.ts.map +1 -0
- package/dist/components/basic-button/BasicButton.vue.d.ts +23 -0
- package/dist/components/basic-button/BasicButton.vue.d.ts.map +1 -0
- package/dist/components/basic-button/context.d.ts +7 -0
- package/dist/components/basic-button/context.d.ts.map +1 -0
- package/dist/components/basic-button/index.d.ts +8 -0
- package/dist/components/basic-button/index.d.ts.map +1 -0
- package/dist/components/basic-button/interface.d.ts +35 -0
- package/dist/components/basic-button/interface.d.ts.map +1 -0
- package/dist/components/basic-button-group/BasicButtonGroup.vue.d.ts +45 -0
- package/dist/components/basic-button-group/BasicButtonGroup.vue.d.ts.map +1 -0
- package/dist/components/basic-button-group/components/ButtonGroupItem.vue.d.ts +38 -0
- package/dist/components/basic-button-group/components/ButtonGroupItem.vue.d.ts.map +1 -0
- package/dist/components/basic-button-group/context.d.ts +7 -0
- package/dist/components/basic-button-group/context.d.ts.map +1 -0
- package/dist/components/basic-button-group/hooks/index.d.ts +4 -0
- package/dist/components/basic-button-group/hooks/index.d.ts.map +1 -0
- package/dist/components/basic-button-group/hooks/use-button-group-class.d.ts +10 -0
- package/dist/components/basic-button-group/hooks/use-button-group-class.d.ts.map +1 -0
- package/dist/components/basic-button-group/hooks/use-button-group-events.d.ts +13 -0
- package/dist/components/basic-button-group/hooks/use-button-group-events.d.ts.map +1 -0
- package/dist/components/basic-button-group/hooks/use-button-group-schema.d.ts +12 -0
- package/dist/components/basic-button-group/hooks/use-button-group-schema.d.ts.map +1 -0
- package/dist/components/basic-button-group/index.d.ts +8 -0
- package/dist/components/basic-button-group/index.d.ts.map +1 -0
- package/dist/components/basic-button-group/interface.d.ts +2 -0
- package/dist/components/basic-button-group/interface.d.ts.map +1 -0
- package/dist/components/basic-button-group/types/button-group.d.ts +71 -0
- package/dist/components/basic-button-group/types/button-group.d.ts.map +1 -0
- package/dist/components/basic-button-group/types/component.d.ts +7 -0
- package/dist/components/basic-button-group/types/component.d.ts.map +1 -0
- package/dist/components/basic-button-group/types/index.d.ts +3 -0
- package/dist/components/basic-button-group/types/index.d.ts.map +1 -0
- package/dist/components/basic-card/BasicCard.vue.d.ts +21 -0
- package/dist/components/basic-card/BasicCard.vue.d.ts.map +1 -0
- package/dist/components/basic-card/context.d.ts +7 -0
- package/dist/components/basic-card/context.d.ts.map +1 -0
- package/dist/components/basic-card/index.d.ts +8 -0
- package/dist/components/basic-card/index.d.ts.map +1 -0
- package/dist/components/basic-card/interface.d.ts +8 -0
- package/dist/components/basic-card/interface.d.ts.map +1 -0
- package/dist/components/basic-cascader/BasicCascader.vue.d.ts +45 -0
- package/dist/components/basic-cascader/BasicCascader.vue.d.ts.map +1 -0
- package/dist/components/basic-cascader/context.d.ts +7 -0
- package/dist/components/basic-cascader/context.d.ts.map +1 -0
- package/dist/components/basic-cascader/index.d.ts +8 -0
- package/dist/components/basic-cascader/index.d.ts.map +1 -0
- package/dist/components/basic-cascader/interface.d.ts +30 -0
- package/dist/components/basic-cascader/interface.d.ts.map +1 -0
- package/dist/components/basic-checkbox/BasicCheckbox.d.ts +88 -0
- package/dist/components/basic-checkbox/BasicCheckbox.d.ts.map +1 -0
- package/dist/components/basic-checkbox/context.d.ts +7 -0
- package/dist/components/basic-checkbox/context.d.ts.map +1 -0
- package/dist/components/basic-checkbox/icon-check.d.ts +3 -0
- package/dist/components/basic-checkbox/icon-check.d.ts.map +1 -0
- package/dist/components/basic-checkbox/icon-hover.vue.d.ts +19 -0
- package/dist/components/basic-checkbox/icon-hover.vue.d.ts.map +1 -0
- package/dist/components/basic-checkbox/index.d.ts +8 -0
- package/dist/components/basic-checkbox/index.d.ts.map +1 -0
- package/dist/components/basic-checkbox/interface.d.ts +76 -0
- package/dist/components/basic-checkbox/interface.d.ts.map +1 -0
- package/dist/components/basic-checkbox-group/BasicCheckboxGroup.d.ts +80 -0
- package/dist/components/basic-checkbox-group/BasicCheckboxGroup.d.ts.map +1 -0
- package/dist/components/basic-checkbox-group/context.d.ts +7 -0
- package/dist/components/basic-checkbox-group/context.d.ts.map +1 -0
- package/dist/components/basic-checkbox-group/index.d.ts +8 -0
- package/dist/components/basic-checkbox-group/index.d.ts.map +1 -0
- package/dist/components/basic-checkbox-group/interface.d.ts +75 -0
- package/dist/components/basic-checkbox-group/interface.d.ts.map +1 -0
- package/dist/components/basic-col/BasicCol.d.ts +76 -0
- package/dist/components/basic-col/BasicCol.d.ts.map +1 -0
- package/dist/components/basic-col/context.d.ts +7 -0
- package/dist/components/basic-col/context.d.ts.map +1 -0
- package/dist/components/basic-col/index.d.ts +8 -0
- package/dist/components/basic-col/index.d.ts.map +1 -0
- package/dist/components/basic-col/interface.d.ts +49 -0
- package/dist/components/basic-col/interface.d.ts.map +1 -0
- package/dist/components/basic-count-to/BasicCountTo.vue.d.ts +59 -0
- package/dist/components/basic-count-to/BasicCountTo.vue.d.ts.map +1 -0
- package/dist/components/basic-count-to/context.d.ts +7 -0
- package/dist/components/basic-count-to/context.d.ts.map +1 -0
- package/dist/components/basic-count-to/index.d.ts +8 -0
- package/dist/components/basic-count-to/index.d.ts.map +1 -0
- package/dist/components/basic-count-to/interface.d.ts +19 -0
- package/dist/components/basic-count-to/interface.d.ts.map +1 -0
- package/dist/components/basic-date-picker/BasicDatePicker.vue.d.ts +52 -0
- package/dist/components/basic-date-picker/BasicDatePicker.vue.d.ts.map +1 -0
- package/dist/components/basic-date-picker/context.d.ts +7 -0
- package/dist/components/basic-date-picker/context.d.ts.map +1 -0
- package/dist/components/basic-date-picker/index.d.ts +8 -0
- package/dist/components/basic-date-picker/index.d.ts.map +1 -0
- package/dist/components/basic-date-picker/interface.d.ts +13 -0
- package/dist/components/basic-date-picker/interface.d.ts.map +1 -0
- package/dist/components/basic-drag-verify/BasicDragVerify.vue.d.ts +112 -0
- package/dist/components/basic-drag-verify/BasicDragVerify.vue.d.ts.map +1 -0
- package/dist/components/basic-drag-verify/context.d.ts +7 -0
- package/dist/components/basic-drag-verify/context.d.ts.map +1 -0
- package/dist/components/basic-drag-verify/index.d.ts +8 -0
- package/dist/components/basic-drag-verify/index.d.ts.map +1 -0
- package/dist/components/basic-drag-verify/interface.d.ts +53 -0
- package/dist/components/basic-drag-verify/interface.d.ts.map +1 -0
- package/dist/components/basic-drawer/BasicDrawer.vue.d.ts +100 -0
- package/dist/components/basic-drawer/BasicDrawer.vue.d.ts.map +1 -0
- package/dist/components/basic-drawer/context.d.ts +7 -0
- package/dist/components/basic-drawer/context.d.ts.map +1 -0
- package/dist/components/basic-drawer/index.d.ts +8 -0
- package/dist/components/basic-drawer/index.d.ts.map +1 -0
- package/dist/components/basic-drawer/interface.d.ts +61 -0
- package/dist/components/basic-drawer/interface.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/BasicEditBatch.vue.d.ts +65 -0
- package/dist/components/basic-edit-batch/BasicEditBatch.vue.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/componentMap.d.ts +5 -0
- package/dist/components/basic-edit-batch/componentMap.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/components/EditBatchAction.vue.d.ts +58 -0
- package/dist/components/basic-edit-batch/components/EditBatchAction.vue.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/components/EditBatchItem.vue.d.ts +103 -0
- package/dist/components/basic-edit-batch/components/EditBatchItem.vue.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/context.d.ts +7 -0
- package/dist/components/basic-edit-batch/context.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/helper.d.ts +20 -0
- package/dist/components/basic-edit-batch/helper.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/hooks/index.d.ts +5 -0
- package/dist/components/basic-edit-batch/hooks/index.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/hooks/use-edit-batch-class.d.ts +10 -0
- package/dist/components/basic-edit-batch/hooks/use-edit-batch-class.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/hooks/use-edit-batch-events.d.ts +19 -0
- package/dist/components/basic-edit-batch/hooks/use-edit-batch-events.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/hooks/use-edit-batch-schema.d.ts +16 -0
- package/dist/components/basic-edit-batch/hooks/use-edit-batch-schema.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/hooks/use-edit-batch-values.d.ts +16 -0
- package/dist/components/basic-edit-batch/hooks/use-edit-batch-values.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/index.d.ts +8 -0
- package/dist/components/basic-edit-batch/index.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/interface.d.ts +2 -0
- package/dist/components/basic-edit-batch/interface.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/types/component.d.ts +47 -0
- package/dist/components/basic-edit-batch/types/component.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/types/context.d.ts +5 -0
- package/dist/components/basic-edit-batch/types/context.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/types/edit-batch.d.ts +97 -0
- package/dist/components/basic-edit-batch/types/edit-batch.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/types/help.d.ts +11 -0
- package/dist/components/basic-edit-batch/types/help.d.ts.map +1 -0
- package/dist/components/basic-edit-batch/types/index.d.ts +5 -0
- package/dist/components/basic-edit-batch/types/index.d.ts.map +1 -0
- package/dist/components/basic-font-icon/BasicFontIcon.d.ts +15 -0
- package/dist/components/basic-font-icon/BasicFontIcon.d.ts.map +1 -0
- package/dist/components/basic-font-icon/context.d.ts +7 -0
- package/dist/components/basic-font-icon/context.d.ts.map +1 -0
- package/dist/components/basic-font-icon/index.d.ts +8 -0
- package/dist/components/basic-font-icon/index.d.ts.map +1 -0
- package/dist/components/basic-font-icon/interface.d.ts +13 -0
- package/dist/components/basic-font-icon/interface.d.ts.map +1 -0
- package/dist/components/basic-form/BasicForm.vue.d.ts +144 -0
- package/dist/components/basic-form/BasicForm.vue.d.ts.map +1 -0
- package/dist/components/basic-form/componentMap.d.ts +8 -0
- package/dist/components/basic-form/componentMap.d.ts.map +1 -0
- package/dist/components/basic-form/components/FormAction.vue.d.ts +94 -0
- package/dist/components/basic-form/components/FormAction.vue.d.ts.map +1 -0
- package/dist/components/basic-form/components/FormItem.vue.d.ts +193 -0
- package/dist/components/basic-form/components/FormItem.vue.d.ts.map +1 -0
- package/dist/components/basic-form/constants.d.ts +2 -0
- package/dist/components/basic-form/constants.d.ts.map +1 -0
- package/dist/components/basic-form/context.d.ts +7 -0
- package/dist/components/basic-form/context.d.ts.map +1 -0
- package/dist/components/basic-form/helper.d.ts +20 -0
- package/dist/components/basic-form/helper.d.ts.map +1 -0
- package/dist/components/basic-form/hooks/index.d.ts +10 -0
- package/dist/components/basic-form/hooks/index.d.ts.map +1 -0
- package/dist/components/basic-form/hooks/use-advanced.d.ts +18 -0
- package/dist/components/basic-form/hooks/use-advanced.d.ts.map +1 -0
- package/dist/components/basic-form/hooks/use-auto-focus.d.ts +12 -0
- package/dist/components/basic-form/hooks/use-auto-focus.d.ts.map +1 -0
- package/dist/components/basic-form/hooks/use-component-register.d.ts +5 -0
- package/dist/components/basic-form/hooks/use-component-register.d.ts.map +1 -0
- package/dist/components/basic-form/hooks/use-form-class.d.ts +12 -0
- package/dist/components/basic-form/hooks/use-form-class.d.ts.map +1 -0
- package/dist/components/basic-form/hooks/use-form-events.d.ts +18 -0
- package/dist/components/basic-form/hooks/use-form-events.d.ts.map +1 -0
- package/dist/components/basic-form/hooks/use-form-grid.d.ts +12 -0
- package/dist/components/basic-form/hooks/use-form-grid.d.ts.map +1 -0
- package/dist/components/basic-form/hooks/use-form-schema.d.ts +14 -0
- package/dist/components/basic-form/hooks/use-form-schema.d.ts.map +1 -0
- package/dist/components/basic-form/hooks/use-form-values.d.ts +16 -0
- package/dist/components/basic-form/hooks/use-form-values.d.ts.map +1 -0
- package/dist/components/basic-form/hooks/use-item-label-width.d.ts +8 -0
- package/dist/components/basic-form/hooks/use-item-label-width.d.ts.map +1 -0
- package/dist/components/basic-form/index.d.ts +10 -0
- package/dist/components/basic-form/index.d.ts.map +1 -0
- package/dist/components/basic-form/interface.d.ts +2 -0
- package/dist/components/basic-form/interface.d.ts.map +1 -0
- package/dist/components/basic-form/types/col.d.ts +33 -0
- package/dist/components/basic-form/types/col.d.ts.map +1 -0
- package/dist/components/basic-form/types/component.d.ts +49 -0
- package/dist/components/basic-form/types/component.d.ts.map +1 -0
- package/dist/components/basic-form/types/context.d.ts +5 -0
- package/dist/components/basic-form/types/context.d.ts.map +1 -0
- package/dist/components/basic-form/types/form.d.ts +153 -0
- package/dist/components/basic-form/types/form.d.ts.map +1 -0
- package/dist/components/basic-form/types/formItem.d.ts +9 -0
- package/dist/components/basic-form/types/formItem.d.ts.map +1 -0
- package/dist/components/basic-form/types/help.d.ts +11 -0
- package/dist/components/basic-form/types/help.d.ts.map +1 -0
- package/dist/components/basic-form/types/hooks.d.ts +7 -0
- package/dist/components/basic-form/types/hooks.d.ts.map +1 -0
- package/dist/components/basic-form/types/index.d.ts +8 -0
- package/dist/components/basic-form/types/index.d.ts.map +1 -0
- package/dist/components/basic-gradient-title/BasicGradientTitle.vue.d.ts +23 -0
- package/dist/components/basic-gradient-title/BasicGradientTitle.vue.d.ts.map +1 -0
- package/dist/components/basic-gradient-title/context.d.ts +7 -0
- package/dist/components/basic-gradient-title/context.d.ts.map +1 -0
- package/dist/components/basic-gradient-title/index.d.ts +8 -0
- package/dist/components/basic-gradient-title/index.d.ts.map +1 -0
- package/dist/components/basic-gradient-title/interface.d.ts +8 -0
- package/dist/components/basic-gradient-title/interface.d.ts.map +1 -0
- package/dist/components/basic-help/BasicHelp.vue.d.ts +40 -0
- package/dist/components/basic-help/BasicHelp.vue.d.ts.map +1 -0
- package/dist/components/basic-help/context.d.ts +7 -0
- package/dist/components/basic-help/context.d.ts.map +1 -0
- package/dist/components/basic-help/index.d.ts +8 -0
- package/dist/components/basic-help/index.d.ts.map +1 -0
- package/dist/components/basic-help/interface.d.ts +24 -0
- package/dist/components/basic-help/interface.d.ts.map +1 -0
- package/dist/components/basic-hidden/BasicHidden.vue.d.ts +14 -0
- package/dist/components/basic-hidden/BasicHidden.vue.d.ts.map +1 -0
- package/dist/components/basic-hidden/context.d.ts +7 -0
- package/dist/components/basic-hidden/context.d.ts.map +1 -0
- package/dist/components/basic-hidden/index.d.ts +8 -0
- package/dist/components/basic-hidden/index.d.ts.map +1 -0
- package/dist/components/basic-hidden/interface.d.ts +8 -0
- package/dist/components/basic-hidden/interface.d.ts.map +1 -0
- package/dist/components/basic-icon-online/BasicIconOnline.d.ts +15 -0
- package/dist/components/basic-icon-online/BasicIconOnline.d.ts.map +1 -0
- package/dist/components/basic-icon-online/context.d.ts +7 -0
- package/dist/components/basic-icon-online/context.d.ts.map +1 -0
- package/dist/components/basic-icon-online/index.d.ts +8 -0
- package/dist/components/basic-icon-online/index.d.ts.map +1 -0
- package/dist/components/basic-icon-online/interface.d.ts +13 -0
- package/dist/components/basic-icon-online/interface.d.ts.map +1 -0
- package/dist/components/basic-icon-picker/BasicIconPicker.vue.d.ts +14 -0
- package/dist/components/basic-icon-picker/BasicIconPicker.vue.d.ts.map +1 -0
- package/dist/components/basic-icon-picker/context.d.ts +7 -0
- package/dist/components/basic-icon-picker/context.d.ts.map +1 -0
- package/dist/components/basic-icon-picker/data.d.ts +10 -0
- package/dist/components/basic-icon-picker/data.d.ts.map +1 -0
- package/dist/components/basic-icon-picker/index.d.ts +8 -0
- package/dist/components/basic-icon-picker/index.d.ts.map +1 -0
- package/dist/components/basic-icon-picker/interface.d.ts +19 -0
- package/dist/components/basic-icon-picker/interface.d.ts.map +1 -0
- package/dist/components/basic-list-page/BasicListPage.vue.d.ts +84 -0
- package/dist/components/basic-list-page/BasicListPage.vue.d.ts.map +1 -0
- package/dist/components/basic-list-page/constants.d.ts +10 -0
- package/dist/components/basic-list-page/constants.d.ts.map +1 -0
- package/dist/components/basic-list-page/context.d.ts +7 -0
- package/dist/components/basic-list-page/context.d.ts.map +1 -0
- package/dist/components/basic-list-page/hooks/index.d.ts +5 -0
- package/dist/components/basic-list-page/hooks/index.d.ts.map +1 -0
- package/dist/components/basic-list-page/hooks/use-data-source.d.ts +31 -0
- package/dist/components/basic-list-page/hooks/use-data-source.d.ts.map +1 -0
- package/dist/components/basic-list-page/hooks/use-list-form.d.ts +16 -0
- package/dist/components/basic-list-page/hooks/use-list-form.d.ts.map +1 -0
- package/dist/components/basic-list-page/hooks/use-loading.d.ts +8 -0
- package/dist/components/basic-list-page/hooks/use-loading.d.ts.map +1 -0
- package/dist/components/basic-list-page/hooks/use-pagination.d.ts +92 -0
- package/dist/components/basic-list-page/hooks/use-pagination.d.ts.map +1 -0
- package/dist/components/basic-list-page/index.d.ts +8 -0
- package/dist/components/basic-list-page/index.d.ts.map +1 -0
- package/dist/components/basic-list-page/interface.d.ts +73 -0
- package/dist/components/basic-list-page/interface.d.ts.map +1 -0
- package/dist/components/basic-loading/directive.d.ts +15 -0
- package/dist/components/basic-loading/directive.d.ts.map +1 -0
- package/dist/components/basic-loading/index.d.ts +13 -0
- package/dist/components/basic-loading/index.d.ts.map +1 -0
- package/dist/components/basic-loading/interface.d.ts +52 -0
- package/dist/components/basic-loading/interface.d.ts.map +1 -0
- package/dist/components/basic-loading/loading.d.ts +27 -0
- package/dist/components/basic-loading/loading.d.ts.map +1 -0
- package/dist/components/basic-loading/service.d.ts +5 -0
- package/dist/components/basic-loading/service.d.ts.map +1 -0
- package/dist/components/basic-message-box/BasicMessageBox.vue.d.ts +2753 -0
- package/dist/components/basic-message-box/BasicMessageBox.vue.d.ts.map +1 -0
- package/dist/components/basic-message-box/context.d.ts +7 -0
- package/dist/components/basic-message-box/context.d.ts.map +1 -0
- package/dist/components/basic-message-box/index.d.ts +8 -0
- package/dist/components/basic-message-box/index.d.ts.map +1 -0
- package/dist/components/basic-message-box/interface.d.ts +187 -0
- package/dist/components/basic-message-box/interface.d.ts.map +1 -0
- package/dist/components/basic-message-box/messageBox.d.ts +5 -0
- package/dist/components/basic-message-box/messageBox.d.ts.map +1 -0
- package/dist/components/basic-modal/BasicModal.vue.d.ts +53 -0
- package/dist/components/basic-modal/BasicModal.vue.d.ts.map +1 -0
- package/dist/components/basic-modal/context.d.ts +7 -0
- package/dist/components/basic-modal/context.d.ts.map +1 -0
- package/dist/components/basic-modal/index.d.ts +8 -0
- package/dist/components/basic-modal/index.d.ts.map +1 -0
- package/dist/components/basic-modal/interface.d.ts +45 -0
- package/dist/components/basic-modal/interface.d.ts.map +1 -0
- package/dist/components/basic-notification/BasicNotification.vue.d.ts +70 -0
- package/dist/components/basic-notification/BasicNotification.vue.d.ts.map +1 -0
- package/dist/components/basic-notification/context.d.ts +7 -0
- package/dist/components/basic-notification/context.d.ts.map +1 -0
- package/dist/components/basic-notification/index.d.ts +8 -0
- package/dist/components/basic-notification/index.d.ts.map +1 -0
- package/dist/components/basic-notification/interface.d.ts +56 -0
- package/dist/components/basic-notification/interface.d.ts.map +1 -0
- package/dist/components/basic-notification/notify.d.ts +16 -0
- package/dist/components/basic-notification/notify.d.ts.map +1 -0
- package/dist/components/basic-overlay/BasicOverlay.d.ts +32 -0
- package/dist/components/basic-overlay/BasicOverlay.d.ts.map +1 -0
- package/dist/components/basic-overlay/context.d.ts +7 -0
- package/dist/components/basic-overlay/context.d.ts.map +1 -0
- package/dist/components/basic-overlay/index.d.ts +8 -0
- package/dist/components/basic-overlay/index.d.ts.map +1 -0
- package/dist/components/basic-overlay/interface.d.ts +22 -0
- package/dist/components/basic-overlay/interface.d.ts.map +1 -0
- package/dist/components/basic-page/BasicPage.vue.d.ts +41 -0
- package/dist/components/basic-page/BasicPage.vue.d.ts.map +1 -0
- package/dist/components/basic-page/context.d.ts +7 -0
- package/dist/components/basic-page/context.d.ts.map +1 -0
- package/dist/components/basic-page/index.d.ts +8 -0
- package/dist/components/basic-page/index.d.ts.map +1 -0
- package/dist/components/basic-page/interface.d.ts +11 -0
- package/dist/components/basic-page/interface.d.ts.map +1 -0
- package/dist/components/basic-panel/BasicPanel.vue.d.ts +39 -0
- package/dist/components/basic-panel/BasicPanel.vue.d.ts.map +1 -0
- package/dist/components/basic-panel/context.d.ts +7 -0
- package/dist/components/basic-panel/context.d.ts.map +1 -0
- package/dist/components/basic-panel/index.d.ts +8 -0
- package/dist/components/basic-panel/index.d.ts.map +1 -0
- package/dist/components/basic-panel/interface.d.ts +8 -0
- package/dist/components/basic-panel/interface.d.ts.map +1 -0
- package/dist/components/basic-radio/BasicRadio.d.ts +72 -0
- package/dist/components/basic-radio/BasicRadio.d.ts.map +1 -0
- package/dist/components/basic-radio/context.d.ts +7 -0
- package/dist/components/basic-radio/context.d.ts.map +1 -0
- package/dist/components/basic-radio/index.d.ts +8 -0
- package/dist/components/basic-radio/index.d.ts.map +1 -0
- package/dist/components/basic-radio/interface.d.ts +51 -0
- package/dist/components/basic-radio/interface.d.ts.map +1 -0
- package/dist/components/basic-radio-group/BasicRadioGroup.d.ts +80 -0
- package/dist/components/basic-radio-group/BasicRadioGroup.d.ts.map +1 -0
- package/dist/components/basic-radio-group/context.d.ts +7 -0
- package/dist/components/basic-radio-group/context.d.ts.map +1 -0
- package/dist/components/basic-radio-group/index.d.ts +8 -0
- package/dist/components/basic-radio-group/index.d.ts.map +1 -0
- package/dist/components/basic-radio-group/interface.d.ts +71 -0
- package/dist/components/basic-radio-group/interface.d.ts.map +1 -0
- package/dist/components/basic-row/BasicRow.d.ts +23 -0
- package/dist/components/basic-row/BasicRow.d.ts.map +1 -0
- package/dist/components/basic-row/context.d.ts +7 -0
- package/dist/components/basic-row/context.d.ts.map +1 -0
- package/dist/components/basic-row/index.d.ts +8 -0
- package/dist/components/basic-row/index.d.ts.map +1 -0
- package/dist/components/basic-row/interface.d.ts +30 -0
- package/dist/components/basic-row/interface.d.ts.map +1 -0
- package/dist/components/basic-scroll-text/BasicScrollText.vue.d.ts +15 -0
- package/dist/components/basic-scroll-text/BasicScrollText.vue.d.ts.map +1 -0
- package/dist/components/basic-scroll-text/context.d.ts +7 -0
- package/dist/components/basic-scroll-text/context.d.ts.map +1 -0
- package/dist/components/basic-scroll-text/index.d.ts +8 -0
- package/dist/components/basic-scroll-text/index.d.ts.map +1 -0
- package/dist/components/basic-scroll-text/interface.d.ts +17 -0
- package/dist/components/basic-scroll-text/interface.d.ts.map +1 -0
- package/dist/components/basic-select/BasicSelect.vue.d.ts +51 -0
- package/dist/components/basic-select/BasicSelect.vue.d.ts.map +1 -0
- package/dist/components/basic-select/context.d.ts +7 -0
- package/dist/components/basic-select/context.d.ts.map +1 -0
- package/dist/components/basic-select/index.d.ts +8 -0
- package/dist/components/basic-select/index.d.ts.map +1 -0
- package/dist/components/basic-select/interface.d.ts +32 -0
- package/dist/components/basic-select/interface.d.ts.map +1 -0
- package/dist/components/basic-sub-panel/BasicSubPanel.vue.d.ts +25 -0
- package/dist/components/basic-sub-panel/BasicSubPanel.vue.d.ts.map +1 -0
- package/dist/components/basic-sub-panel/context.d.ts +7 -0
- package/dist/components/basic-sub-panel/context.d.ts.map +1 -0
- package/dist/components/basic-sub-panel/index.d.ts +8 -0
- package/dist/components/basic-sub-panel/index.d.ts.map +1 -0
- package/dist/components/basic-sub-panel/interface.d.ts +8 -0
- package/dist/components/basic-sub-panel/interface.d.ts.map +1 -0
- package/dist/components/basic-svg-icon/BasicSvgIcon.vue.d.ts +14 -0
- package/dist/components/basic-svg-icon/BasicSvgIcon.vue.d.ts.map +1 -0
- package/dist/components/basic-svg-icon/context.d.ts +7 -0
- package/dist/components/basic-svg-icon/context.d.ts.map +1 -0
- package/dist/components/basic-svg-icon/index.d.ts +8 -0
- package/dist/components/basic-svg-icon/index.d.ts.map +1 -0
- package/dist/components/basic-svg-icon/interface.d.ts +8 -0
- package/dist/components/basic-svg-icon/interface.d.ts.map +1 -0
- package/dist/components/basic-table/BasicTable.vue.d.ts +322 -0
- package/dist/components/basic-table/BasicTable.vue.d.ts.map +1 -0
- package/dist/components/basic-table/constants.d.ts +14 -0
- package/dist/components/basic-table/constants.d.ts.map +1 -0
- package/dist/components/basic-table/context.d.ts +7 -0
- package/dist/components/basic-table/context.d.ts.map +1 -0
- package/dist/components/basic-table/format.d.ts +4 -0
- package/dist/components/basic-table/format.d.ts.map +1 -0
- package/dist/components/basic-table/helper.d.ts +9 -0
- package/dist/components/basic-table/helper.d.ts.map +1 -0
- package/dist/components/basic-table/hooks/index.d.ts +10 -0
- package/dist/components/basic-table/hooks/index.d.ts.map +1 -0
- package/dist/components/basic-table/hooks/use-columns.d.ts +13 -0
- package/dist/components/basic-table/hooks/use-columns.d.ts.map +1 -0
- package/dist/components/basic-table/hooks/use-data-source.d.ts +50 -0
- package/dist/components/basic-table/hooks/use-data-source.d.ts.map +1 -0
- package/dist/components/basic-table/hooks/use-loading.d.ts +8 -0
- package/dist/components/basic-table/hooks/use-loading.d.ts.map +1 -0
- package/dist/components/basic-table/hooks/use-pagination.d.ts +92 -0
- package/dist/components/basic-table/hooks/use-pagination.d.ts.map +1 -0
- package/dist/components/basic-table/hooks/use-row-selection.d.ts +20 -0
- package/dist/components/basic-table/hooks/use-row-selection.d.ts.map +1 -0
- package/dist/components/basic-table/hooks/use-table-config.d.ts +35 -0
- package/dist/components/basic-table/hooks/use-table-config.d.ts.map +1 -0
- package/dist/components/basic-table/hooks/use-table-context.d.ts +15 -0
- package/dist/components/basic-table/hooks/use-table-context.d.ts.map +1 -0
- package/dist/components/basic-table/hooks/use-table-footer.d.ts +9 -0
- package/dist/components/basic-table/hooks/use-table-footer.d.ts.map +1 -0
- package/dist/components/basic-table/hooks/use-table-form.d.ts +17 -0
- package/dist/components/basic-table/hooks/use-table-form.d.ts.map +1 -0
- package/dist/components/basic-table/index.d.ts +12 -0
- package/dist/components/basic-table/index.d.ts.map +1 -0
- package/dist/components/basic-table/interface.d.ts +155 -0
- package/dist/components/basic-table/interface.d.ts.map +1 -0
- package/dist/components/basic-table/setting.d.ts +6 -0
- package/dist/components/basic-table/setting.d.ts.map +1 -0
- package/dist/components/basic-table/style.d.ts +2 -0
- package/dist/components/basic-table/style.d.ts.map +1 -0
- package/dist/components/basic-table/vxe-table.d.ts +5 -0
- package/dist/components/basic-table/vxe-table.d.ts.map +1 -0
- package/dist/components/basic-tag/BasicTag.vue.d.ts +23 -0
- package/dist/components/basic-tag/BasicTag.vue.d.ts.map +1 -0
- package/dist/components/basic-tag/context.d.ts +7 -0
- package/dist/components/basic-tag/context.d.ts.map +1 -0
- package/dist/components/basic-tag/index.d.ts +8 -0
- package/dist/components/basic-tag/index.d.ts.map +1 -0
- package/dist/components/basic-tag/interface.d.ts +10 -0
- package/dist/components/basic-tag/interface.d.ts.map +1 -0
- package/dist/components/basic-text/BasicText.vue.d.ts +43 -0
- package/dist/components/basic-text/BasicText.vue.d.ts.map +1 -0
- package/dist/components/basic-text/context.d.ts +7 -0
- package/dist/components/basic-text/context.d.ts.map +1 -0
- package/dist/components/basic-text/index.d.ts +8 -0
- package/dist/components/basic-text/index.d.ts.map +1 -0
- package/dist/components/basic-text/interface.d.ts +17 -0
- package/dist/components/basic-text/interface.d.ts.map +1 -0
- package/dist/components/basic-title/BasicTitle.vue.d.ts +23 -0
- package/dist/components/basic-title/BasicTitle.vue.d.ts.map +1 -0
- package/dist/components/basic-title/context.d.ts +7 -0
- package/dist/components/basic-title/context.d.ts.map +1 -0
- package/dist/components/basic-title/index.d.ts +8 -0
- package/dist/components/basic-title/index.d.ts.map +1 -0
- package/dist/components/basic-title/interface.d.ts +15 -0
- package/dist/components/basic-title/interface.d.ts.map +1 -0
- package/dist/components/basic-upload/BasicUpload.d.ts +182 -0
- package/dist/components/basic-upload/BasicUpload.d.ts.map +1 -0
- package/dist/components/basic-upload/context.d.ts +7 -0
- package/dist/components/basic-upload/context.d.ts.map +1 -0
- package/dist/components/basic-upload/index.d.ts +9 -0
- package/dist/components/basic-upload/index.d.ts.map +1 -0
- package/dist/components/basic-upload/interface.d.ts +158 -0
- package/dist/components/basic-upload/interface.d.ts.map +1 -0
- package/dist/components/basic-upload/utils.d.ts +10 -0
- package/dist/components/basic-upload/utils.d.ts.map +1 -0
- package/dist/components/basic-upload-core/AjaxUploader.d.ts +223 -0
- package/dist/components/basic-upload-core/AjaxUploader.d.ts.map +1 -0
- package/dist/components/basic-upload-core/BasicUploadCore.d.ts +218 -0
- package/dist/components/basic-upload-core/BasicUploadCore.d.ts.map +1 -0
- package/dist/components/basic-upload-core/attr-accept.d.ts +5 -0
- package/dist/components/basic-upload-core/attr-accept.d.ts.map +1 -0
- package/dist/components/basic-upload-core/context.d.ts +7 -0
- package/dist/components/basic-upload-core/context.d.ts.map +1 -0
- package/dist/components/basic-upload-core/index.d.ts +8 -0
- package/dist/components/basic-upload-core/index.d.ts.map +1 -0
- package/dist/components/basic-upload-core/interface.d.ts +183 -0
- package/dist/components/basic-upload-core/interface.d.ts.map +1 -0
- package/dist/components/basic-upload-core/pickAttrs.d.ts +12 -0
- package/dist/components/basic-upload-core/pickAttrs.d.ts.map +1 -0
- package/dist/components/basic-upload-core/request.d.ts +6 -0
- package/dist/components/basic-upload-core/request.d.ts.map +1 -0
- package/dist/components/basic-upload-core/traverseFileTree.d.ts +16 -0
- package/dist/components/basic-upload-core/traverseFileTree.d.ts.map +1 -0
- package/dist/components/basic-upload-core/uid.d.ts +2 -0
- package/dist/components/basic-upload-core/uid.d.ts.map +1 -0
- package/dist/components/basic-upload-core/utils.d.ts +1 -0
- package/dist/components/basic-upload-core/utils.d.ts.map +1 -0
- package/dist/components/basic-upload-dragger/BasicUploadDragger.d.ts +118 -0
- package/dist/components/basic-upload-dragger/BasicUploadDragger.d.ts.map +1 -0
- package/dist/components/basic-upload-dragger/context.d.ts +7 -0
- package/dist/components/basic-upload-dragger/context.d.ts.map +1 -0
- package/dist/components/basic-upload-dragger/index.d.ts +8 -0
- package/dist/components/basic-upload-dragger/index.d.ts.map +1 -0
- package/dist/components/basic-upload-dragger/interface.d.ts +65 -0
- package/dist/components/basic-upload-dragger/interface.d.ts.map +1 -0
- package/dist/components/basic-upload-list/BasicUploadList.d.ts +131 -0
- package/dist/components/basic-upload-list/BasicUploadList.d.ts.map +1 -0
- package/dist/components/basic-upload-list/context.d.ts +7 -0
- package/dist/components/basic-upload-list/context.d.ts.map +1 -0
- package/dist/components/basic-upload-list/index.d.ts +8 -0
- package/dist/components/basic-upload-list/index.d.ts.map +1 -0
- package/dist/components/basic-upload-list/interface.d.ts +68 -0
- package/dist/components/basic-upload-list/interface.d.ts.map +1 -0
- package/dist/components/basic-upload-list-item/BasicUploadListItem.d.ts +71 -0
- package/dist/components/basic-upload-list-item/BasicUploadListItem.d.ts.map +1 -0
- package/dist/components/basic-upload-list-item/context.d.ts +7 -0
- package/dist/components/basic-upload-list-item/context.d.ts.map +1 -0
- package/dist/components/basic-upload-list-item/index.d.ts +8 -0
- package/dist/components/basic-upload-list-item/index.d.ts.map +1 -0
- package/dist/components/basic-upload-list-item/interface.d.ts +40 -0
- package/dist/components/basic-upload-list-item/interface.d.ts.map +1 -0
- package/dist/components/basic-view-bar/BasicViewBar.vue.d.ts +23 -0
- package/dist/components/basic-view-bar/BasicViewBar.vue.d.ts.map +1 -0
- package/dist/components/basic-view-bar/context.d.ts +7 -0
- package/dist/components/basic-view-bar/context.d.ts.map +1 -0
- package/dist/components/basic-view-bar/index.d.ts +8 -0
- package/dist/components/basic-view-bar/index.d.ts.map +1 -0
- package/dist/components/basic-view-bar/interface.d.ts +8 -0
- package/dist/components/basic-view-bar/interface.d.ts.map +1 -0
- package/dist/components/config-provider/ConfigProvider.d.ts +47 -0
- package/dist/components/config-provider/ConfigProvider.d.ts.map +1 -0
- package/dist/components/config-provider/context.d.ts +5 -0
- package/dist/components/config-provider/context.d.ts.map +1 -0
- package/dist/components/config-provider/hooks/use-global-config.d.ts +32 -0
- package/dist/components/config-provider/hooks/use-global-config.d.ts.map +1 -0
- package/dist/components/config-provider/index.d.ts +9 -0
- package/dist/components/config-provider/index.d.ts.map +1 -0
- package/dist/components/config-provider/interface.d.ts +34 -0
- package/dist/components/config-provider/interface.d.ts.map +1 -0
- package/dist/components/index.d.ts +47 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/naive-ui.d.ts +6 -0
- package/dist/components/naive-ui.d.ts.map +1 -0
- package/dist/components/tree/Tree.vue.d.ts +164 -0
- package/dist/components/tree/Tree.vue.d.ts.map +1 -0
- package/dist/components/tree/components/LoadingIcon.vue.d.ts +3 -0
- package/dist/components/tree/components/LoadingIcon.vue.d.ts.map +1 -0
- package/dist/components/tree/constants/events.d.ts +6 -0
- package/dist/components/tree/constants/events.d.ts.map +1 -0
- package/dist/components/tree/constants/index.d.ts +54 -0
- package/dist/components/tree/constants/index.d.ts.map +1 -0
- package/dist/components/tree/context.d.ts +7 -0
- package/dist/components/tree/context.d.ts.map +1 -0
- package/dist/components/tree/hooks/index.d.ts +6 -0
- package/dist/components/tree/hooks/index.d.ts.map +1 -0
- package/dist/components/tree/hooks/use-expand-animation.d.ts +123 -0
- package/dist/components/tree/hooks/use-expand-animation.d.ts.map +1 -0
- package/dist/components/tree/hooks/use-iframe-resize.d.ts +2 -0
- package/dist/components/tree/hooks/use-iframe-resize.d.ts.map +1 -0
- package/dist/components/tree/hooks/use-public-tree-api.d.ts +81 -0
- package/dist/components/tree/hooks/use-public-tree-api.d.ts.map +1 -0
- package/dist/components/tree/hooks/use-tree-cls.d.ts +14 -0
- package/dist/components/tree/hooks/use-tree-cls.d.ts.map +1 -0
- package/dist/components/tree/hooks/use-virtual-list.d.ts +63 -0
- package/dist/components/tree/hooks/use-virtual-list.d.ts.map +1 -0
- package/dist/components/tree/index.d.ts +9 -0
- package/dist/components/tree/index.d.ts.map +1 -0
- package/dist/components/tree/interface.d.ts +162 -0
- package/dist/components/tree/interface.d.ts.map +1 -0
- package/dist/components/tree/store/index.d.ts +6 -0
- package/dist/components/tree/store/index.d.ts.map +1 -0
- package/dist/components/tree/store/tree-event-target.d.ts +11 -0
- package/dist/components/tree/store/tree-event-target.d.ts.map +1 -0
- package/dist/components/tree/store/tree-node.d.ts +40 -0
- package/dist/components/tree/store/tree-node.d.ts.map +1 -0
- package/dist/components/tree/store/tree-store.d.ts +213 -0
- package/dist/components/tree/store/tree-store.d.ts.map +1 -0
- package/dist/components/tree/utils.d.ts +9 -0
- package/dist/components/tree/utils.d.ts.map +1 -0
- package/dist/components/tree-drop/TreeDrop.vue.d.ts +292 -0
- package/dist/components/tree-drop/TreeDrop.vue.d.ts.map +1 -0
- package/dist/components/tree-drop/composable/index.d.ts +2 -0
- package/dist/components/tree-drop/composable/index.d.ts.map +1 -0
- package/dist/components/tree-drop/composable/use-tree-drop-cls.d.ts +23 -0
- package/dist/components/tree-drop/composable/use-tree-drop-cls.d.ts.map +1 -0
- package/dist/components/tree-drop/constants.d.ts +58 -0
- package/dist/components/tree-drop/constants.d.ts.map +1 -0
- package/dist/components/tree-drop/index.d.ts +8 -0
- package/dist/components/tree-drop/index.d.ts.map +1 -0
- package/dist/components/tree-drop/interface.d.ts +25 -0
- package/dist/components/tree-drop/interface.d.ts.map +1 -0
- package/dist/components/tree-node/TreeNode.vue.d.ts +26 -0
- package/dist/components/tree-node/TreeNode.vue.d.ts.map +1 -0
- package/dist/components/tree-node/composable/index.d.ts +2 -0
- package/dist/components/tree-node/composable/index.d.ts.map +1 -0
- package/dist/components/tree-node/composable/use-tree-node-cls.d.ts +37 -0
- package/dist/components/tree-node/composable/use-tree-node-cls.d.ts.map +1 -0
- package/dist/components/tree-node/index.d.ts +8 -0
- package/dist/components/tree-node/index.d.ts.map +1 -0
- package/dist/components/tree-node/interface.d.ts +12 -0
- package/dist/components/tree-node/interface.d.ts.map +1 -0
- package/dist/components/tree-search/TreeSearch.vue.d.ts +196 -0
- package/dist/components/tree-search/TreeSearch.vue.d.ts.map +1 -0
- package/dist/components/tree-search/composable/index.d.ts +2 -0
- package/dist/components/tree-search/composable/index.d.ts.map +1 -0
- package/dist/components/tree-search/composable/use-tree-search-cls.d.ts +30 -0
- package/dist/components/tree-search/composable/use-tree-search-cls.d.ts.map +1 -0
- package/dist/components/tree-search/constants.d.ts +43 -0
- package/dist/components/tree-search/constants.d.ts.map +1 -0
- package/dist/components/tree-search/index.d.ts +8 -0
- package/dist/components/tree-search/index.d.ts.map +1 -0
- package/dist/components/tree-search/interface.d.ts +25 -0
- package/dist/components/tree-search/interface.d.ts.map +1 -0
- package/dist/composable/index.d.ts +12 -0
- package/dist/composable/index.d.ts.map +1 -0
- package/dist/composable/use-config.d.ts +1 -0
- package/dist/composable/use-config.d.ts.map +1 -0
- package/dist/composable/use-dragable.d.ts +6 -0
- package/dist/composable/use-dragable.d.ts.map +1 -0
- package/dist/composable/use-drawer.d.ts +14 -0
- package/dist/composable/use-drawer.d.ts.map +1 -0
- package/dist/composable/use-flex-gap-support.d.ts +3 -0
- package/dist/composable/use-flex-gap-support.d.ts.map +1 -0
- package/dist/composable/use-locale.d.ts +5 -0
- package/dist/composable/use-locale.d.ts.map +1 -0
- package/dist/composable/use-lockscreen.d.ts +8 -0
- package/dist/composable/use-lockscreen.d.ts.map +1 -0
- package/dist/composable/use-merged-state.d.ts +9 -0
- package/dist/composable/use-merged-state.d.ts.map +1 -0
- package/dist/composable/use-namespace.d.ts +21 -0
- package/dist/composable/use-namespace.d.ts.map +1 -0
- package/dist/composable/use-responsive-observe.d.ts +18 -0
- package/dist/composable/use-responsive-observe.d.ts.map +1 -0
- package/dist/composable/use-same-target.d.ts +6 -0
- package/dist/composable/use-same-target.d.ts.map +1 -0
- package/dist/composable/use-table-config.d.ts +5 -0
- package/dist/composable/use-table-config.d.ts.map +1 -0
- package/dist/composable/use-z-index.d.ts +12 -0
- package/dist/composable/use-z-index.d.ts.map +1 -0
- package/dist/constants/alias.d.ts +40 -0
- package/dist/constants/alias.d.ts.map +1 -0
- package/dist/constants/app.d.ts +11 -0
- package/dist/constants/app.d.ts.map +1 -0
- package/dist/constants/context.d.ts +13 -0
- package/dist/constants/context.d.ts.map +1 -0
- package/dist/constants/index.d.ts +4 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/defaults.d.ts +6 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/index.cjs +21071 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +21055 -0
- package/dist/index.mjs.map +1 -0
- package/dist/locale/index.d.ts +11 -0
- package/dist/locale/index.d.ts.map +1 -0
- package/dist/locale/lang/en.d.ts +5 -0
- package/dist/locale/lang/en.d.ts.map +1 -0
- package/dist/locale/lang/zh-cn.d.ts +5 -0
- package/dist/locale/lang/zh-cn.d.ts.map +1 -0
- package/dist/locale/types.d.ts +18 -0
- package/dist/locale/types.d.ts.map +1 -0
- package/dist/locale/utils.d.ts +24 -0
- package/dist/locale/utils.d.ts.map +1 -0
- package/dist/locales.cjs +2944 -0
- package/dist/locales.cjs.map +1 -0
- package/dist/locales.d.ts +2 -0
- package/dist/locales.d.ts.map +1 -0
- package/dist/locales.mjs +2948 -0
- package/dist/locales.mjs.map +1 -0
- package/dist/make-installer.d.ts +11 -0
- package/dist/make-installer.d.ts.map +1 -0
- package/dist/types/basic.d.ts +16 -0
- package/dist/types/basic.d.ts.map +1 -0
- package/dist/types/grid.d.ts +6 -0
- package/dist/types/grid.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/basic.d.ts +7 -0
- package/dist/utils/basic.d.ts.map +1 -0
- package/dist/utils/collapse-motion.d.ts +10 -0
- package/dist/utils/collapse-motion.d.ts.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/props.d.ts +8 -0
- package/dist/utils/props.d.ts.map +1 -0
- package/dist/utils-CCNONbDL.js +99 -0
- package/dist/utils-CCNONbDL.js.map +1 -0
- package/dist/utils-pcMeUjXb.cjs +98 -0
- package/dist/utils-pcMeUjXb.cjs.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/utils/basic.ts","../src/utils/collapse-motion.ts","../src/utils/props.ts","../src/composable/use-dragable.ts","../src/constants/alias.ts","../src/constants/app.ts","../src/constants/context.ts","../src/composable/use-locale.ts","../src/composable/use-drawer.ts","../src/composable/use-flex-gap-support.ts","../src/composable/use-namespace.ts","../src/composable/use-lockscreen.ts","../src/composable/use-merged-state.ts","../src/composable/use-responsive-observe.ts","../src/composable/use-same-target.ts","../src/components/basic-table/constants.ts","../src/components/basic-table/setting.ts","../src/composable/use-table-config.ts","../src/composable/use-z-index.ts","../../../node_modules/.pnpm/@iconify+vue@5.0.0_vue@3.5.24_typescript@5.9.3_/node_modules/@iconify/vue/dist/iconify.mjs","../src/components/basic-svg-icon/BasicSvgIcon.vue","../src/components/basic-svg-icon/index.ts","../src/components/basic-arrow/BasicArrow.vue","../src/components/basic-arrow/index.ts","../src/components/basic-button/BasicButton.vue","../src/components/basic-button/index.ts","../../../node_modules/.pnpm/@vue+shared@3.5.24/node_modules/@vue/shared/dist/shared.esm-bundler.js","../src/components/basic-overlay/interface.ts","../src/components/basic-overlay/BasicOverlay.tsx","../src/components/basic-overlay/index.ts","../src/components/config-provider/context.ts","../src/components/config-provider/hooks/use-global-config.ts","../src/components/config-provider/interface.ts","../src/components/config-provider/ConfigProvider.tsx","../src/components/config-provider/index.ts","../src/components/basic-message-box/interface.ts","../src/components/basic-message-box/BasicMessageBox.vue","../src/components/basic-message-box/messageBox.ts","../src/components/basic-message-box/index.ts","../src/components/basic-button-group/components/ButtonGroupItem.vue","../src/components/basic-button-group/context.ts","../src/components/basic-button-group/hooks/use-button-group-class.ts","../src/components/basic-button-group/hooks/use-button-group-events.ts","../src/components/basic-button-group/hooks/use-button-group-schema.ts","../src/components/basic-button-group/BasicButtonGroup.vue","../src/components/basic-button-group/index.ts","../src/components/basic-text/BasicText.vue","../src/components/basic-text/index.ts","../src/components/basic-card/BasicCard.vue","../src/components/basic-card/index.ts","../src/components/basic-cascader/BasicCascader.vue","../src/components/basic-cascader/interface.ts","../src/components/basic-cascader/index.ts","../src/components/basic-checkbox-group/context.ts","../src/components/basic-checkbox/icon-check.tsx","../src/components/basic-checkbox/icon-hover.vue","../src/components/basic-checkbox/interface.ts","../src/components/basic-checkbox/BasicCheckbox.tsx","../src/components/basic-checkbox/index.ts","../src/components/basic-checkbox-group/interface.ts","../src/components/basic-checkbox-group/BasicCheckboxGroup.tsx","../src/components/basic-checkbox-group/index.ts","../src/components/basic-row/context.ts","../src/components/basic-col/interface.ts","../src/components/basic-col/BasicCol.tsx","../src/components/basic-col/index.ts","../../../node_modules/.pnpm/@vueuse+shared@14.0.0_vue@3.5.24_typescript@5.9.3_/node_modules/@vueuse/shared/dist/index.js","../../../node_modules/.pnpm/@vueuse+core@14.0.0_vue@3.5.24_typescript@5.9.3_/node_modules/@vueuse/core/dist/index.js","../src/components/basic-count-to/BasicCountTo.vue","../src/components/basic-count-to/index.ts","../src/components/basic-date-picker/BasicDatePicker.vue","../src/components/basic-date-picker/index.ts","../src/components/basic-drag-verify/interface.ts","../src/components/basic-drag-verify/BasicDragVerify.vue","../src/components/basic-drag-verify/index.ts","../src/components/basic-help/interface.ts","../src/components/basic-help/BasicHelp.vue","../src/components/basic-help/index.ts","../src/components/basic-title/BasicTitle.vue","../src/components/basic-title/index.ts","../src/components/basic-drawer/BasicDrawer.vue","../src/components/basic-drawer/index.ts","../src/components/basic-edit-batch/context.ts","../src/components/basic-edit-batch/components/EditBatchAction.vue","../src/components/basic-hidden/BasicHidden.vue","../src/components/basic-hidden/index.ts","../src/components/basic-radio-group/context.ts","../src/components/basic-radio/interface.ts","../src/components/basic-radio/BasicRadio.tsx","../src/components/basic-radio/index.ts","../src/components/basic-radio-group/interface.ts","../src/components/basic-radio-group/BasicRadioGroup.tsx","../src/components/basic-radio-group/index.ts","../src/components/basic-select/BasicSelect.vue","../src/components/basic-select/interface.ts","../src/components/basic-select/index.ts","../src/components/basic-edit-batch/componentMap.ts","../src/components/basic-edit-batch/helper.ts","../src/components/basic-edit-batch/components/EditBatchItem.vue","../src/components/basic-edit-batch/hooks/use-edit-batch-class.ts","../src/components/basic-edit-batch/hooks/use-edit-batch-events.ts","../src/components/basic-edit-batch/hooks/use-edit-batch-schema.ts","../src/components/basic-edit-batch/hooks/use-edit-batch-values.ts","../src/components/basic-edit-batch/BasicEditBatch.vue","../src/components/basic-edit-batch/index.ts","../src/components/basic-font-icon/interface.ts","../src/components/basic-font-icon/BasicFontIcon.tsx","../src/components/basic-font-icon/index.ts","../src/components/basic-form/context.ts","../src/components/basic-form/components/FormAction.vue","../src/components/basic-scroll-text/interface.ts","../src/components/basic-scroll-text/BasicScrollText.vue","../src/components/basic-scroll-text/index.ts","../src/components/basic-form/componentMap.ts","../src/components/basic-form/helper.ts","../src/components/basic-form/components/FormItem.vue","../src/components/basic-form/constants.ts","../src/components/basic-form/hooks/use-advanced.ts","../src/components/basic-form/hooks/use-auto-focus.ts","../src/components/basic-form/hooks/use-component-register.ts","../src/components/basic-form/hooks/use-form-class.ts","../src/components/basic-form/hooks/use-form-events.ts","../src/components/basic-form/hooks/use-form-grid.ts","../src/components/basic-form/hooks/use-form-schema.ts","../src/components/basic-form/hooks/use-form-values.ts","../src/components/basic-form/BasicForm.vue","../src/components/basic-form/index.ts","../src/components/basic-gradient-title/BasicGradientTitle.vue","../src/components/basic-gradient-title/interface.ts","../src/components/basic-gradient-title/index.ts","../src/components/basic-icon-online/interface.ts","../src/components/basic-icon-online/BasicIconOnline.tsx","../src/components/basic-icon-online/index.ts","../src/components/basic-icon-picker/data.ts","../src/components/basic-icon-picker/BasicIconPicker.vue","../src/components/basic-icon-picker/index.ts","../src/components/basic-list-page/constants.ts","../src/components/basic-list-page/hooks/use-data-source.ts","../src/components/basic-list-page/hooks/use-list-form.ts","../src/components/basic-list-page/hooks/use-loading.ts","../src/components/basic-list-page/hooks/use-pagination.ts","../src/components/basic-list-page/BasicListPage.vue","../src/components/basic-list-page/index.ts","../src/components/basic-loading/loading.ts","../src/components/basic-loading/service.ts","../src/components/basic-loading/directive.ts","../src/components/basic-loading/index.ts","../src/components/basic-modal/BasicModal.vue","../src/components/basic-modal/interface.ts","../src/components/basic-modal/index.ts","../src/components/basic-notification/BasicNotification.vue","../src/components/basic-notification/interface.ts","../src/components/basic-notification/notify.ts","../src/components/basic-notification/index.ts","../src/components/basic-page/BasicPage.vue","../src/components/basic-page/index.ts","../src/components/basic-panel/BasicPanel.vue","../src/components/basic-panel/index.ts","../src/components/basic-row/interface.ts","../src/components/basic-row/BasicRow.tsx","../src/components/basic-row/index.ts","../src/components/basic-sub-panel/BasicSubPanel.vue","../src/components/basic-sub-panel/interface.ts","../src/components/basic-sub-panel/index.ts","../src/components/basic-table/helper.ts","../src/components/basic-table/hooks/use-columns.tsx","../src/components/basic-table/hooks/use-data-source.ts","../src/components/basic-table/hooks/use-loading.ts","../src/components/basic-table/hooks/use-pagination.ts","../src/components/basic-table/hooks/use-row-selection.ts","../src/components/basic-table/hooks/use-table-context.ts","../src/components/basic-table/hooks/use-table-footer.ts","../src/components/basic-table/hooks/use-table-form.ts","../src/components/basic-table/BasicTable.vue","../src/components/basic-table/format.ts","../src/components/basic-table/index.ts","../src/components/basic-tag/BasicTag.vue","../src/components/basic-tag/index.ts","../src/components/basic-upload-core/attr-accept.ts","../src/components/basic-upload-core/interface.ts","../src/components/basic-upload-core/pickAttrs.ts","../src/components/basic-upload-core/request.ts","../src/components/basic-upload-core/traverseFileTree.ts","../src/components/basic-upload-core/uid.ts","../src/components/basic-upload-core/AjaxUploader.tsx","../src/components/basic-upload-core/BasicUploadCore.tsx","../src/components/basic-upload-core/index.ts","../src/components/basic-upload-list-item/interface.ts","../src/components/basic-upload-list-item/BasicUploadListItem.tsx","../src/components/basic-upload-list-item/index.ts","../src/components/basic-upload/utils.ts","../src/components/basic-upload-list/interface.ts","../src/components/basic-upload-list/BasicUploadList.tsx","../src/components/basic-upload-list/index.ts","../src/components/basic-upload/interface.ts","../src/components/basic-upload/BasicUpload.tsx","../src/components/basic-upload/index.ts","../src/components/basic-upload-dragger/interface.ts","../src/components/basic-upload-dragger/BasicUploadDragger.tsx","../src/components/basic-upload-dragger/index.ts","../src/components/basic-view-bar/BasicViewBar.vue","../src/components/basic-view-bar/index.ts","../src/components/tree/components/LoadingIcon.vue","../src/components/tree/constants/index.ts","../src/components/tree/constants/events.ts","../src/components/tree-node/composable/use-tree-node-cls.ts","../src/components/tree-node/TreeNode.vue","../src/components/tree-node/index.ts","../src/components/tree/hooks/use-expand-animation.ts","../src/components/tree/hooks/use-iframe-resize.ts","../src/components/tree/store/tree-node.ts","../src/components/tree/store/tree-event-target.ts","../src/components/tree/store/tree-store.ts","../src/components/tree/hooks/use-public-tree-api.ts","../src/components/tree/hooks/use-tree-cls.ts","../src/components/tree/hooks/use-virtual-list.ts","../src/components/tree/utils.ts","../src/components/tree/Tree.vue","../src/components/tree/index.ts","../src/components/tree-search/composable/use-tree-search-cls.ts","../src/components/tree-search/constants.ts","../src/components/tree-search/TreeSearch.vue","../src/components/tree-search/index.ts","../src/components/tree-drop/composable/use-tree-drop-cls.ts","../src/components/tree-drop/constants.ts","../src/components/tree-drop/TreeDrop.vue","../src/components/tree-drop/index.ts","../src/component.ts","../src/make-installer.ts","../src/defaults.ts","../src/index.ts"],"sourcesContent":["import type { CSSProperties } from 'vue'\nimport { camelize, isNumber, isString } from '@maxax/utils'\n\nexport const isStringNumber = (val: string): boolean => {\n if (!isString(val)) {\n return false\n }\n return !Number.isNaN(Number(val))\n}\n\nlet scrollBarWidth: number\n\nexport const getScrollBarWidth = (namespace: string): number => {\n if (scrollBarWidth !== undefined) return scrollBarWidth\n\n const outer = document.createElement('div')\n outer.className = `${namespace}-scrollbar__wrap`\n outer.style.visibility = 'hidden'\n outer.style.width = '100px'\n outer.style.position = 'absolute'\n outer.style.top = '-9999px'\n document.body.appendChild(outer)\n\n const widthNoScroll = outer.offsetWidth\n outer.style.overflow = 'scroll'\n\n const inner = document.createElement('div')\n inner.style.width = '100%'\n outer.appendChild(inner)\n\n const widthWithScroll = inner.offsetWidth\n outer.parentNode?.removeChild(outer)\n scrollBarWidth = widthNoScroll - widthWithScroll\n\n return scrollBarWidth\n}\n\nexport const getStyle = (element: HTMLElement, styleName: keyof CSSProperties): string => {\n if (!element || !styleName) return ''\n\n let key = camelize(styleName)\n if (key === 'float') key = 'cssFloat'\n try {\n const style = (element.style as any)[key]\n if (style) return style\n const computed: any = document.defaultView?.getComputedStyle(element, '')\n return computed ? computed[key] : ''\n } catch {\n return (element.style as any)[key]\n }\n}\n\nexport function addUnit(value?: string | number, defaultUnit = 'px') {\n if (!value) return ''\n if (isNumber(value) || isStringNumber(value)) {\n return `${value}${defaultUnit}`\n } else if (isString(value)) {\n return value\n }\n throw new Error('binding value must be a string or number')\n}\n","import type { BaseTransitionProps, TransitionGroupProps, TransitionProps } from 'vue'\nimport { nextTick } from 'vue'\nimport { addClass, removeClass } from '@maxax/utils'\n\nexport interface CSSMotionProps extends Partial<BaseTransitionProps<Element>> {\n name?: string\n css?: boolean\n}\n\nexport const getTransitionProps = (transitionName: string, opt: TransitionProps = {}) => {\n const transitionConfig = {\n name: transitionName,\n appear: true,\n // type: 'animation',\n // appearFromClass: `${transitionName}-appear ${transitionName}-appear-prepare`,\n // appearActiveClass: `antdv-base-transtion`,\n // appearToClass: `${transitionName}-appear ${transitionName}-appear-active`,\n enterFromClass: `${transitionName}-enter ${transitionName}-enter-prepare ${transitionName}-enter-start`,\n enterActiveClass: `${transitionName}-enter ${transitionName}-enter-prepare`,\n enterToClass: `${transitionName}-enter ${transitionName}-enter-active`,\n leaveFromClass: ` ${transitionName}-leave`,\n leaveActiveClass: `${transitionName}-leave ${transitionName}-leave-active`,\n leaveToClass: `${transitionName}-leave ${transitionName}-leave-active`,\n ...opt\n }\n const transitionProps: TransitionProps = transitionName ? transitionConfig : { css: false, ...opt }\n return transitionProps\n}\n\nexport const getTransitionGroupProps = (transitionName: string, opt: TransitionProps = {}) => {\n const transitionConfig = {\n name: transitionName,\n appear: true,\n // appearFromClass: `${transitionName}-appear ${transitionName}-appear-prepare`,\n appearActiveClass: `${transitionName}`,\n appearToClass: `${transitionName}-appear ${transitionName}-appear-active`,\n enterFromClass: `${transitionName}-appear ${transitionName}-enter ${transitionName}-appear-prepare ${transitionName}-enter-prepare`,\n enterActiveClass: `${transitionName}`,\n enterToClass: `${transitionName}-enter ${transitionName}-appear ${transitionName}-appear-active ${transitionName}-enter-active`,\n leaveActiveClass: `${transitionName} ${transitionName}-leave`,\n leaveToClass: `${transitionName}-leave-active`,\n ...opt\n }\n const transitionProps: TransitionGroupProps = transitionName ? transitionConfig : { css: false, ...opt }\n return transitionProps\n}\n\nexport const collapseMotion = (name = 'ant-motion-collapse', appear = true): CSSMotionProps => {\n return {\n name,\n appear,\n css: true,\n onBeforeEnter: (el: Element) => {\n const node = el as HTMLElement\n node.style.height = '0px'\n node.style.opacity = '0'\n addClass(node, name)\n },\n onEnter: (el: Element) => {\n const node = el as HTMLElement\n nextTick(() => {\n node.style.height = `${node.scrollHeight}px`\n node.style.opacity = '1'\n })\n },\n onAfterEnter: (el: Element) => {\n const node = el as HTMLElement\n if (node) {\n removeClass(node, name)\n node.style.height = null as any\n node.style.opacity = null as any\n }\n },\n onBeforeLeave: (el: Element) => {\n const node = el as HTMLElement\n addClass(node, name)\n node.style.height = `${node.offsetHeight}px`\n node.style.opacity = null as any\n },\n onLeave: (el: Element) => {\n const node = el as HTMLElement\n setTimeout(() => {\n node.style.height = '0px'\n node.style.opacity = '0'\n })\n },\n onAfterLeave: (el: Element) => {\n const node = el as HTMLElement\n if (node) {\n removeClass(node, name)\n if (node.style) {\n node.style.height = null as any\n node.style.opacity = null as any\n }\n }\n }\n }\n}\n","import { Comment, Fragment, isVNode, Text } from 'vue'\n\nexport function isEmptyElement(c: any) {\n return c && (c.type === Comment || (c.type === Fragment && c.children.length === 0) || (c.type === Text && c.children.trim() === ''))\n}\n\nexport function isStringElement(c: any) {\n return c && c.type === Text\n}\n\nexport function filterEmpty(children: any[] = []) {\n const res: any[] = []\n children.forEach(child => {\n if (Array.isArray(child)) {\n res.push(...child)\n } else if (child?.type === Fragment) {\n res.push(...filterEmpty(child.children))\n } else {\n res.push(child)\n }\n })\n return res.filter(c => !isEmptyElement(c))\n}\n\nexport function isValidElement(element: any) {\n if (Array.isArray(element) && element.length === 1) {\n element = element[0]\n }\n return element && element.__v_isVNode && typeof element.type !== 'symbol' // remove text node\n}\n\nconst isValid = (value: any): boolean => {\n return value !== undefined && value !== null && value !== ''\n}\n\nexport const skipFlattenKey = Symbol('skipFlatten')\nconst flattenChildren = (children: any[] = [], fe = true) => {\n const temp: any[] = Array.isArray(children) ? children : [children]\n const res: any[] = []\n temp.forEach(child => {\n if (Array.isArray(child)) {\n res.push(...flattenChildren(child, fe))\n } else if (child && child.type === Fragment) {\n if (child.key === skipFlattenKey) {\n res.push(child)\n } else {\n res.push(...flattenChildren(child.children, fe))\n }\n } else if (child && isVNode(child)) {\n if (fe && !isEmptyElement(child)) {\n res.push(child)\n } else if (!fe) {\n res.push(child)\n }\n } else if (isValid(child)) {\n res.push(child)\n }\n })\n return res\n}\n\nexport { flattenChildren }\n","import type { ComputedRef, Ref } from 'vue'\nimport { onBeforeUnmount, onMounted, watchEffect } from 'vue'\nimport { addUnit } from '../utils'\n\nexport const useDraggable = (targetRef: Ref<HTMLElement | undefined>, dragRef: Ref<HTMLElement | undefined>, draggable: ComputedRef<boolean>, overflow?: ComputedRef<boolean>) => {\n let transform = {\n offsetX: 0,\n offsetY: 0\n }\n\n const onMousedown = (e: MouseEvent) => {\n const downX = e.clientX\n const downY = e.clientY\n const { offsetX, offsetY } = transform\n\n const targetRect = targetRef.value!.getBoundingClientRect()\n const targetLeft = targetRect.left\n const targetTop = targetRect.top\n const targetWidth = targetRect.width\n const targetHeight = targetRect.height\n\n const clientWidth = document.documentElement.clientWidth\n const clientHeight = document.documentElement.clientHeight\n\n const minLeft = -targetLeft + offsetX\n const minTop = -targetTop + offsetY\n const maxLeft = clientWidth - targetLeft - targetWidth + offsetX\n const maxTop = clientHeight - targetTop - targetHeight + offsetY\n\n const onMousemove = (event: MouseEvent) => {\n let moveX = offsetX + event.clientX - downX\n let moveY = offsetY + event.clientY - downY\n\n if (!overflow?.value) {\n moveX = Math.min(Math.max(moveX, minLeft), maxLeft)\n moveY = Math.min(Math.max(moveY, minTop), maxTop)\n }\n\n transform = {\n offsetX: moveX,\n offsetY: moveY\n }\n\n if (targetRef.value) {\n targetRef.value.style.transform = `translate(${addUnit(moveX)}, ${addUnit(moveY)})`\n }\n }\n\n const onMouseup = () => {\n document.removeEventListener('mousemove', onMousemove)\n document.removeEventListener('mouseup', onMouseup)\n }\n\n document.addEventListener('mousemove', onMousemove)\n document.addEventListener('mouseup', onMouseup)\n }\n\n const onDraggable = () => {\n if (dragRef.value && targetRef.value) {\n dragRef.value.addEventListener('mousedown', onMousedown)\n }\n }\n\n const offDraggable = () => {\n if (dragRef.value && targetRef.value) {\n dragRef.value.removeEventListener('mousedown', onMousedown)\n }\n }\n\n const resetPosition = () => {\n transform = {\n offsetX: 0,\n offsetY: 0\n }\n if (targetRef.value) {\n targetRef.value.style.transform = 'none'\n }\n }\n\n onMounted(() => {\n watchEffect(() => {\n if (draggable.value) {\n onDraggable()\n } else {\n offDraggable()\n }\n })\n })\n\n onBeforeUnmount(() => {\n offDraggable()\n })\n\n return {\n resetPosition\n }\n}\n","const screenXS = 480\nconst screenSM = 576\nconst screenMD = 768\nconst screenLG = 992\nconst screenXL = 1200\nconst screenXXL = 1600\nconst screenXXXL = 2000\n\nexport const tokens = {\n screenXS,\n screenXSMin: screenXS,\n screenXSMax: screenSM - 1,\n screenSM,\n screenSMMin: screenSM,\n screenSMMax: screenMD - 1,\n screenMD,\n screenMDMin: screenMD,\n screenMDMax: screenLG - 1,\n screenLG,\n screenLGMin: screenLG,\n screenLGMax: screenXL - 1,\n screenXL,\n screenXLMin: screenXL,\n screenXLMax: screenXXL - 1,\n screenXXL,\n screenXXLMin: screenXXL,\n screenXXLMax: screenXXXL - 1,\n screenXXXL,\n screenXXXLMin: screenXXXL\n}\n\nexport const EVENT_CODE = {\n tab: 'Tab',\n enter: 'Enter',\n space: 'Space',\n left: 'ArrowLeft', // 37\n up: 'ArrowUp', // 38\n right: 'ArrowRight', // 39\n down: 'ArrowDown', // 40\n esc: 'Escape',\n delete: 'Delete',\n backspace: 'Backspace',\n numpadEnter: 'NumpadEnter',\n pageUp: 'PageUp',\n pageDown: 'PageDown',\n home: 'Home',\n end: 'End'\n}\n","/** 默认图标前缀 */\nexport const DEFAULT_ICON_PREFIX_CLS = 'max'\n/** 默认命名空间 */\nexport const DEFAULT_NAMESPACE = 'max'\n/** 默认图标本地前缀 */\nexport const DEFAULT_ICON_LOCAL_PREFIX = 'icon-local'\n/** 默认初始 z-index */\nexport const DEFAULT_INITIAL_Z_INDEX = 2000\n/** 安装标记 */\nexport const INSTALLED_KEY = Symbol('INSTALLED_KEY')\n","import type { InjectionKey, Ref } from 'vue'\nimport type { VxeGlobalConfig } from 'vxe-pc-ui'\nimport type { Locale } from '../locale'\n\n/** 命名空间上下文 */\nexport const namespaceContextKey: InjectionKey<Ref<string | undefined>> = Symbol('namespaceContextKey')\n/** 语言上下文 */\nexport const localeContextKey: InjectionKey<Ref<Locale | undefined>> = Symbol('localeContextKey')\n/** z-index 上下文 */\nexport const zIndexContextKey: InjectionKey<Ref<number | undefined>> = Symbol('zIndexContextKey')\n/** 表格上下文 */\nexport const tableContextKey: InjectionKey<Ref<VxeGlobalConfig | undefined>> = Symbol('tableContextKey')\n","import type { Ref } from 'vue'\nimport { computed, inject, ref } from 'vue'\nimport { localeContextKey } from '../constants'\nimport type { Locale, LocaleContext } from '../locale'\nimport { buildLocaleContext, zhCN } from '../locale'\n\nexport function useLocale(localeOverrides?: Ref<Locale | undefined>): LocaleContext {\n const locale = localeOverrides || inject(localeContextKey, ref())!\n return buildLocaleContext(computed(() => locale.value || (zhCN as Locale)))\n}\n","import { computed, ref } from 'vue'\nimport { useBoolean } from '@maxax/hooks'\nimport type { BasicDrawerModalContext, BasicDrawerModalHooks, BasicDrawerModalType } from '../types/basic'\nimport { useLocale } from './use-locale'\n\nexport function useBasicDrawerModal(params: BasicDrawerModalHooks = {}) {\n const { t } = useLocale()\n\n const visibleRef = ref(false)\n\n const { bool: loadingRef, setTrue: showLoading, setFalse: hideLoading } = useBoolean()\n\n const typeRef = ref<BasicDrawerModalType>('add')\n\n const dataRef = ref<Record<string, any>>({})\n\n const titleRef = computed(() => {\n return t(`max.basic.${typeRef.value}`) || ''\n })\n\n function show(context: BasicDrawerModalContext) {\n visibleRef.value = true\n typeRef.value = context.type\n dataRef.value = context.data || {}\n params.onShow?.(context)\n }\n\n function hide() {\n visibleRef.value = false\n typeRef.value = 'add'\n dataRef.value = {}\n params.onHide?.()\n }\n\n return {\n show,\n hide,\n showLoading,\n hideLoading,\n visible: visibleRef,\n type: typeRef,\n data: dataRef,\n title: titleRef,\n loading: loadingRef\n }\n}\n","import { onMounted, shallowRef } from 'vue'\n\nlet flexGapSupported: boolean | undefined\nexport const detectFlexGapSupported = () => {\n if (flexGapSupported !== undefined) {\n return flexGapSupported\n }\n\n // Create flex container with row-gap set\n const flex = document.createElement('div')\n flex.style.display = 'flex'\n flex.style.flexDirection = 'column'\n flex.style.rowGap = '1px'\n\n // Create two, elements inside it\n flex.appendChild(document.createElement('div'))\n flex.appendChild(document.createElement('div'))\n\n // Append to the DOM (needed to obtain scrollHeight)\n document.body.appendChild(flex)\n flexGapSupported = flex.scrollHeight === 1 // Flex container should be 1px high from the row-gap\n document.body.removeChild(flex)\n\n return flexGapSupported\n}\n\nexport function useFlexGapSupport() {\n const flexible = shallowRef(false)\n onMounted(() => {\n flexible.value = detectFlexGapSupported()\n })\n\n return flexible\n}\n","import type { Ref } from 'vue'\nimport { computed, getCurrentInstance, inject, ref, unref } from 'vue'\nimport { pascalCase } from '@maxax/utils'\nimport { DEFAULT_NAMESPACE, namespaceContextKey } from '../constants'\n\nconst statePrefix = 'is-'\n\nexport const useGetDerivedNamespace = (namespaceOverrides?: Ref<string | undefined>) => {\n const derivedNamespace = namespaceOverrides || (getCurrentInstance() ? inject(namespaceContextKey, ref(DEFAULT_NAMESPACE)) : ref(DEFAULT_NAMESPACE))\n const namespace = computed(() => {\n return unref(derivedNamespace) || DEFAULT_NAMESPACE\n })\n return namespace\n}\n\nconst iBem = (namespace: string, block: string, blockSuffix: string, element: string, modifier: string) => {\n let cls = `${namespace}-${block}`\n if (blockSuffix) {\n cls += `-${blockSuffix}`\n }\n if (element) {\n cls += `__${element}`\n }\n if (modifier) {\n cls += `--${modifier}`\n }\n return cls\n}\n\nexport function useNamespace(block: string, namespaceOverrides?: Ref<string | undefined>) {\n const namespace = useGetDerivedNamespace(namespaceOverrides)\n\n const componentName = pascalCase(`${namespace.value}-${block}`)\n\n const b = (blockSuffix = '') => iBem(namespace.value, block, blockSuffix, '', '')\n const e = (element?: string) => (element ? iBem(namespace.value, block, '', element, '') : '')\n const m = (modifier?: string) => (modifier ? iBem(namespace.value, block, '', '', modifier) : '')\n const be = (blockSuffix?: string, element?: string) => (blockSuffix && element ? iBem(namespace.value, block, blockSuffix, element, '') : '')\n const em = (element?: string, modifier?: string) => (element && modifier ? iBem(namespace.value, block, '', element, modifier) : '')\n const bm = (blockSuffix?: string, modifier?: string) => (blockSuffix && modifier ? iBem(namespace.value, block, blockSuffix, '', modifier) : '')\n const bem = (blockSuffix?: string, element?: string, modifier?: string) => (blockSuffix && element && modifier ? iBem(namespace.value, block, blockSuffix, element, modifier) : '')\n\n const is = (name: string, ...args: [boolean | undefined] | []) => {\n const state = args.length >= 1 ? args[0]! : true\n return name && state ? `${statePrefix}${name}` : ''\n }\n\n const cssVar = (object: Record<string, string>) => {\n const styles: Record<string, string> = {}\n for (const key in object) {\n if (object[key]) {\n styles[`--${namespace.value}-${key}`] = object[key]\n }\n }\n return styles\n }\n\n const cssVarBlock = (object: Record<string, string>) => {\n const styles: Record<string, string> = {}\n for (const key in object) {\n if (object[key]) {\n styles[`--${namespace.value}-${block}-${key}`] = object[key]\n }\n }\n return styles\n }\n\n const cssVarName = (name: string) => `--${namespace.value}-${name}`\n const cssVarBlockName = (name: string) => `--${namespace.value}-${block}-${name}`\n\n return {\n name: componentName,\n namespace,\n b,\n e,\n m,\n be,\n em,\n bm,\n bem,\n is,\n cssVar,\n cssVarBlock,\n cssVarName,\n cssVarBlockName\n }\n}\n\nexport type UseNamespaceReturn = ReturnType<typeof useNamespace>\n","import type { Ref } from 'vue'\nimport { computed, isRef, onScopeDispose, watch } from 'vue'\nimport { addClass, hasClass, isClient, removeClass } from '@maxax/utils'\nimport { getScrollBarWidth, getStyle } from '../utils'\nimport type { UseNamespaceReturn } from './use-namespace'\nimport { useNamespace } from './use-namespace'\n\nexport interface UseLockScreenOptions {\n ns?: UseNamespaceReturn\n // shouldLock?: MaybeRef<boolean>\n}\n\nexport const useLockscreen = (trigger: Ref<boolean>, options: UseLockScreenOptions = {}) => {\n if (!isRef(trigger)) {\n throw new Error('[useLockscreen] You need to pass a ref param to this function')\n }\n\n const ns = options.ns || useNamespace('popup')\n\n const hiddenCls = computed(() => ns.bm('parent', 'hidden'))\n\n if (!isClient || hasClass(document.body, hiddenCls.value)) {\n return\n }\n\n let scrollBarWidth = 0\n let withoutHiddenClass = false\n let bodyWidth = '0'\n\n const cleanup = () => {\n setTimeout(() => {\n // When the test case is running, the context environment simulated by jsdom may have been destroyed,\n // and the document does not exist at this time.\n if (typeof document === 'undefined') return\n if (withoutHiddenClass && document) {\n document.body.style.width = bodyWidth\n removeClass(document.body, hiddenCls.value)\n }\n }, 200)\n }\n watch(trigger, val => {\n if (!val) {\n cleanup()\n return\n }\n\n withoutHiddenClass = !hasClass(document.body, hiddenCls.value)\n if (withoutHiddenClass) {\n bodyWidth = document.body.style.width\n addClass(document.body, hiddenCls.value)\n }\n scrollBarWidth = getScrollBarWidth(ns.namespace.value)\n const bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight\n const bodyOverflowY = getStyle(document.body, 'overflowY')\n if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === 'scroll') && withoutHiddenClass) {\n document.body.style.width = `calc(100% - ${scrollBarWidth}px)`\n }\n })\n onScopeDispose(() => cleanup())\n}\n","import type { Ref, UnwrapRef } from 'vue'\nimport { ref, toRaw, unref, watch, watchEffect } from 'vue'\n\nexport function useMergedState<T, R = Ref<T>>(\n defaultStateValue: T | (() => T),\n option?: {\n defaultValue?: T | (() => T)\n value?: Ref<T> | Ref<UnwrapRef<T>>\n onChange?: (val: T, prevValue: T) => void\n postState?: (val: T) => T\n }\n): [R, (val: T) => void] {\n const { defaultValue, value = ref() } = option || {}\n let initValue: T = typeof defaultStateValue === 'function' ? (defaultStateValue as any)() : defaultStateValue\n if (value.value !== undefined) {\n initValue = unref(value as any) as T\n }\n if (defaultValue !== undefined) {\n initValue = typeof defaultValue === 'function' ? (defaultValue as any)() : defaultValue\n }\n\n const innerValue = ref(initValue) as Ref<T>\n const mergedValue = ref(initValue) as Ref<T>\n watchEffect(() => {\n let val = value.value !== undefined ? value.value : innerValue.value\n if (option?.postState) {\n val = option.postState(val as T)\n }\n mergedValue.value = val as T\n })\n\n function triggerChange(newValue: T) {\n const preVal = mergedValue.value\n innerValue.value = newValue\n if (toRaw(mergedValue.value) !== newValue && option?.onChange) {\n option.onChange(newValue, preVal)\n }\n }\n\n // Effect of reset value to `undefined`\n watch(value, () => {\n innerValue.value = value.value as T\n })\n\n return [mergedValue as unknown as R, triggerChange]\n}\n","import { computed } from 'vue'\nimport { tokens } from '../constants'\nimport type { Breakpoint, BreakpointMap, ScreenMap, SubscribeFunc } from '../types'\n\nexport const responsiveArray: Breakpoint[] = ['xxxl', 'xxl', 'xl', 'lg', 'md', 'sm', 'xs']\n\nconst getResponsiveMap = (token: typeof tokens): BreakpointMap => ({\n xs: `(max-width: ${token.screenXSMax}px)`,\n sm: `(min-width: ${token.screenSM}px)`,\n md: `(min-width: ${token.screenMD}px)`,\n lg: `(min-width: ${token.screenLG}px)`,\n xl: `(min-width: ${token.screenXL}px)`,\n xxl: `(min-width: ${token.screenXXL}px)`,\n xxxl: `{min-width: ${token.screenXXXL}px}`\n})\n\nexport function useResponsiveObserve() {\n return computed(() => {\n const responsiveMap: BreakpointMap = getResponsiveMap(tokens)\n const subscribers = new Map<number, SubscribeFunc>()\n let subUid = -1\n let screens = {}\n\n return {\n matchHandlers: {} as {\n [prop: string]: {\n mql: MediaQueryList\n listener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null\n }\n },\n dispatch(pointMap: ScreenMap) {\n screens = pointMap\n subscribers.forEach(func => func(screens))\n return subscribers.size >= 1\n },\n subscribe(func: SubscribeFunc): number {\n if (!subscribers.size) this.register()\n subUid += 1\n subscribers.set(subUid, func)\n func(screens)\n return subUid\n },\n unsubscribe(paramToken: number) {\n subscribers.delete(paramToken)\n if (!subscribers.size) this.unregister()\n },\n unregister() {\n Object.keys(responsiveMap).forEach((screen: string) => {\n const matchMediaQuery = responsiveMap[screen as Breakpoint]\n const handler = this.matchHandlers[matchMediaQuery]\n handler?.mql.removeListener(handler?.listener)\n })\n subscribers.clear()\n },\n register() {\n Object.keys(responsiveMap).forEach((screen: string) => {\n const matchMediaQuery = responsiveMap[screen as Breakpoint]\n const listener = ({ matches }: { matches: boolean }) => {\n this.dispatch({\n ...screens,\n [screen]: matches\n })\n }\n const mql = window.matchMedia(matchMediaQuery)\n mql.addListener(listener)\n this.matchHandlers[matchMediaQuery] = {\n mql,\n listener\n }\n\n listener(mql)\n })\n },\n responsiveMap\n }\n })\n}\n","// eslint-disable-next-line prettier/prettier\nconst NOOP = () => { }\n\nexport const useSameTarget = (handleClick?: (e: MouseEvent) => void) => {\n if (!handleClick) {\n return { onClick: NOOP, onMousedown: NOOP, onMouseup: NOOP }\n }\n\n let mousedownTarget = false\n let mouseupTarget = false\n // refer to this https://javascript.info/mouse-events-basics\n // events fired in the order: mousedown -> mouseup -> click\n // we need to set the mousedown handle to false after click fired.\n const onClick = (e: MouseEvent) => {\n // if and only if\n if (mousedownTarget && mouseupTarget) {\n handleClick(e)\n }\n mousedownTarget = false\n mouseupTarget = false\n }\n\n const onMousedown = (e: MouseEvent) => {\n // marking current mousedown target.\n mousedownTarget = e.target === e.currentTarget\n }\n const onMouseup = (e: MouseEvent) => {\n // marking current mouseup target.\n mouseupTarget = e.target === e.currentTarget\n }\n\n return { onClick, onMousedown, onMouseup }\n}\n","export const ROW_KEY = '_MAX_ROW_KEY'\n\n// Optional display number per page;\nexport const PAGE_SIZE_OPTIONS = [10, 50, 80, 100]\n\n// Number of items displayed per page\nexport const PAGE_SIZE = 10\n\n// Common interface field settings\nexport const FETCH_SETTING = {\n // The field name of the current page passed to the background\n pageField: 'page',\n // The number field name of each page displayed in the background\n sizeField: 'pageSize',\n // Field name of the form data returned by the interface\n listField: 'itemList',\n // Total number of tables returned by the interface field name\n totalField: 'totalCount'\n}\n\n// Default Size\nexport const DEFAULT_SIZE = 'small'\n\n// Default layout of table cells\nexport const DEFAULT_ALIGN = 'center'\n\nexport const INDEX_COLUMN_FLAG = 'INDEX'\n\nexport const ACTION_COLUMN_FLAG = 'ACTION'\n","import type { VxeGlobalConfig } from 'vxe-pc-ui'\nimport { DEFAULT_SIZE, FETCH_SETTING } from './constants'\n\nexport default {\n fit: true,\n showHeader: true,\n delayHover: 250,\n autoResize: true,\n padding: false,\n minHeight: 180,\n size: DEFAULT_SIZE,\n border: 'inner',\n showOverflow: true,\n showHeaderOverflow: 'tooltip',\n showFooterOverflow: 'tooltip',\n autoCreateKey: true,\n showIndexColumn: true,\n fetchSetting: FETCH_SETTING,\n columns: () => [],\n sortConfig: () => ({\n remote: true\n }),\n resizeConfig: () => ({\n refreshDelay: 250\n }),\n radioConfig: () => ({\n strict: true\n }),\n rowConfig: () => ({\n useKey: true,\n isCurrent: true,\n isHover: true,\n keyField: '_ROW_KEY_'\n }),\n checkboxConfig: () => ({\n strict: true\n }),\n tooltipConfig: () => ({\n enterable: true\n }),\n validConfig: () => ({\n showMessage: true,\n autoClear: true,\n autoPos: true,\n message: 'inline',\n msgMode: 'single'\n }),\n columnConfig: () => ({\n resizable: true,\n useKey: true,\n maxFixedSize: 4\n }),\n customConfig: () => ({\n mode: 'modal'\n }),\n toolbarConfig: () => ({\n custom: true,\n zoom: true\n })\n} as any\n\nexport const globalSetting: VxeGlobalConfig = {\n zIndex: 2000,\n table: {\n size: 'small',\n border: true,\n fit: true,\n showHeader: true,\n delayHover: 250,\n autoResize: true,\n minHeight: 180,\n maxHeight: 325,\n showOverflow: true,\n resizable: true,\n showHeaderOverflow: 'tooltip',\n showFooterOverflow: 'tooltip'\n },\n grid: {\n size: 'small',\n border: true,\n fit: true,\n showHeader: true,\n delayHover: 250,\n autoResize: true,\n minHeight: 180,\n maxHeight: 325,\n showOverflow: true,\n resizable: true,\n showHeaderOverflow: 'tooltip',\n showFooterOverflow: 'tooltip'\n }\n}\n","import type { Ref } from 'vue'\nimport { inject, ref } from 'vue'\nimport type { VxeGlobalConfig } from 'vxe-pc-ui'\nimport { globalSetting } from '../components/basic-table/setting'\nimport { tableContextKey } from '../constants'\n\nexport function useTableConfig(tableOverrides?: Ref<VxeGlobalConfig | undefined>): VxeGlobalConfig | undefined {\n const table = tableOverrides || inject(tableContextKey, ref())!\n return table.value || globalSetting\n}\n","import type { InjectionKey, Ref } from 'vue'\nimport { computed, getCurrentInstance, inject, ref, unref } from 'vue'\nimport { isNumber } from '@maxax/utils'\nimport { DEFAULT_INITIAL_Z_INDEX, zIndexContextKey } from '../constants'\n\nconst zIndex = ref(0)\n\nexport interface ZIndexInjectionContext {\n current: number\n}\n\nconst initial: ZIndexInjectionContext = {\n current: 0\n}\n\nexport const ZINDEX_INJECTION_KEY: InjectionKey<ZIndexInjectionContext> = Symbol('elZIndexContextKey')\n\nexport const useZIndex = (zIndexOverrides?: Ref<number>) => {\n const increasingInjection = getCurrentInstance() ? inject(ZINDEX_INJECTION_KEY, initial) : initial\n\n const zIndexInjection = zIndexOverrides || (getCurrentInstance() ? inject(zIndexContextKey, undefined) : undefined)\n\n const initialZIndex = computed(() => {\n const zIndexFromInjection = unref(zIndexInjection)\n return isNumber(zIndexFromInjection) ? zIndexFromInjection : DEFAULT_INITIAL_Z_INDEX\n })\n\n const currentZIndex = computed(() => initialZIndex.value + zIndex.value)\n\n const nextZIndex = () => {\n increasingInjection.current++\n zIndex.value = increasingInjection.current\n return currentZIndex.value\n }\n\n return {\n initialZIndex,\n currentZIndex,\n nextZIndex\n }\n}\n","import { h, defineComponent, ref, shallowRef, onMounted, watch, onUnmounted, nextTick } from 'vue';\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n const colonSeparated = value.split(\":\");\n if (value.slice(0, 1) === \"@\") {\n if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n return null;\n }\n provider = colonSeparated.shift().slice(1);\n }\n if (colonSeparated.length > 3 || !colonSeparated.length) {\n return null;\n }\n if (colonSeparated.length > 1) {\n const name2 = colonSeparated.pop();\n const prefix = colonSeparated.pop();\n const result = {\n // Allow provider without '@': \"provider:prefix:name\"\n provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n prefix,\n name: name2\n };\n return validate && !validateIconName(result) ? null : result;\n }\n const name = colonSeparated[0];\n const dashSeparated = name.split(\"-\");\n if (dashSeparated.length > 1) {\n const result = {\n provider,\n prefix: dashSeparated.shift(),\n name: dashSeparated.join(\"-\")\n };\n return validate && !validateIconName(result) ? null : result;\n }\n if (allowSimpleName && provider === \"\") {\n const result = {\n provider,\n prefix: \"\",\n name\n };\n return validate && !validateIconName(result, allowSimpleName) ? null : result;\n }\n return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n if (!icon) {\n return false;\n }\n return !!// Check prefix: cannot be empty, unless allowSimpleName is enabled\n // Check name: cannot be empty\n ((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (\n // Name cannot be empty\n !name || // Must have body\n typeof icon.body !== \"string\" || // Check other props\n !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )\n ) {\n return null;\n }\n }\n const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (\n // Name cannot be empty\n !name || // Parent must be set and point to existing icon\n typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || // Check other props\n !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )\n ) {\n return null;\n }\n }\n return data;\n}\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n return {\n provider,\n prefix,\n icons: /* @__PURE__ */ Object.create(null),\n missing: /* @__PURE__ */ new Set()\n };\n}\nfunction getStorage(provider, prefix) {\n const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n if (!quicklyValidateIconSet(data)) {\n return [];\n }\n return parseIconSet(data, (name, icon) => {\n if (icon) {\n storage.icons[name] = icon;\n } else {\n storage.missing.add(name);\n }\n });\n}\nfunction addIconToStorage(storage, name, icon) {\n try {\n if (typeof icon.body === \"string\") {\n storage.icons[name] = { ...icon };\n return true;\n }\n } catch (err) {\n }\n return false;\n}\nfunction listIcons(provider, prefix) {\n let allIcons = [];\n const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n providers.forEach((provider2) => {\n const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n prefixes.forEach((prefix2) => {\n const storage = getStorage(provider2, prefix2);\n allIcons = allIcons.concat(\n Object.keys(storage.icons).map(\n (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n )\n );\n });\n });\n return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n if (typeof allow === \"boolean\") {\n simpleNames = allow;\n }\n return simpleNames;\n}\nfunction getIconData(name) {\n const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n if (icon) {\n const storage = getStorage(icon.provider, icon.prefix);\n const iconName = icon.name;\n return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n }\n}\nfunction addIcon(name, data) {\n const icon = stringToIcon(name, true, simpleNames);\n if (!icon) {\n return false;\n }\n const storage = getStorage(icon.provider, icon.prefix);\n if (data) {\n return addIconToStorage(storage, icon.name, data);\n } else {\n storage.missing.add(icon.name);\n return true;\n }\n}\nfunction addCollection(data, provider) {\n if (typeof data !== \"object\") {\n return false;\n }\n if (typeof provider !== \"string\") {\n provider = data.provider || \"\";\n }\n if (simpleNames && !provider && !data.prefix) {\n let added = false;\n if (quicklyValidateIconSet(data)) {\n data.prefix = \"\";\n parseIconSet(data, (name, icon) => {\n if (addIcon(name, icon)) {\n added = true;\n }\n });\n }\n return added;\n }\n const prefix = data.prefix;\n if (!validateIconName({\n prefix,\n name: \"a\"\n })) {\n return false;\n }\n const storage = getStorage(provider, prefix);\n return !!addIconSet(storage, data);\n}\nfunction iconLoaded(name) {\n return !!getIconData(name);\n}\nfunction getIcon(name) {\n const result = getIconData(name);\n return result ? {\n ...defaultIconProps,\n ...result\n } : result;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n // Dimensions\n ...defaultIconSizeCustomisations,\n // Transformations\n ...defaultIconTransformations\n});\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n let defs = \"\";\n const index = content.indexOf(\"<\" + tag);\n while (index >= 0) {\n const start = content.indexOf(\">\", index);\n const end = content.indexOf(\"</\" + tag);\n if (start === -1 || end === -1) {\n break;\n }\n const endEnd = content.indexOf(\">\", end);\n if (endEnd === -1) {\n break;\n }\n defs += content.slice(start + 1, end).trim();\n content = content.slice(0, index).trim() + content.slice(endEnd + 1);\n }\n return {\n defs,\n content\n };\n}\nfunction mergeDefsAndContent(defs, content) {\n return defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\nfunction wrapSVGContent(body, start, end) {\n const split = splitSVGDefs(body);\n return mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = wrapSVGContent(\n body,\n '<g transform=\"' + transformations.join(\" \") + '\">',\n \"</g>\"\n );\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const attributes = {};\n const setAttr = (prop, value) => {\n if (!isUnsetKeyword(value)) {\n attributes[prop] = value.toString();\n }\n };\n setAttr(\"width\", width);\n setAttr(\"height\", height);\n const viewBox = [box.left, box.top, boxWidth, boxHeight];\n attributes.viewBox = viewBox.join(\" \");\n return {\n attributes,\n viewBox,\n body\n };\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n // Allowed characters before id: [#;\"]\n // Allowed characters after id: [)\"], .[a-z]\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + suffix + \"$3\"\n );\n });\n body = body.replace(new RegExp(suffix, \"g\"), \"\");\n return body;\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n return storage[provider] || storage[\"\"];\n}\n\nfunction createAPIConfig(source) {\n let resources;\n if (typeof source.resources === \"string\") {\n resources = [source.resources];\n } else {\n resources = source.resources;\n if (!(resources instanceof Array) || !resources.length) {\n return null;\n }\n }\n const result = {\n // API hosts\n resources,\n // Root path\n path: source.path || \"/\",\n // URL length limit\n maxURL: source.maxURL || 500,\n // Timeout before next host is used.\n rotate: source.rotate || 750,\n // Timeout before failing query.\n timeout: source.timeout || 5e3,\n // Randomise default API end point.\n random: source.random === true,\n // Start index\n index: source.index || 0,\n // Receive data after time out (used if time out kicks in first, then API module sends data anyway).\n dataAfterTimeout: source.dataAfterTimeout !== false\n };\n return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n \"https://api.simplesvg.com\",\n \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n if (fallBackAPISources.length === 1) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n if (Math.random() > 0.5) {\n fallBackAPI.push(fallBackAPISources.shift());\n } else {\n fallBackAPI.push(fallBackAPISources.pop());\n }\n }\n}\nconfigStorage[\"\"] = createAPIConfig({\n resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n const config = createAPIConfig(customConfig);\n if (config === null) {\n return false;\n }\n configStorage[provider] = config;\n return true;\n}\nfunction getAPIConfig(provider) {\n return configStorage[provider];\n}\nfunction listAPIProviders() {\n return Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n let callback;\n try {\n callback = fetch;\n if (typeof callback === \"function\") {\n return callback;\n }\n } catch (err) {\n }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n fetchModule = fetch2;\n}\nfunction getFetch() {\n return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n const config = getAPIConfig(provider);\n if (!config) {\n return 0;\n }\n let result;\n if (!config.maxURL) {\n result = 0;\n } else {\n let maxHostLength = 0;\n config.resources.forEach((item) => {\n const host = item;\n maxHostLength = Math.max(maxHostLength, host.length);\n });\n const url = prefix + \".json?icons=\";\n result = config.maxURL - maxHostLength - config.path.length - url.length;\n }\n return result;\n}\nfunction shouldAbort(status) {\n return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n const results = [];\n const maxLength = calculateMaxLength(provider, prefix);\n const type = \"icons\";\n let item = {\n type,\n provider,\n prefix,\n icons: []\n };\n let length = 0;\n icons.forEach((name, index) => {\n length += name.length + 1;\n if (length >= maxLength && index > 0) {\n results.push(item);\n item = {\n type,\n provider,\n prefix,\n icons: []\n };\n length = name.length;\n }\n item.icons.push(name);\n });\n results.push(item);\n return results;\n};\nfunction getPath(provider) {\n if (typeof provider === \"string\") {\n const config = getAPIConfig(provider);\n if (config) {\n return config.path;\n }\n }\n return \"/\";\n}\nconst send = (host, params, callback) => {\n if (!fetchModule) {\n callback(\"abort\", 424);\n return;\n }\n let path = getPath(params.provider);\n switch (params.type) {\n case \"icons\": {\n const prefix = params.prefix;\n const icons = params.icons;\n const iconsList = icons.join(\",\");\n const urlParams = new URLSearchParams({\n icons: iconsList\n });\n path += prefix + \".json?\" + urlParams.toString();\n break;\n }\n case \"custom\": {\n const uri = params.uri;\n path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n break;\n }\n default:\n callback(\"abort\", 400);\n return;\n }\n let defaultError = 503;\n fetchModule(host + path).then((response) => {\n const status = response.status;\n if (status !== 200) {\n setTimeout(() => {\n callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n });\n return;\n }\n defaultError = 501;\n return response.json();\n }).then((data) => {\n if (typeof data !== \"object\" || data === null) {\n setTimeout(() => {\n if (data === 404) {\n callback(\"abort\", data);\n } else {\n callback(\"next\", defaultError);\n }\n });\n return;\n }\n setTimeout(() => {\n callback(\"success\", data);\n });\n }).catch(() => {\n callback(\"next\", defaultError);\n });\n};\nconst fetchAPIModule = {\n prepare,\n send\n};\n\nfunction sortIcons(icons) {\n const result = {\n loaded: [],\n missing: [],\n pending: []\n };\n const storage = /* @__PURE__ */ Object.create(null);\n icons.sort((a, b) => {\n if (a.provider !== b.provider) {\n return a.provider.localeCompare(b.provider);\n }\n if (a.prefix !== b.prefix) {\n return a.prefix.localeCompare(b.prefix);\n }\n return a.name.localeCompare(b.name);\n });\n let lastIcon = {\n provider: \"\",\n prefix: \"\",\n name: \"\"\n };\n icons.forEach((icon) => {\n if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n return;\n }\n lastIcon = icon;\n const provider = icon.provider;\n const prefix = icon.prefix;\n const name = icon.name;\n const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n let list;\n if (name in localStorage.icons) {\n list = result.loaded;\n } else if (prefix === \"\" || localStorage.missing.has(name)) {\n list = result.missing;\n } else {\n list = result.pending;\n }\n const item = {\n provider,\n prefix,\n name\n };\n list.push(item);\n });\n return result;\n}\n\nfunction removeCallback(storages, id) {\n storages.forEach((storage) => {\n const items = storage.loaderCallbacks;\n if (items) {\n storage.loaderCallbacks = items.filter((row) => row.id !== id);\n }\n });\n}\nfunction updateCallbacks(storage) {\n if (!storage.pendingCallbacksFlag) {\n storage.pendingCallbacksFlag = true;\n setTimeout(() => {\n storage.pendingCallbacksFlag = false;\n const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n if (!items.length) {\n return;\n }\n let hasPending = false;\n const provider = storage.provider;\n const prefix = storage.prefix;\n items.forEach((item) => {\n const icons = item.icons;\n const oldLength = icons.pending.length;\n icons.pending = icons.pending.filter((icon) => {\n if (icon.prefix !== prefix) {\n return true;\n }\n const name = icon.name;\n if (storage.icons[name]) {\n icons.loaded.push({\n provider,\n prefix,\n name\n });\n } else if (storage.missing.has(name)) {\n icons.missing.push({\n provider,\n prefix,\n name\n });\n } else {\n hasPending = true;\n return true;\n }\n return false;\n });\n if (icons.pending.length !== oldLength) {\n if (!hasPending) {\n removeCallback([storage], item.id);\n }\n item.callback(\n icons.loaded.slice(0),\n icons.missing.slice(0),\n icons.pending.slice(0),\n item.abort\n );\n }\n });\n });\n }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n const id = idCounter++;\n const abort = removeCallback.bind(null, pendingSources, id);\n if (!icons.pending.length) {\n return abort;\n }\n const item = {\n id,\n icons,\n callback,\n abort\n };\n pendingSources.forEach((storage) => {\n (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n });\n return abort;\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n const result = [];\n list.forEach((item) => {\n const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n if (icon) {\n result.push(icon);\n }\n });\n return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n resources: [],\n index: 0,\n timeout: 2e3,\n rotate: 750,\n random: false,\n dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n const resourcesCount = config.resources.length;\n const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n let resources;\n if (config.random) {\n let list = config.resources.slice(0);\n resources = [];\n while (list.length > 1) {\n const nextIndex = Math.floor(Math.random() * list.length);\n resources.push(list[nextIndex]);\n list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n }\n resources = resources.concat(list);\n } else {\n resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n }\n const startTime = Date.now();\n let status = \"pending\";\n let queriesSent = 0;\n let lastError;\n let timer = null;\n let queue = [];\n let doneCallbacks = [];\n if (typeof done === \"function\") {\n doneCallbacks.push(done);\n }\n function resetTimer() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function abort() {\n if (status === \"pending\") {\n status = \"aborted\";\n }\n resetTimer();\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function subscribe(callback, overwrite) {\n if (overwrite) {\n doneCallbacks = [];\n }\n if (typeof callback === \"function\") {\n doneCallbacks.push(callback);\n }\n }\n function getQueryStatus() {\n return {\n startTime,\n payload,\n status,\n queriesSent,\n queriesPending: queue.length,\n subscribe,\n abort\n };\n }\n function failQuery() {\n status = \"failed\";\n doneCallbacks.forEach((callback) => {\n callback(void 0, lastError);\n });\n }\n function clearQueue() {\n queue.forEach((item) => {\n if (item.status === \"pending\") {\n item.status = \"aborted\";\n }\n });\n queue = [];\n }\n function moduleResponse(item, response, data) {\n const isError = response !== \"success\";\n queue = queue.filter((queued) => queued !== item);\n switch (status) {\n case \"pending\":\n break;\n case \"failed\":\n if (isError || !config.dataAfterTimeout) {\n return;\n }\n break;\n default:\n return;\n }\n if (response === \"abort\") {\n lastError = data;\n failQuery();\n return;\n }\n if (isError) {\n lastError = data;\n if (!queue.length) {\n if (!resources.length) {\n failQuery();\n } else {\n execNext();\n }\n }\n return;\n }\n resetTimer();\n clearQueue();\n if (!config.random) {\n const index = config.resources.indexOf(item.resource);\n if (index !== -1 && index !== config.index) {\n config.index = index;\n }\n }\n status = \"completed\";\n doneCallbacks.forEach((callback) => {\n callback(data);\n });\n }\n function execNext() {\n if (status !== \"pending\") {\n return;\n }\n resetTimer();\n const resource = resources.shift();\n if (resource === void 0) {\n if (queue.length) {\n timer = setTimeout(() => {\n resetTimer();\n if (status === \"pending\") {\n clearQueue();\n failQuery();\n }\n }, config.timeout);\n return;\n }\n failQuery();\n return;\n }\n const item = {\n status: \"pending\",\n resource,\n callback: (status2, data) => {\n moduleResponse(item, status2, data);\n }\n };\n queue.push(item);\n queriesSent++;\n timer = setTimeout(execNext, config.rotate);\n query(resource, payload, item.callback);\n }\n setTimeout(execNext);\n return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n const config = {\n ...defaultConfig,\n ...cfg\n };\n let queries = [];\n function cleanup() {\n queries = queries.filter((item) => item().status === \"pending\");\n }\n function query(payload, queryCallback, doneCallback) {\n const query2 = sendQuery(\n config,\n payload,\n queryCallback,\n (data, error) => {\n cleanup();\n if (doneCallback) {\n doneCallback(data, error);\n }\n }\n );\n queries.push(query2);\n return query2;\n }\n function find(callback) {\n return queries.find((value) => {\n return callback(value);\n }) || null;\n }\n const instance = {\n query,\n find,\n setIndex: (index) => {\n config.index = index;\n },\n getIndex: () => config.index,\n cleanup\n };\n return instance;\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n if (!redundancyCache[provider]) {\n const config = getAPIConfig(provider);\n if (!config) {\n return;\n }\n const redundancy = initRedundancy(config);\n const cachedReundancy = {\n config,\n redundancy\n };\n redundancyCache[provider] = cachedReundancy;\n }\n return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n let redundancy;\n let send;\n if (typeof target === \"string\") {\n const api = getAPIModule(target);\n if (!api) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n send = api.send;\n const cached = getRedundancyCache(target);\n if (cached) {\n redundancy = cached.redundancy;\n }\n } else {\n const config = createAPIConfig(target);\n if (config) {\n redundancy = initRedundancy(config);\n const moduleKey = target.resources ? target.resources[0] : \"\";\n const api = getAPIModule(moduleKey);\n if (api) {\n send = api.send;\n }\n }\n }\n if (!redundancy || !send) {\n callback(void 0, 424);\n return emptyCallback$1;\n }\n return redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n if (!storage.iconsLoaderFlag) {\n storage.iconsLoaderFlag = true;\n setTimeout(() => {\n storage.iconsLoaderFlag = false;\n updateCallbacks(storage);\n });\n }\n}\nfunction checkIconNamesForAPI(icons) {\n const valid = [];\n const invalid = [];\n icons.forEach((name) => {\n (name.match(matchIconName) ? valid : invalid).push(name);\n });\n return {\n valid,\n invalid\n };\n}\nfunction parseLoaderResponse(storage, icons, data) {\n function checkMissing() {\n const pending = storage.pendingIcons;\n icons.forEach((name) => {\n if (pending) {\n pending.delete(name);\n }\n if (!storage.icons[name]) {\n storage.missing.add(name);\n }\n });\n }\n if (data && typeof data === \"object\") {\n try {\n const parsed = addIconSet(storage, data);\n if (!parsed.length) {\n checkMissing();\n return;\n }\n } catch (err) {\n console.error(err);\n }\n }\n checkMissing();\n loadedNewIcons(storage);\n}\nfunction parsePossiblyAsyncResponse(response, callback) {\n if (response instanceof Promise) {\n response.then((data) => {\n callback(data);\n }).catch(() => {\n callback(null);\n });\n } else {\n callback(response);\n }\n}\nfunction loadNewIcons(storage, icons) {\n if (!storage.iconsToLoad) {\n storage.iconsToLoad = icons;\n } else {\n storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n }\n if (!storage.iconsQueueFlag) {\n storage.iconsQueueFlag = true;\n setTimeout(() => {\n storage.iconsQueueFlag = false;\n const { provider, prefix } = storage;\n const icons2 = storage.iconsToLoad;\n delete storage.iconsToLoad;\n if (!icons2 || !icons2.length) {\n return;\n }\n const customIconLoader = storage.loadIcon;\n if (storage.loadIcons && (icons2.length > 1 || !customIconLoader)) {\n parsePossiblyAsyncResponse(\n storage.loadIcons(icons2, prefix, provider),\n (data) => {\n parseLoaderResponse(storage, icons2, data);\n }\n );\n return;\n }\n if (customIconLoader) {\n icons2.forEach((name) => {\n const response = customIconLoader(name, prefix, provider);\n parsePossiblyAsyncResponse(response, (data) => {\n const iconSet = data ? {\n prefix,\n icons: {\n [name]: data\n }\n } : null;\n parseLoaderResponse(storage, [name], iconSet);\n });\n });\n return;\n }\n const { valid, invalid } = checkIconNamesForAPI(icons2);\n if (invalid.length) {\n parseLoaderResponse(storage, invalid, null);\n }\n if (!valid.length) {\n return;\n }\n const api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n if (!api) {\n parseLoaderResponse(storage, valid, null);\n return;\n }\n const params = api.prepare(provider, prefix, valid);\n params.forEach((item) => {\n sendAPIQuery(provider, item, (data) => {\n parseLoaderResponse(storage, item.icons, data);\n });\n });\n });\n }\n}\nconst loadIcons = (icons, callback) => {\n const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n const sortedIcons = sortIcons(cleanedIcons);\n if (!sortedIcons.pending.length) {\n let callCallback = true;\n if (callback) {\n setTimeout(() => {\n if (callCallback) {\n callback(\n sortedIcons.loaded,\n sortedIcons.missing,\n sortedIcons.pending,\n emptyCallback\n );\n }\n });\n }\n return () => {\n callCallback = false;\n };\n }\n const newIcons = /* @__PURE__ */ Object.create(null);\n const sources = [];\n let lastProvider, lastPrefix;\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix } = icon;\n if (prefix === lastPrefix && provider === lastProvider) {\n return;\n }\n lastProvider = provider;\n lastPrefix = prefix;\n sources.push(getStorage(provider, prefix));\n const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n if (!providerNewIcons[prefix]) {\n providerNewIcons[prefix] = [];\n }\n });\n sortedIcons.pending.forEach((icon) => {\n const { provider, prefix, name } = icon;\n const storage = getStorage(provider, prefix);\n const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n if (!pendingQueue.has(name)) {\n pendingQueue.add(name);\n newIcons[provider][prefix].push(name);\n }\n });\n sources.forEach((storage) => {\n const list = newIcons[storage.provider][storage.prefix];\n if (list.length) {\n loadNewIcons(storage, list);\n }\n });\n return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = (icon) => {\n return new Promise((fulfill, reject) => {\n const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n if (!iconObj) {\n reject(icon);\n return;\n }\n loadIcons([iconObj || icon], (loaded) => {\n if (loaded.length && iconObj) {\n const data = getIconData(iconObj);\n if (data) {\n fulfill({\n ...defaultIconProps,\n ...data\n });\n return;\n }\n }\n reject(icon);\n });\n });\n};\n\nfunction setCustomIconsLoader(loader, prefix, provider) {\n getStorage(provider || \"\", prefix).loadIcons = loader;\n}\nfunction setCustomIconLoader(loader, prefix, provider) {\n getStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nfunction iconToHTML(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToData(svg) {\n return \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\nfunction svgToURL(svg) {\n return 'url(\"' + svgToData(svg) + '\")';\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n webkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Check mode\n const mode = props.mode || 'svg';\n // Copy style\n const style = {};\n const propsStyle = props.style;\n const customStyle = typeof propsStyle === 'object' && !(propsStyle instanceof Array)\n ? propsStyle\n : {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n case 'mode':\n case 'ssr':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default: {\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add innerHTML and style to props\n componentProps['innerHTML'] = replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyVue');\n // Render icon\n return h('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return h('span', componentProps);\n};\n\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\n/**\n * Empty icon data, rendered when icon is not available\n */\nconst emptyIcon = {\n ...defaultIconProps,\n body: '',\n};\n/**\n * Component\n */\nconst Icon = defineComponent((props, { emit }) => {\n const loader = ref(null);\n function abortLoading() {\n if (loader.value) {\n loader.value.abort?.();\n loader.value = null;\n }\n }\n // Render state\n const rendering = ref(!!props.ssr);\n const lastRenderedIconName = ref('');\n const iconData = shallowRef(null);\n // Update icon data\n function getIcon() {\n const icon = props.icon;\n // Icon is an object\n if (typeof icon === 'object' &&\n icon !== null &&\n typeof icon.body === 'string') {\n lastRenderedIconName.value = '';\n return {\n data: icon,\n };\n }\n // Check for valid icon name\n let iconName;\n if (typeof icon !== 'string' ||\n (iconName = stringToIcon(icon, false, true)) === null) {\n return null;\n }\n // Load icon\n let data = getIconData(iconName);\n if (!data) {\n // Icon data is not available\n const oldState = loader.value;\n if (!oldState || oldState.name !== icon) {\n // Icon name does not match old loader state\n if (data === null) {\n // Failed to load\n loader.value = {\n name: icon,\n };\n }\n else {\n loader.value = {\n name: icon,\n abort: loadIcons([iconName], updateIconData),\n };\n }\n }\n return null;\n }\n // Icon data is available\n abortLoading();\n if (lastRenderedIconName.value !== icon) {\n lastRenderedIconName.value = icon;\n // Emit on next tick because render will be called on next tick\n nextTick(() => {\n emit('load', icon);\n });\n }\n // Customise icon\n const customise = props.customise;\n if (customise) {\n // Clone data and customise it\n data = Object.assign({}, data);\n const customised = customise(data.body, iconName.name, iconName.prefix, iconName.provider);\n if (typeof customised === 'string') {\n data.body = customised;\n }\n }\n // Add classes\n const classes = ['iconify'];\n if (iconName.prefix !== '') {\n classes.push('iconify--' + iconName.prefix);\n }\n if (iconName.provider !== '') {\n classes.push('iconify--' + iconName.provider);\n }\n return { data, classes };\n }\n function updateIconData() {\n const icon = getIcon();\n if (!icon) {\n iconData.value = null;\n }\n else if (icon.data !== iconData.value?.data) {\n iconData.value = icon;\n }\n }\n // Set icon data\n if (rendering.value) {\n updateIconData();\n }\n else {\n onMounted(() => {\n rendering.value = true;\n updateIconData();\n });\n }\n watch(() => props.icon, updateIconData);\n // Abort loading on unmount\n onUnmounted(abortLoading);\n // Render function\n return () => {\n // Get icon data\n const icon = iconData.value;\n if (!icon) {\n // Icon is not available\n return render(emptyIcon, props);\n }\n // Add classes\n let newProps = props;\n if (icon.classes) {\n newProps = {\n ...props,\n class: icon.classes.join(' '),\n };\n }\n // Render icon\n return render({\n ...defaultIconProps,\n ...icon.data,\n }, newProps);\n };\n}, {\n props: [\n // Icon and render mode\n 'icon',\n 'mode',\n 'ssr',\n // Layout and style\n 'width',\n 'height',\n 'style',\n 'color',\n 'inline',\n // Transformations\n 'rotate',\n 'hFlip',\n 'horizontalFlip',\n 'vFlip',\n 'verticalFlip',\n 'flip',\n // Misc\n 'id',\n 'ariaHidden',\n 'customise',\n 'title',\n ],\n emits: ['load'],\n});\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, getIcon, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs, setCustomIconLoader, setCustomIconsLoader };\n","<script lang=\"ts\" setup>\nimport { computed, useAttrs } from 'vue'\nimport { Icon } from '@iconify/vue'\nimport { useNamespace } from '../../composable'\nimport type { BasicSvgIconProps } from './interface'\n\nconst props = defineProps<BasicSvgIconProps>()\n\nconst attrs = useAttrs()\n\nconst { b } = useNamespace('basic-svg-icon')\n\nconst bindAttrs = computed<{ class: string; style: string }>(() => ({\n class: (attrs.class as string) || '',\n style: (attrs.style as string) || ''\n}))\n\nconst symbolId = computed(() => {\n const prefix = 'max'\n\n const defaultLocalIcon = 'no-icon'\n\n const icon = props.localIcon || defaultLocalIcon\n\n return `#${prefix}-${icon}`\n})\n\nconst renderLocalIcon = computed(() => props.localIcon || !props.icon)\n</script>\n\n<template>\n <template v-if=\"renderLocalIcon\">\n <svg aria-hidden=\"true\" width=\"1em\" height=\"1em\" v-bind=\"bindAttrs\" :class=\"b()\">\n <use :xlink:href=\"symbolId\" fill=\"currentColor\" />\n </svg>\n </template>\n <template v-else>\n <Icon v-if=\"icon\" :icon=\"icon\" v-bind=\"bindAttrs\" :class=\"b()\" />\n </template>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicSvgIcon from './BasicSvgIcon.vue'\n\nexport const XBasicSvgIcon: SFCWithInstall<typeof BasicSvgIcon> = withInstall(BasicSvgIcon)\nexport type BasicSvgIconInstance = InstanceType<typeof BasicSvgIcon>\n\nexport default XBasicSvgIcon\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useNamespace } from '../../composable'\nimport { XBasicSvgIcon } from '../basic-svg-icon'\nimport type { BasicArrowProps } from './interface'\n\nconst props = defineProps<BasicArrowProps>()\n\nconst { b } = useNamespace('basic-arrow')\n\nconst getClass = computed(() => {\n const { expand, inset } = props\n\n const prefixCls = b()\n return [\n prefixCls,\n {\n [`${prefixCls}--active`]: expand,\n inset\n }\n ]\n})\n\nconst getIcon = computed(() => {\n return props.expand ? 'ri:arrow-up-s-line' : 'ri:arrow-down-s-line'\n})\n</script>\n\n<template>\n <span :class=\"getClass\">\n <XBasicSvgIcon :icon=\"getIcon\" />\n </span>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicArrow from './BasicArrow.vue'\n\nexport const XBasicArrow: SFCWithInstall<typeof BasicArrow> = withInstall(BasicArrow)\nexport type BasicArrowInstance = InstanceType<typeof BasicArrow>\n\nexport default XBasicArrow\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { NButton } from 'naive-ui'\nimport { useNamespace } from '../../composable'\nimport { XBasicSvgIcon } from '../basic-svg-icon'\nimport type { BasicButtonProps } from './interface'\n\nconst props = defineProps<BasicButtonProps>()\n\nconst { b } = useNamespace('basic-button')\n</script>\n\n<template>\n <NButton v-bind=\"props\" :class=\"b()\">\n <template v-if=\"props.icon\" #icon>\n <XBasicSvgIcon :icon=\"props.icon\" />\n </template>\n <slot />\n </NButton>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicButton from './BasicButton.vue'\n\nexport const XBasicButton: SFCWithInstall<typeof BasicButton> = withInstall(BasicButton)\nexport type BasicButtonInstance = InstanceType<typeof BasicButton>\n\nexport default XBasicButton\n\nexport * from './interface'\n","/**\n* @vue/shared v3.5.24\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `CACHED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nfunction normalizeCssVarValue(value) {\n if (value == null) {\n return \"initial\";\n }\n if (typeof value === \"string\") {\n return value === \"\" ? \" \" : value;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(\n \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n value\n );\n }\n }\n return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","import type { ExtractPropTypes, PropType } from 'vue'\n\ntype ZIndexProperty = '-moz-initial' | 'inherit' | 'initial' | 'revert' | 'revert-layer' | 'unset' | 'auto' | (number & {}) | (string & {})\n\nexport const basicOverlayProps = {\n mask: {\n type: Boolean,\n default: true\n },\n customMaskEvent: Boolean,\n overlayClass: {\n type: [String, Array, Object] as PropType<string | string[] | Record<string, boolean>>\n },\n zIndex: {\n type: [String, Number] as PropType<ZIndexProperty>\n }\n}\n\nexport type BasicOverlayProps = ExtractPropTypes<typeof basicOverlayProps>\n\nexport interface BasicOverlayContext {\n name: string\n}\n","import { defineComponent } from 'vue'\nimport { useNamespace, useSameTarget } from '../../composable'\nimport { basicOverlayProps } from './interface'\n\nexport default defineComponent({\n name: 'XBasicOverlay',\n props: basicOverlayProps,\n emits: ['click'],\n setup(props, { emit, slots }) {\n const { b } = useNamespace('basic-overlay')\n\n const onMaskClick = (e: MouseEvent) => {\n emit('click', e)\n }\n\n const { onClick, onMousedown, onMouseup } = useSameTarget(props.customMaskEvent ? undefined : onMaskClick)\n\n return () => {\n return props.mask ? (\n <div class={[b(), props.overlayClass]} style={{ zIndex: props.zIndex }} onClick={onClick} onMousedown={onMousedown} onMouseup={onMouseup}>\n {slots.default?.()}\n </div>\n ) : (\n <div class={props.overlayClass} style={{ zIndex: props.zIndex, position: 'fixed', top: '0px', right: '0px', bottom: '0px', left: '0px' }}>\n {slots.default?.()}\n </div>\n )\n }\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicOverlay from './BasicOverlay'\n\nexport const XBasicOverlay: SFCWithInstall<typeof BasicOverlay> = withInstall(BasicOverlay)\nexport type BasicOverlayInstance = InstanceType<typeof BasicOverlay>\n\nexport default XBasicOverlay\n\nexport * from './interface'\n","import type { InjectionKey, Ref } from 'vue'\nimport type { ConfigProviderContext } from './interface'\n\nexport const configProviderKey: InjectionKey<Ref<ConfigProviderContext>> = Symbol('config-provider')\n","/* eslint-disable no-redeclare */\nimport type { App, Ref } from 'vue'\nimport { computed, getCurrentInstance, inject, provide, ref, unref } from 'vue'\nimport type { MaybeRef } from '@maxax/types'\nimport { merge } from 'lodash-es'\nimport { useLocale, useNamespace, useZIndex } from '../../../composable'\nimport { DEFAULT_INITIAL_Z_INDEX, DEFAULT_NAMESPACE, localeContextKey, namespaceContextKey, tableContextKey, zIndexContextKey } from '../../../constants'\nimport { configProviderKey } from '../context'\nimport type { ConfigProviderContext } from '../interface'\n\nconst globalConfig = ref<ConfigProviderContext>()\n\nexport function useGlobalConfig<K extends keyof ConfigProviderContext, D extends ConfigProviderContext[K]>(key: K, defaultValue?: D): Ref<Exclude<ConfigProviderContext[K], undefined> | D>\nexport function useGlobalConfig(): Ref<ConfigProviderContext>\nexport function useGlobalConfig(key?: keyof ConfigProviderContext, defaultValue = undefined) {\n const config = (getCurrentInstance() ? inject(configProviderKey, globalConfig) : globalConfig) as Ref<ConfigProviderContext>\n if (key) {\n return computed(() => config.value?.[key] ?? defaultValue)\n }\n return config\n}\n\nexport const provideGlobalConfig = (config: MaybeRef<ConfigProviderContext>, app?: App, global = false) => {\n const inSetup = Boolean(getCurrentInstance())\n const oldConfig = inSetup ? useGlobalConfig() : undefined\n\n const provideFn = app?.provide ?? (inSetup ? provide : undefined)\n if (!provideFn) return\n\n const context = computed(() => {\n const cfg = unref(config)\n if (!oldConfig?.value) return cfg\n return merge(oldConfig.value, cfg)\n })\n\n provideFn(configProviderKey, context)\n\n provideFn(\n localeContextKey,\n computed(() => context.value.locale)\n )\n provideFn(\n namespaceContextKey,\n computed(() => context.value.namespace)\n )\n provideFn(\n zIndexContextKey,\n computed(() => context.value.zIndex)\n )\n\n provideFn(\n tableContextKey,\n computed(() => context.value.table)\n )\n\n if (global || !globalConfig.value) {\n globalConfig.value = context.value\n }\n\n return context\n}\n\nexport const useConfigProvider = (block: string) => {\n const config = useGlobalConfig()\n\n const ns = useNamespace(\n block,\n computed(() => config.value?.namespace || DEFAULT_NAMESPACE)\n )\n\n const locale = useLocale(computed(() => config.value?.locale))\n const zIndex = useZIndex(computed(() => config.value?.zIndex || DEFAULT_INITIAL_Z_INDEX))\n\n provideGlobalConfig(computed(() => unref(config) || {}))\n\n return {\n ns,\n locale,\n zIndex\n }\n}\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { VxeGlobalConfig } from 'vxe-pc-ui'\nimport type { Locale } from '../../locale'\n\nexport const configProviderProps = {\n /** 全局 z-index 值 */\n zIndex: Number,\n /** 全局语言 */\n locale: {\n type: Object as PropType<Locale>\n },\n /** 全局命名空间 */\n namespace: {\n type: String,\n default: 'max'\n },\n /** 远程全局图标前缀 */\n iconRemotePrefix: {\n type: String,\n default: 'imax'\n },\n /** 本地全局图标前缀 */\n iconLocalPrefix: {\n type: String,\n default: 'icon-local'\n },\n /** 全局表格配置 */\n table: {\n type: Object as PropType<VxeGlobalConfig>\n }\n}\n\nexport type ConfigProviderProps = ExtractPropTypes<typeof configProviderProps>\n\nexport type ConfigProviderContext = Partial<ConfigProviderProps>\n","import { defineComponent } from 'vue'\nimport { provideGlobalConfig } from './hooks/use-global-config'\nimport { configProviderProps } from './interface'\n\nexport default defineComponent({\n name: 'ConfigProvider',\n props: configProviderProps,\n setup(props, { slots }) {\n const config = provideGlobalConfig(props)\n\n return () => {\n return (\n <div class='imax-config-provider' data-config-provider={config}>\n {slots.default?.()}\n </div>\n )\n }\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport ConfigProvider from './ConfigProvider'\n\nexport const XConfigProvider: SFCWithInstall<typeof ConfigProvider> = withInstall(ConfigProvider)\nexport type ConfigProviderInstance = InstanceType<typeof ConfigProvider>\n\nexport default XConfigProvider\n\nexport * from './hooks/use-global-config'\nexport * from './interface'\n","import type { AppContext, Component, CSSProperties, ExtractPropTypes, PropType, VNode } from 'vue'\nimport type { Size } from '../../types/basic'\n\ntype MessageType = '' | 'success' | 'warning' | 'info' | 'error'\n\nexport type Action = 'confirm' | 'close' | 'cancel'\nexport type MessageBoxType = '' | 'prompt' | 'alert' | 'confirm'\nexport type MessageBoxData = MessageBoxInputData & Action\n\nexport interface MessageBoxInputData {\n value: string\n action: Action\n}\n\nexport const basicMessageBoxProps = {\n modal: {\n type: Boolean,\n default: true\n },\n lockScroll: {\n type: Boolean,\n default: true\n },\n showClose: {\n type: Boolean,\n default: true\n },\n closeOnClickModal: {\n type: Boolean,\n default: true\n },\n closeOnPressEscape: {\n type: Boolean,\n default: true\n },\n closeOnHashChange: {\n type: Boolean,\n default: true\n },\n center: Boolean,\n draggable: Boolean,\n overflow: Boolean,\n roundButton: {\n default: false,\n type: Boolean\n },\n container: {\n type: String, // default append to body\n default: 'body'\n },\n boxType: {\n type: String as PropType<MessageBoxType>,\n default: ''\n }\n}\n\nexport type BasicMessageBoxProps = ExtractPropTypes<typeof basicMessageBoxProps>\n\nexport type MessageBoxInputValidator = ((value: string) => boolean | string) | undefined\n\nexport interface MessageBoxState {\n autofocus: boolean\n title: string | undefined\n message: string\n type: MessageType\n icon: string | Component\n customClass: string\n customStyle: any\n showInput: boolean\n inputValue: string\n inputPlaceholder: string\n inputType: 'text' | 'textarea' | 'password' | undefined\n inputPattern: RegExp | null\n inputValidator: MessageBoxInputValidator\n inputErrorMessage: string\n showConfirmButton: boolean\n showCancelButton: boolean\n action: Action\n dangerouslyUseHTMLString: boolean\n confirmButtonText: string\n cancelButtonText: string\n confirmButtonLoading: boolean\n cancelButtonLoading: boolean\n confirmButtonClass: string\n confirmButtonDisabled: boolean\n cancelButtonClass: string\n editorErrorMessage: string\n beforeClose: null | ((action: Action, instance: MessageBoxState, done: () => void) => void)\n callback: null | Callback\n distinguishCancelAndClose: boolean\n modalFade: boolean\n modalClass: string\n validateError: boolean\n zIndex: number\n}\n\nexport type Callback = ((value: string, action: Action) => any) | ((action: Action) => any)\n\n/** Options used in MessageBox */\nexport interface MessageBoxOptions {\n /**\n * auto focus when open message-box\n */\n autofocus?: boolean\n\n /** Callback before MessageBox closes, and it will prevent MessageBox from closing */\n beforeClose?: (action: Action, instance: MessageBoxState, done: () => void) => void\n\n /** Custom class name for MessageBox */\n customClass?: string\n\n /** Custom inline style for MessageBox */\n customStyle?: CSSProperties\n\n /** MessageBox closing callback if you don't prefer Promise */\n callback?: Callback\n\n /** Text content of cancel button */\n cancelButtonText?: string\n\n /** Text content of confirm button */\n confirmButtonText?: string\n\n /** Custom class name of cancel button */\n cancelButtonClass?: string\n\n /** Custom class name of confirm button */\n confirmButtonClass?: string\n\n /** Whether to align the content in center */\n center?: boolean\n\n /** Whether MessageBox can be drag */\n draggable?: boolean\n\n /** Draggable MessageBox can overflow the viewport */\n overflow?: boolean\n\n /** Content of the MessageBox */\n message?: string | VNode | (() => VNode)\n\n /** Title of the MessageBox */\n title?: string | MessageBoxOptions\n\n /** Message type, used for icon display */\n type?: MessageType\n\n /** Message box type */\n boxType?: MessageBoxType\n\n /** Custom icon component */\n icon?: string | Component\n\n /** Whether message is treated as HTML string */\n dangerouslyUseHTMLString?: boolean\n\n /** Whether to distinguish canceling and closing */\n distinguishCancelAndClose?: boolean\n\n /** Whether to lock body scroll when MessageBox prompts */\n lockScroll?: boolean\n\n /** Whether to show a cancel button */\n showCancelButton?: boolean\n\n /** Whether to show a confirm button */\n showConfirmButton?: boolean\n\n /** Whether to show a close button */\n showClose?: boolean\n\n /** Whether to use round button */\n roundButton?: boolean\n\n /** Whether MessageBox can be closed by clicking the mask */\n closeOnClickModal?: boolean\n\n /** Whether MessageBox can be closed by pressing the ESC */\n closeOnPressEscape?: boolean\n\n /** Whether to close MessageBox when hash changes */\n closeOnHashChange?: boolean\n\n /** Whether to show an input */\n showInput?: boolean\n\n /** Placeholder of input */\n inputPlaceholder?: string\n\n /** Initial value of input */\n inputValue?: string\n\n /** Regexp for the input */\n inputPattern?: RegExp\n\n /** Input Type: text, textArea, password or number */\n inputType?: string\n\n /** Validation function for the input. Should returns a boolean or string. If a string is returned, it will be assigned to inputErrorMessage */\n inputValidator?: MessageBoxInputValidator\n\n /** Error message when validation fails */\n inputErrorMessage?: string\n\n /** Custom size of confirm and cancel buttons */\n buttonSize?: Size\n\n /** Custom element to append the message box to */\n appendTo?: HTMLElement | string\n}\n\nexport type MessageBoxShortcutMethod = ((message: MessageBoxOptions['message'], options?: MessageBoxOptions, appContext?: AppContext | null) => Promise<MessageBoxData>) &\n ((message: MessageBoxOptions['message'], title: MessageBoxOptions['title'], options?: MessageBoxOptions, appContext?: AppContext | null) => Promise<MessageBoxData>)\n\nexport interface IMessageBox {\n _context: AppContext | null\n\n /** Show a message box */\n // (message: string, title?: string, type?: string): Promise<MessageBoxData>\n\n /** Show a message box */\n (options: MessageBoxOptions, appContext?: AppContext | null): Promise<MessageBoxData>\n\n /** Show an alert message box */\n alert: MessageBoxShortcutMethod\n\n /** Show a confirm message box */\n confirm: MessageBoxShortcutMethod\n\n /** Show a prompt message box */\n prompt: MessageBoxShortcutMethod\n\n /** Close current message box */\n close: () => void\n}\n\nexport interface BasicMessageBoxContext {\n name: string\n}\n","<!-- eslint-disable vue/no-v-text-v-html-on-component -->\n<script lang=\"ts\">\nimport type { ComponentPublicInstance } from 'vue'\nimport { computed, defineComponent, nextTick, onBeforeUnmount, onMounted, reactive, ref, toRefs, watch } from 'vue'\nimport { guid, isFunction, isString } from '@maxax/utils'\nimport { NButton, NInput } from 'naive-ui'\nimport { useDraggable, useLockscreen, useSameTarget } from '../../composable'\nimport BasicOverlay from '../basic-overlay'\nimport BasicSvgIcon from '../basic-svg-icon'\nimport { useConfigProvider } from '../config-provider'\nimport type { Action, MessageBoxState } from './interface'\nimport { basicMessageBoxProps } from './interface'\n\nexport default defineComponent({\n components: {\n NButton,\n NInput,\n BasicSvgIcon,\n BasicOverlay\n },\n props: basicMessageBoxProps,\n emits: ['vanish', 'action'],\n setup(props, { emit }) {\n const { locale, zIndex, ns } = useConfigProvider('basic-message-box')\n const { t } = locale\n const { nextZIndex } = zIndex\n\n const visible = ref(false)\n\n const iconMap: Record<MessageBoxState['type'], string> = {\n success: 'ri:checkbox-circle-line',\n error: 'ri:close-circle-line',\n info: 'ri:information-line',\n warning: 'ri:error-warning-line',\n '': ''\n }\n\n const state = reactive<MessageBoxState>({\n autofocus: true,\n beforeClose: null,\n callback: null,\n cancelButtonText: '',\n cancelButtonClass: '',\n confirmButtonText: '',\n confirmButtonClass: '',\n customClass: '',\n customStyle: {} as any,\n dangerouslyUseHTMLString: false,\n distinguishCancelAndClose: false,\n icon: '',\n inputPattern: null,\n inputPlaceholder: '',\n inputType: 'text',\n inputValue: '',\n inputValidator: undefined,\n inputErrorMessage: '',\n message: '',\n modalFade: true,\n modalClass: '',\n showCancelButton: false,\n showConfirmButton: true,\n type: '',\n title: undefined,\n showInput: false,\n action: '' as Action,\n confirmButtonLoading: false,\n cancelButtonLoading: false,\n confirmButtonDisabled: false,\n editorErrorMessage: '',\n validateError: false,\n zIndex: nextZIndex()\n })\n\n const typeClass = computed(() => {\n const type = state.type\n return { [ns.bm('icon', type)]: type }\n })\n\n const iconComponent = computed(() => {\n const type = state.type\n return iconMap[type] || ''\n })\n\n const hasMessage = computed(() => Boolean(state.message))\n const rootRef = ref<HTMLElement>()\n const headerRef = ref<HTMLElement>()\n const focusStartRef = ref<HTMLElement>()\n const inputRef = ref<ComponentPublicInstance>()\n const confirmRef = ref<ComponentPublicInstance>()\n\n const confirmButtonClasses = computed(() => state.confirmButtonClass)\n\n const contentId = guid()\n const inputId = guid()\n\n const validate = () => {\n if (props.boxType === 'prompt') {\n const inputPattern = state.inputPattern\n if (state.inputValue && inputPattern && !inputPattern.test(state.inputValue || '')) {\n state.editorErrorMessage = state.inputErrorMessage || t('max.messagebox.error')\n state.validateError = true\n return false\n }\n const inputValidator = state.inputValidator\n if (isFunction(inputValidator)) {\n const validateResult = inputValidator(state.inputValue)\n if (validateResult === false) {\n state.editorErrorMessage = state.inputErrorMessage || t('max.messagebox.error')\n state.validateError = true\n return false\n }\n if (isString(validateResult)) {\n state.editorErrorMessage = validateResult\n state.validateError = true\n return false\n }\n }\n }\n state.editorErrorMessage = ''\n state.validateError = false\n return true\n }\n\n const getInputElement = () => {\n const inputRefs = inputRef.value?.$refs\n return (inputRefs?.input ?? inputRefs?.textarea) as HTMLElement\n }\n\n const handleAction = (action: Action) => {\n if (props.boxType === 'prompt' && action === 'confirm' && !validate()) {\n return\n }\n\n state.action = action\n\n if (state.beforeClose) {\n state.beforeClose?.(action, state, doClose)\n } else {\n doClose()\n }\n }\n\n const handleClose = () => {\n handleAction('close')\n }\n\n const onCloseRequested = () => {\n if (props.closeOnPressEscape) {\n handleClose()\n }\n }\n\n watch(\n () => state.inputValue,\n async val => {\n await nextTick()\n if (props.boxType === 'prompt' && val !== null) {\n validate()\n }\n },\n { immediate: true }\n )\n\n watch(\n () => visible.value,\n val => {\n if (val) {\n if (props.boxType !== 'prompt') {\n if (state.autofocus) {\n focusStartRef.value = confirmRef.value?.$el ?? rootRef.value\n } else {\n focusStartRef.value = rootRef.value\n }\n }\n state.zIndex = nextZIndex()\n }\n if (props.boxType !== 'prompt') return\n if (val) {\n nextTick().then(() => {\n if (inputRef.value && inputRef.value.$el) {\n if (state.autofocus) {\n focusStartRef.value = getInputElement() ?? rootRef.value\n } else {\n focusStartRef.value = rootRef.value\n }\n }\n })\n } else {\n state.editorErrorMessage = ''\n state.validateError = false\n }\n }\n )\n\n const draggable = computed(() => props.draggable)\n const overflow = computed(() => props.overflow)\n\n useDraggable(rootRef, headerRef, draggable, overflow)\n\n onMounted(async () => {\n await nextTick()\n if (props.closeOnHashChange) {\n window.addEventListener('hashchange', doClose)\n }\n })\n\n onBeforeUnmount(() => {\n if (props.closeOnHashChange) {\n window.removeEventListener('hashchange', doClose)\n }\n })\n\n function doClose() {\n if (!visible.value) return\n visible.value = false\n nextTick().then(() => {\n if (state.action) emit('action', state.action)\n })\n }\n\n const handleWrapperClick = () => {\n if (props.closeOnClickModal) {\n handleAction(state.distinguishCancelAndClose ? 'close' : 'cancel')\n }\n }\n\n const overlayEvent = useSameTarget(handleWrapperClick)\n\n const handleInputEnter = (ev: KeyboardEvent | Event) => {\n if (state.inputType !== 'textarea') {\n ev.preventDefault()\n return handleAction('confirm')\n }\n }\n\n if (props.lockScroll) {\n useLockscreen(visible)\n }\n\n return {\n ...toRefs(state),\n ns,\n t,\n overlayEvent,\n visible,\n hasMessage,\n typeClass,\n contentId,\n inputId,\n iconComponent,\n confirmButtonClasses,\n rootRef,\n focusStartRef,\n headerRef,\n inputRef,\n confirmRef,\n doClose, // for outside usage\n handleClose, // for out side usage\n onCloseRequested,\n handleWrapperClick,\n handleInputEnter,\n handleAction\n }\n }\n})\n</script>\n\n<template>\n <transition name=\"fade-in-linear\" @after-leave=\"$emit('vanish')\">\n <BasicOverlay v-show=\"visible\" :z-index=\"zIndex\" :overlay-class=\"[ns.is('message-box'), modalClass]\" :mask=\"modal\">\n <div role=\"dialog\" :aria-label=\"title\" aria-modal=\"true\" :aria-describedby=\"!showInput ? contentId : undefined\" :class=\"`${ns.namespace.value}-overlay-message-box`\" @click=\"overlayEvent.onClick\" @mousedown=\"overlayEvent.onMousedown\" @mouseup=\"overlayEvent.onMouseup\">\n <div ref=\"rootRef\" :class=\"[ns.b(), customClass, ns.is('draggable', draggable), { [ns.m('center')]: center }]\" :style=\"customStyle\" tabindex=\"-1\" @click.stop=\"\">\n <div v-if=\"title !== null && title !== undefined\" ref=\"headerRef\" :class=\"[ns.e('header'), { 'show-close': showClose }]\">\n <div :class=\"ns.e('title')\">\n <BasicSvgIcon v-if=\"iconComponent && center\" :icon=\"iconComponent\" :class=\"[ns.e('status'), typeClass]\" />\n {{ title }}\n </div>\n <button v-if=\"showClose\" type=\"button\" :class=\"ns.e('headerbtn')\" @click=\"handleAction(distinguishCancelAndClose ? 'close' : 'cancel')\" @keydown.prevent.enter=\"handleAction(distinguishCancelAndClose ? 'close' : 'cancel')\">\n <span :class=\"ns.e('close')\">\n <BasicSvgIcon icon=\"ri:close-line\" />\n </span>\n </button>\n </div>\n <div :id=\"contentId\" :class=\"ns.e('content')\">\n <div :class=\"ns.e('container')\">\n <BasicSvgIcon v-if=\"iconComponent && !center && hasMessage\" :icon=\"iconComponent\" :class=\"[ns.e('status'), typeClass]\" />\n <div v-if=\"hasMessage\" :class=\"ns.e('message')\">\n <slot>\n <component :is=\"showInput ? 'label' : 'p'\" v-if=\"!dangerouslyUseHTMLString\" :for=\"showInput ? inputId : undefined\">\n {{ !dangerouslyUseHTMLString ? message : '' }}\n </component>\n <!-- eslint-disable-next-line vue/no-v-text-v-html-on-component vue/no-v-html -->\n <component :is=\"showInput ? 'label' : 'p'\" v-else :for=\"showInput ? inputId : undefined\" v-html=\"message\" />\n </slot>\n </div>\n </div>\n <div v-show=\"showInput\" :class=\"ns.e('input')\">\n <NInput :id=\"inputId\" ref=\"inputRef\" v-model:value=\"inputValue\" :type=\"inputType\" :placeholder=\"inputPlaceholder\" :aria-invalid=\"validateError\" :class=\"{ invalid: validateError }\" @keydown.enter=\"handleInputEnter\" />\n <div :class=\"ns.e('errormsg')\" :style=\"{ visibility: !!editorErrorMessage ? 'visible' : 'hidden' }\">\n {{ editorErrorMessage }}\n </div>\n </div>\n </div>\n <div :class=\"ns.e('btns')\">\n <NButton v-if=\"showCancelButton\" :loading=\"cancelButtonLoading\" :class=\"[cancelButtonClass]\" :round=\"roundButton\" @click=\"handleAction('cancel')\" @keydown.prevent.enter=\"handleAction('cancel')\">\n {{ cancelButtonText || t('max.button.cancel') }}\n </NButton>\n <NButton v-show=\"showConfirmButton\" ref=\"confirmRef\" type=\"primary\" :loading=\"confirmButtonLoading\" :class=\"[confirmButtonClasses]\" :round=\"roundButton\" :disabled=\"confirmButtonDisabled\" @click=\"handleAction('confirm')\" @keydown.prevent.enter=\"handleAction('confirm')\">\n {{ confirmButtonText || t('max.button.confirm') }}\n </NButton>\n </div>\n </div>\n </div>\n </BasicOverlay>\n </transition>\n</template>\n","/* eslint-disable prettier/prettier */\n/* eslint-disable vue/prefer-import-from-vue */\n/* eslint-disable no-redeclare */\nimport type { AppContext, ComponentPublicInstance, VNode } from 'vue'\nimport { createVNode, isVNode, render } from 'vue'\nimport { hasOwn } from '@vue/shared'\nimport { isClient, isElement, isFunction, isObject, isString, isUndefined } from '@maxax/utils'\nimport MessageBoxConstructor from './BasicMessageBox.vue'\nimport type { Action, Callback, IMessageBox, MessageBoxData, MessageBoxOptions, MessageBoxShortcutMethod, MessageBoxState } from './interface'\n\ninterface MessageBoxInstanceOptions {\n options: any\n callback: Callback | undefined\n resolve: (res: any) => void\n reject: (reason?: any) => void\n}\n\nconst messageInstance = new Map<ComponentPublicInstance<{ doClose: () => void }>, MessageBoxInstanceOptions>()\n\nconst getAppendToElement = (props: any): HTMLElement => {\n let appendTo: HTMLElement = document.body\n if (props.appendTo) {\n if (isString(props.appendTo)) {\n appendTo = document.querySelector<HTMLElement>(props.appendTo) as HTMLElement\n }\n if (isElement(props.appendTo)) {\n appendTo = props.appendTo\n }\n\n // should fallback to default value with a warning\n if (!isElement(appendTo)) {\n console.warn('the appendTo option is not an HTMLElement. Falling back to document.body.')\n appendTo = document.body\n }\n }\n return appendTo\n}\n\nconst initInstance = (props: any, container: HTMLElement, appContext: AppContext | null = null) => {\n const vnode = createVNode(MessageBoxConstructor, props, isFunction(props.message) || isVNode(props.message) ? { default: isFunction(props.message) ? props.message : () => props.message } : null)\n vnode.appContext = appContext\n render(vnode, container)\n getAppendToElement(props).appendChild(container.firstElementChild!)\n return vnode.component\n}\n\nconst genContainer = () => {\n return document.createElement('div')\n}\n\nconst showMessage = (options: any, appContext?: AppContext | null) => {\n const container = genContainer()\n // Adding destruct method.\n // when transition leaves emitting `vanish` evt. so that we can do the clean job.\n options.onVanish = () => {\n render(null, container)\n messageInstance.delete(vm) // Remove vm to avoid mem leak.\n }\n\n options.onAction = (action: Action) => {\n const currentMsg = messageInstance.get(vm)!\n let resolve: Action | { value: string; action: Action }\n if (options.showInput) {\n resolve = { value: vm.inputValue, action }\n } else {\n resolve = action\n }\n if (options.callback) {\n options.callback(resolve, instance.proxy)\n } else if (action === 'cancel' || action === 'close') {\n if (options.distinguishCancelAndClose && action !== 'cancel') {\n currentMsg.reject('close')\n } else {\n currentMsg.reject('cancel')\n }\n } else {\n currentMsg.resolve(resolve)\n }\n }\n\n const instance = initInstance(options, container, appContext)!\n\n // This is how we use message box programmatically.\n // Maybe consider releasing a template version?\n // get component instance like v2.\n const vm = instance.proxy as ComponentPublicInstance<\n {\n visible: boolean\n doClose: () => void\n } & MessageBoxState\n >\n\n for (const prop in options) {\n if (hasOwn(options, prop) && !hasOwn(vm.$props, prop)) {\n vm[prop as keyof ComponentPublicInstance] = options[prop]\n }\n }\n\n // change visibility after everything is settled\n vm.visible = true\n return vm\n}\n\nasync function MessageBox(options: MessageBoxOptions, appContext?: AppContext | null): Promise<MessageBoxData>\nfunction MessageBox(options: MessageBoxOptions | string | VNode, appContext: AppContext | null = null): Promise<{ value: string; action: Action } | Action> {\n if (!isClient) return Promise.reject()\n let callback: Callback | undefined\n if (isString(options) || isVNode(options)) {\n options = {\n message: options\n }\n } else {\n callback = options.callback\n }\n\n return new Promise((resolve, reject) => {\n const vm = showMessage(options, appContext ?? (MessageBox as IMessageBox)._context)\n // collect this vm in order to handle upcoming events.\n messageInstance.set(vm, {\n options,\n callback,\n resolve,\n reject\n })\n })\n}\n\nconst MESSAGE_BOX_VARIANTS = ['alert', 'confirm', 'prompt'] as const\nconst MESSAGE_BOX_DEFAULT_OPTS: Record<(typeof MESSAGE_BOX_VARIANTS)[number], Partial<MessageBoxOptions>> = {\n alert: { closeOnPressEscape: false, closeOnClickModal: false },\n confirm: { showCancelButton: true },\n prompt: { showCancelButton: true, showInput: true }\n}\n\nMESSAGE_BOX_VARIANTS.forEach(boxType => {\n ; (MessageBox as IMessageBox)[boxType] = messageBoxFactory(boxType) as MessageBoxShortcutMethod\n})\n\nfunction messageBoxFactory(boxType: (typeof MESSAGE_BOX_VARIANTS)[number]) {\n return (message: string | VNode, title: string | MessageBoxOptions, options?: MessageBoxOptions, appContext?: AppContext | null) => {\n let titleOrOpts = ''\n if (isObject(title)) {\n options = title as MessageBoxOptions\n titleOrOpts = ''\n } else if (isUndefined(title)) {\n titleOrOpts = ''\n } else {\n titleOrOpts = title as string\n }\n\n return MessageBox(\n {\n title: titleOrOpts,\n message,\n type: '',\n ...MESSAGE_BOX_DEFAULT_OPTS[boxType],\n ...options,\n boxType\n },\n appContext\n )\n }\n}\n\nMessageBox.close = () => {\n messageInstance.forEach((_, vm) => {\n vm.doClose()\n })\n\n messageInstance.clear()\n}\n\nMessageBox._context = null\n\nexport default MessageBox as IMessageBox\n","import type { SFCWithInstall } from '@maxax/utils'\nimport MessageBox from './messageBox'\n\nconst $MessageBox = MessageBox as SFCWithInstall<typeof MessageBox>\n\nexport default $MessageBox\nexport const XBasicMessageBox = $MessageBox\n\nexport * from './interface'\n","<script lang=\"tsx\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent, ref, unref } from 'vue'\nimport type { Recordable } from '@maxax/types'\nimport { getSlot, isBoolean, isFunction } from '@maxax/utils'\nimport { NButton } from 'naive-ui'\nimport { useNamespace } from '../../../composable'\nimport type { BasicButtonGroupProps, BasicButtonGroupSchema, ButtonGroupActionType } from '../interface'\n\nexport default defineComponent({\n name: 'ButtonGroupItem',\n props: {\n schema: {\n type: Object as PropType<BasicButtonGroupSchema>,\n default: () => ({})\n },\n buttonGroupActionType: {\n type: Object as PropType<ButtonGroupActionType>,\n default: () => ({})\n },\n buttonGroupProps: {\n type: Object as PropType<BasicButtonGroupProps>,\n default: () => ({})\n }\n },\n emits: ['click'],\n setup(props, { slots, emit }) {\n const { b, e } = useNamespace('basic-button-group-item')\n\n const $loading = ref(false)\n\n const getValues = computed(() => {\n const { schema } = props\n const { mergeDynamicData } = props.buttonGroupProps\n return {\n field: schema.field,\n values: {\n ...mergeDynamicData\n } as Recordable<any>,\n schema\n }\n })\n\n const getComponentsProps = computed(() => {\n const { schema, buttonGroupActionType } = props\n let { componentProps = {} } = schema\n if (isFunction(componentProps)) {\n componentProps = componentProps({ schema, buttonGroupActionType }) ?? {}\n }\n return componentProps as Recordable<any>\n })\n\n const getDisable = computed(() => {\n const { disabled: globDisabled } = props.buttonGroupProps\n const { dynamicDisabled } = props.schema\n const { disabled: itemDisabled = false } = unref(getComponentsProps)\n let disabled = Boolean(globDisabled) || itemDisabled\n if (isBoolean(dynamicDisabled)) {\n disabled = dynamicDisabled\n }\n if (isFunction(dynamicDisabled)) {\n disabled = dynamicDisabled(unref(getValues))\n }\n return disabled\n })\n\n const getLoading = computed(() => {\n const { loading: itemLoading = false } = unref(getComponentsProps)\n const { dynamicLoading } = props.schema\n let loading = itemLoading\n if (isBoolean(dynamicLoading)) {\n loading = dynamicLoading\n }\n if (isFunction(dynamicLoading)) {\n loading = dynamicLoading(unref(getValues))\n }\n return loading || $loading.value\n })\n\n function getShow(): { isShow: boolean; isIfShow: boolean } {\n const { show, ifShow } = props.schema\n\n let isShow = true\n let isIfShow = true\n\n if (isBoolean(show)) {\n isShow = show\n }\n if (isBoolean(ifShow)) {\n isIfShow = ifShow\n }\n if (isFunction(show)) {\n isShow = show(unref(getValues))\n }\n if (isFunction(ifShow)) {\n isIfShow = ifShow(unref(getValues))\n }\n return { isShow, isIfShow }\n }\n\n function renderButtonLabel() {\n const { label } = props.schema\n const getLabel = isFunction(label) ? label(unref(getValues)) : label\n return <span>{getLabel}</span>\n }\n\n function renderComponent() {\n const { renderComponentContent } = props.schema\n\n const { size } = props.buttonGroupProps\n\n const propsData: Recordable<any> = {\n clearable: true,\n size,\n type: 'primary',\n ...unref(getComponentsProps),\n disabled: unref(getDisable),\n loading: unref(getLoading)\n }\n\n const on = {\n onClick: (ev: Event) => {\n // 按钮点击校验\n if (!props.schema.validate) {\n emit('click', { ev, values: unref(getValues) })\n return\n }\n $loading.value = true\n\n const interceptor = props.schema.validate({ field: props.schema.field, schema: props.schema })\n if (interceptor instanceof Promise) {\n interceptor\n .then(res => {\n if (res) {\n emit('click', { ev, values: unref(getValues) })\n }\n })\n .finally(() => {\n $loading.value = false\n })\n } else {\n if (interceptor) {\n emit('click', { ev, values: unref(getValues) })\n }\n $loading.value = false\n }\n }\n }\n\n const compAttr: Recordable<any> = {\n ...propsData,\n ...on\n }\n\n if (!renderComponentContent) {\n return <NButton {...compAttr}>{renderButtonLabel()}</NButton>\n }\n\n const compSlot = isFunction(renderComponentContent)\n ? {\n ...renderComponentContent(unref(getValues), {\n disabled: unref(getDisable)\n })\n }\n : {\n default: () => renderComponentContent\n }\n\n return <NButton {...compAttr}>{compSlot}</NButton>\n }\n\n function renderItem() {\n const { slot, render, suffix, prefix } = props.schema\n const opts = { disabled: unref(getDisable) }\n\n const showSuffix = Boolean(suffix)\n const getSuffix = isFunction(suffix) ? suffix(unref(getValues)) : suffix\n\n const showPrefix = Boolean(prefix)\n const getPrefix = isFunction(prefix) ? prefix(unref(getValues)) : prefix\n\n const getContent = () => {\n return (\n <div class={e('content')}>\n {showPrefix && <span class={e('content-prefix')}>{getPrefix}</span>}\n <div class={e('content-inner')}>{slot ? getSlot(slots, slot, unref(getValues), opts) : render ? render(unref(getValues), opts) : renderComponent()}</div>\n {showSuffix && <span class={e('content-suffix')}>{getSuffix}</span>}\n </div>\n )\n }\n\n return getContent()\n }\n\n return () => {\n const { colSlot, renderColContent } = props.schema\n\n const { isIfShow, isShow } = getShow()\n const values = unref(getValues)\n const opts = { disabled: unref(getDisable) }\n\n const getContent = () => {\n return colSlot ? getSlot(slots, colSlot, values, opts) : renderColContent ? renderColContent(values, opts) : renderItem()\n }\n\n return (\n isIfShow && (\n <div v-show={isShow} class={b()}>\n {getContent()}\n </div>\n )\n )\n }\n }\n})\n</script>\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { BasicButtonGroupContext } from './interface'\n\nexport const basicButtonGroupKey: InjectionKey<BasicButtonGroupContext> = Symbol('basic-button-group')\n\nexport const createBasicButtonGroupContext = (props: BasicButtonGroupContext) => {\n return provide(basicButtonGroupKey, props)\n}\n\nexport const useBasicButtonGroupContext = () => {\n return inject(basicButtonGroupKey) as BasicButtonGroupContext\n}\n","import type { Ref } from 'vue'\nimport { computed, unref } from 'vue'\nimport { useNamespace } from '../../../composable'\nimport type { BasicButtonGroupProps } from '../types'\n\nexport function useButtonGroupClass(propsRef: Ref<BasicButtonGroupProps>) {\n const { b, is } = useNamespace('basic-button-group')\n\n const getWrapperClass = computed(() => {\n return [b()]\n })\n\n const getButtonGroupClass = computed(() => {\n return { [is('compact')]: unref(propsRef).compact }\n })\n\n return { getWrapperClass, getButtonGroupClass }\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { unref } from 'vue'\nimport { deepMerge, isArray, isObject, isString } from '@maxax/utils'\nimport { cloneDeep, uniqBy } from 'lodash-es'\nimport type { BasicButtonGroupEmitType, BasicButtonGroupProps, BasicButtonGroupSchema, ButtonGroupActionType } from '../types'\n\ninterface UseButtonGroupEventsContext {\n emit: BasicButtonGroupEmitType\n getProps: ComputedRef<BasicButtonGroupProps>\n getSchema: ComputedRef<BasicButtonGroupSchema[]>\n schemaRef: Ref<BasicButtonGroupSchema[]>\n buttonGroupElRef: Ref<ButtonGroupActionType>\n}\n\nexport function useButtonGroupEvents({ getSchema, schemaRef }: UseButtonGroupEventsContext): ButtonGroupActionType {\n /**\n * @description: Delete based on field name\n */\n async function removeSchemaByField(fields: string | string[]): Promise<void> {\n const schemaList: BasicButtonGroupSchema[] = cloneDeep(unref(getSchema))\n if (!fields) {\n return\n }\n\n let fieldList = (isString(fields) ? [fields] : fields) as string[]\n if (isString(fields)) {\n fieldList = [fields as string]\n }\n for (const field of fieldList) {\n $removeSchemaByField(field, schemaList)\n }\n schemaRef.value = schemaList\n }\n\n /**\n * @description: Delete based on field name\n */\n function $removeSchemaByField(field: string, schemaList: BasicButtonGroupSchema[]): void {\n if (isString(field)) {\n const index = schemaList.findIndex(schema => schema.field === field)\n if (index !== -1) {\n schemaList.splice(index, 1)\n }\n }\n }\n\n /**\n * @description: Insert after a certain field, if not insert the last\n */\n async function appendSchemaByField(schema: BasicButtonGroupSchema | BasicButtonGroupSchema[], prefixField?: string, first = false) {\n const schemaList: BasicButtonGroupSchema[] = cloneDeep(unref(getSchema))\n const addSchemaIds: string[] = Array.isArray(schema) ? schema.map(item => item.field) : [schema.field]\n if (schemaList.find(item => addSchemaIds.includes(item.field))) {\n throw new Error('[error]:There are schemas that have already been added')\n }\n const index = schemaList.findIndex(item => item.field === prefixField)\n const $schemaList = isObject(schema) ? [schema as BasicButtonGroupSchema] : (schema as BasicButtonGroupSchema[])\n if (!prefixField || index === -1 || first) {\n first ? schemaList.unshift(...$schemaList) : schemaList.push(...$schemaList)\n } else if (index !== -1) {\n schemaList.splice(index + 1, 0, ...$schemaList)\n }\n schemaRef.value = schemaList\n }\n\n async function resetSchema(data: Partial<BasicButtonGroupSchema> | Array<Partial<BasicButtonGroupSchema>>) {\n let updateData: Array<Partial<BasicButtonGroupSchema>> = []\n if (isObject(data)) {\n updateData.push(data as BasicButtonGroupSchema)\n }\n if (isArray(data)) {\n updateData = [...data]\n }\n\n const hasField = updateData.every(item => Reflect.has(item, 'field') && item.field)\n\n if (!hasField) {\n throw new Error('[error]:All children of the buttonGroup Schema array that need to be updated must contain the \"field\" field')\n }\n schemaRef.value = updateData as BasicButtonGroupSchema[]\n }\n\n async function updateSchema(data: Partial<BasicButtonGroupSchema> | Array<Partial<BasicButtonGroupSchema>>) {\n let updateData: Array<Partial<BasicButtonGroupSchema>> = []\n if (isObject(data)) {\n updateData.push(data as BasicButtonGroupSchema)\n }\n if (isArray(data)) {\n updateData = [...data]\n }\n\n const hasField = updateData.every(item => Reflect.has(item, 'field') && item.field)\n\n if (!hasField) {\n throw new Error('[error]:All children of the buttonGroup Schema array that need to be updated must contain the \"field\" field')\n }\n const schema: BasicButtonGroupSchema[] = []\n const updatedSchema: BasicButtonGroupSchema[] = []\n unref(getSchema).forEach(val => {\n const updatedItem = updateData.find(item => val.field === item.field)\n\n if (updatedItem) {\n const newSchema = deepMerge(val, updatedItem)\n updatedSchema.push(newSchema as BasicButtonGroupSchema)\n schema.push(newSchema as BasicButtonGroupSchema)\n } else {\n schema.push(val)\n }\n })\n schemaRef.value = uniqBy(schema, 'field')\n }\n\n async function setSchema(data: BasicButtonGroupSchema[]) {\n schemaRef.value = data\n }\n\n return {\n updateSchema,\n resetSchema,\n removeSchemaByField,\n appendSchemaByField,\n setSchema\n }\n}\n","import type { Ref } from 'vue'\nimport { computed, unref } from 'vue'\nimport { cloneDeep } from '@maxax/utils'\nimport type { BasicButtonGroupProps, BasicButtonGroupSchema } from '../types'\n\ninterface UseButtonGroupSchemaContext {\n getProps: Ref<BasicButtonGroupProps>\n schemaRef: Ref<BasicButtonGroupSchema[] | null>\n}\n\nexport function useButtonGroupSchema({ getProps, schemaRef }: UseButtonGroupSchemaContext) {\n const getSchema = computed((): BasicButtonGroupSchema[] => {\n const schemas: BasicButtonGroupSchema[] = cloneDeep(unref(schemaRef) || unref(getProps).schemas || [])\n return schemas as BasicButtonGroupSchema[]\n })\n return { getSchema }\n}\n","<script lang=\"ts\" setup>\nimport type { Ref } from 'vue'\nimport { computed, ref, unref, useAttrs, useSlots, watch } from 'vue'\nimport type { Nullable } from '@maxax/types'\nimport { useLocale } from '../../composable'\nimport { XBasicMessageBox } from '../basic-message-box'\nimport ButtonGroupItem from './components/ButtonGroupItem.vue'\nimport { createBasicButtonGroupContext } from './context'\nimport { useButtonGroupClass, useButtonGroupEvents, useButtonGroupSchema } from './hooks'\nimport type { BasicButtonGroupEmitType, BasicButtonGroupProps, BasicButtonGroupSchema, ButtonGroupActionType } from './interface'\n\nconst props = withDefaults(defineProps<BasicButtonGroupProps>(), {\n schemas: () => []\n})\n\nconst emit = defineEmits<BasicButtonGroupEmitType>()\n\nconst { t } = useLocale()\n\nconst attrs = useAttrs()\nconst schemaRef = ref<Nullable<BasicButtonGroupSchema[]>>(null)\nconst buttonGroupElRef = ref<ButtonGroupActionType | null>(null)\n\nconst isInitedDefaultRef = ref(false)\nconst slots = useSlots() as any\n\nconst getProps = computed(() => {\n return { ...props, requireMarkPlacement: 'left' } as BasicButtonGroupProps\n})\n\nconst { getWrapperClass } = useButtonGroupClass(getProps)\nconst { getSchema } = useButtonGroupSchema({ getProps, schemaRef: schemaRef as Ref<BasicButtonGroupSchema[]> })\nconst { removeSchemaByField, appendSchemaByField, resetSchema, updateSchema, setSchema } = useButtonGroupEvents({\n emit,\n getProps,\n getSchema,\n schemaRef: schemaRef as Ref<BasicButtonGroupSchema[]>,\n buttonGroupElRef: buttonGroupElRef as Ref<ButtonGroupActionType>\n})\n\nconst getBindValue = computed(() => ({ ...attrs, ...unref(getProps) }) as BasicButtonGroupProps)\n\nwatch(\n () => props.schemas,\n schemas => {\n resetSchema(schemas ?? [])\n }\n)\n\nwatch(\n () => getSchema.value,\n schema => {\n if (unref(isInitedDefaultRef)) {\n return\n }\n if (schema?.length) {\n isInitedDefaultRef.value = true\n }\n },\n { deep: true, immediate: true }\n)\n\nconst buttonGroupActionType = {\n removeSchemaByField,\n appendSchemaByField,\n resetSchema,\n updateSchema,\n setSchema\n}\n\ncreateBasicButtonGroupContext({ name: 'basic-button-group' })\n\nfunction handleClick({ values }: any) {\n const { field, schema } = values\n if (field === 'buttonReturn') {\n window.history.back()\n return\n }\n if (schema.message) {\n XBasicMessageBox.confirm(schema.message, t('max.basic.warning'), schema.messageBoxProps || {})\n .then(() => {\n schema.confirm?.({ field, schema, action: 'confirm' })\n })\n .catch(() => {\n schema.cancel?.({ field, schema, action: 'cancel' })\n })\n } else {\n schema.confirm?.({ field, schema, action: 'confirm' })\n }\n}\n\ndefineExpose({\n ...buttonGroupActionType\n})\n</script>\n\n<template>\n <div :class=\"getWrapperClass\" v-bind=\"getBindValue\">\n <template v-for=\"schema in getSchema\" :key=\"schema.field\">\n <ButtonGroupItem :schema=\"schema\" :button-group-action-type=\"buttonGroupActionType\" :button-group-props=\"getProps\" @click=\"handleClick\">\n <template v-for=\"item in Object.keys(slots)\" #[item]=\"data\">\n <slot :name=\"item\" v-bind=\"data || {}\" />\n </template>\n </ButtonGroupItem>\n </template>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicButtonGroup from './BasicButtonGroup.vue'\n\nexport const XBasicButtonGroup: SFCWithInstall<typeof BasicButtonGroup> = withInstall(BasicButtonGroup)\nexport type BasicButtonGroupInstance = InstanceType<typeof BasicButtonGroup>\n\nexport default XBasicButtonGroup\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { computed, ref, toRef } from 'vue'\nimport { useMergedState } from '@maxax/hooks'\nimport { isString } from '@maxax/utils'\nimport { useNamespace } from '../../composable'\nimport XBasicSvgIcon from '../basic-svg-icon/BasicSvgIcon.vue'\nimport type { BasicTextProps } from './interface'\n\nconst props = withDefaults(defineProps<BasicTextProps>(), {\n icon: '',\n iconClass: '',\n iconStyle: ''\n})\n\nconst { b, m, is } = useNamespace('basic-text')\n\nconst uncontrolledValueRef = ref(props.defaultValue)\nconst controlledValueRef = toRef(props, 'value')\nconst mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef)\n\nconst basicTextClass = computed(() => {\n return [\n b(),\n {\n flex: props.icon,\n 'items-center': props.icon,\n 'gap-2': props.icon,\n [m(props.size)]: props.size || 'small',\n [m(props.type)]: props.type || 'default',\n [is('weight')]: props.weight || false,\n [is('tag')]: props.tag || false\n }\n ]\n})\n</script>\n\n<template>\n <span :class=\"basicTextClass\" :title=\"isString(mergedValueRef) ? mergedValueRef : undefined\">\n <XBasicSvgIcon v-if=\"icon\" :icon=\"icon\" :class=\"iconClass\" :style=\"iconStyle\" />\n <slot>{{ mergedValueRef }}</slot>\n </span>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicText from './BasicText.vue'\n\nexport const XBasicText: SFCWithInstall<typeof BasicText> = withInstall(BasicText)\nexport type BasicTextInstance = InstanceType<typeof BasicText>\n\nexport default XBasicText\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { useAttrs, useSlots } from 'vue'\nimport { NCard } from 'naive-ui'\nimport { useNamespace } from '../../composable'\nimport { XBasicText } from '../basic-text'\nimport type { BasicCardProps } from './interface'\n\nconst props = defineProps<BasicCardProps>()\n\nconst { b } = useNamespace('basic-card')\n\nconst slots = useSlots()\n\nconst attrs = useAttrs()\n</script>\n\n<template>\n <NCard :class=\"b()\" v-bind=\"attrs\">\n <template v-for=\"item in Object.keys(slots)\" :key=\"String(item)\" #[item]=\"data\">\n <slot :name=\"item\" v-bind=\"data || {}\" />\n </template>\n <template #header>\n <XBasicText :icon=\"props.icon\">{{ props.title }}</XBasicText>\n </template>\n </NCard>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicCard from './BasicCard.vue'\n\nexport const XBasicCard: SFCWithInstall<typeof BasicCard> = withInstall(BasicCard)\nexport type BasicCardInstance = InstanceType<typeof BasicCard>\n\nexport default XBasicCard\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { computed, ref, toRef, unref, watch } from 'vue'\nimport { useMergedState } from '@maxax/hooks'\nimport type { Recordable } from '@maxax/types'\nimport { call, isFunction } from '@maxax/utils'\nimport { get, merge } from 'lodash-es'\nimport type { CascaderOption } from 'naive-ui'\nimport { NCascader } from 'naive-ui'\nimport { useNamespace } from '../../composable'\nimport type { BasicCascaderOnUpdateValueImpl, BasicCascaderProps, BasicCascaderValue } from './interface'\n\ndefineOptions({\n inheritAttrs: false\n})\n\nconst props = withDefaults(defineProps<BasicCascaderProps>(), {\n options: () => [],\n immediate: true,\n fetchSetting: () => ({ listField: 'resultList' })\n})\n\nconst { b } = useNamespace('basic-cascader')\n\nconst loading = ref(false)\nconst dataSourceRef = ref<CascaderOption[]>([])\nconst rawDataSourceRef = ref<Recordable>({})\nconst searchInfoRef = ref<Recordable>({})\n\nconst uncontrolledValueRef = ref(props.defaultValue)\nconst controlledValueRef = toRef(props, 'value')\nconst mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef)\n\nconst getOptions = computed(() => {\n const data = unref(dataSourceRef)\n return data.length > 0 ? data : props.options\n})\n\nwatch(\n () => props.searchInfo,\n () => {\n fetch()\n },\n { deep: true, immediate: props.immediate }\n)\n\nasync function fetch(opt?: Recordable) {\n const { api, dynamicApi, searchInfo, fetchSetting, beforeFetch, afterFetch, handleSearchInfoFn } = props\n if ((!api && !dynamicApi) || loading.value) return\n\n try {\n loading.value = true\n const { listField } = { listField: 'resultList', ...fetchSetting }\n\n const searchInfoParams = handleSearchInfoFn ? handleSearchInfoFn() : {}\n\n let params = merge(searchInfoParams, searchInfo, opt ?? {})\n\n if (beforeFetch && isFunction(beforeFetch)) {\n params = (await beforeFetch(params)) || params\n }\n\n searchInfoRef.value = params\n\n const apiFn = api || dynamicApi?.(params)\n\n const res = await apiFn?.(params)\n\n rawDataSourceRef.value = res.data\n\n const isArrayResult = Array.isArray(res.data)\n\n let resultItems: Recordable[] = isArrayResult ? res.data : get(res.data, listField)\n\n if (afterFetch && isFunction(afterFetch)) {\n resultItems = (await afterFetch(resultItems)) || resultItems\n }\n\n dataSourceRef.value = resultItems\n } catch (error) {\n console.error(error)\n } finally {\n loading.value = false\n }\n}\n\nconst handleChange = (value: BasicCascaderValue | null, option: CascaderOption | null | Array<CascaderOption | null>, path: CascaderOption[] | Array<CascaderOption[] | null> | null) => {\n if (props.disabled) return\n const { onChange, onUpdateValue, 'onUpdate:value': _onUpdateValue } = props\n if (onChange) call(onChange as BasicCascaderOnUpdateValueImpl, value, option, path)\n if (onUpdateValue) call(onUpdateValue as BasicCascaderOnUpdateValueImpl, value, option, path)\n if (_onUpdateValue) call(_onUpdateValue as BasicCascaderOnUpdateValueImpl, value, option, path)\n uncontrolledValueRef.value = value\n}\n\nfunction handleUpdateValue(value: BasicCascaderValue | null, option: CascaderOption | null | Array<CascaderOption | null>, path: CascaderOption[] | Array<CascaderOption[] | null> | null) {\n handleChange(value, option, path)\n}\n\nasync function reload(opt?: Recordable) {\n return await fetch(opt)\n}\n\nfunction getSearchInfo<T = Recordable>() {\n return searchInfoRef.value as T\n}\n\n// onMounted(() => {\n// useTimeoutFn(() => {\n// unref(props).immediate && fetch()\n// }, 16)\n// })\n\ndefineExpose({\n reload,\n getSearchInfo\n})\n</script>\n\n<template>\n <div :class=\"b()\" />\n <NCascader v-bind=\"$attrs\" :value=\"mergedValueRef\" :options=\"getOptions\" :class=\"b()\" :loading=\"loading\" @update:value=\"handleUpdateValue\" />\n</template>\n","import type { Fn, Recordable } from '@maxax/types'\nimport type { CascaderOption, CascaderProps } from 'naive-ui'\n\nexport const basicCascaderProps = {} as const\n\ntype ValueAtom = string | number\nexport type BasicCascaderValue = ValueAtom | string[] | number[] | ValueAtom[]\n\nexport type BasicCascaderOnUpdateValue = (\n value: string & number & string[] & number[] & Array<string | number> & (string | null) & (number | null) & (string[] | null) & (number[] | null) & (Array<string | number> | null),\n option: null & CascaderOption & CascaderOption[] & Array<CascaderOption | null>,\n path: null & CascaderOption[] & Array<CascaderOption[] | null>\n) => void\n\nexport type BasicCascaderOnUpdateValueImpl = (value: BasicCascaderValue | null, option: CascaderOption | null | Array<CascaderOption | null>, path: Array<CascaderOption[] | null> | CascaderOption[] | null) => void\n\nexport interface BasicCascaderFetchSetting {\n // 请求结果列表字段 支持 a.b.c\n listField: string\n}\n\nexport interface BasicCascaderProps extends /* @vue-ignore */ Omit<CascaderProps, 'options' | 'value' | 'defaultValue'> {\n defaultValue?: BasicCascaderValue | null\n value?: BasicCascaderValue | null\n options?: CascaderOption[]\n disabled?: boolean\n // 立即请求接口\n immediate?: boolean\n // 接口请求对象\n api?: (...arg: any) => Promise<any>\n // 动态请求\n dynamicApi?: (params?: Recordable) => (...arg: any) => Promise<any>\n // 请求之前处理参数\n beforeFetch?: Fn\n // 自定义处理接口返回参数\n afterFetch?: Fn\n // 查询条件请求之前处理\n handleSearchInfoFn?: Fn\n // 额外的请求参数\n searchInfo?: Recordable\n // 请求接口配置\n fetchSetting?: Partial<BasicCascaderFetchSetting>\n}\n\nexport interface BasicCascaderContext {\n name: string\n}\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicCascader from './BasicCascader.vue'\n\nexport const XBasicCascader: SFCWithInstall<typeof BasicCascader> = withInstall(BasicCascader)\nexport type BasicCascaderInstance = InstanceType<typeof BasicCascader>\n\nexport default XBasicCascader\n\nexport * from './interface'\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { BasicCheckboxGroupContext } from './interface'\n\nexport const basicCheckboxGroupKey: InjectionKey<BasicCheckboxGroupContext> = Symbol('basic-checkbox-group')\n\nexport const createBasicCheckboxGroupContext = (props: BasicCheckboxGroupContext) => {\n return provide(basicCheckboxGroupKey, props)\n}\n\nexport const useBasicCheckboxGroupContext = () => {\n return inject(basicCheckboxGroupKey) as BasicCheckboxGroupContext\n}\n","import { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'IconCheck',\n render() {\n return (\n <svg aria-hidden='true' focusable='false' viewBox='0 0 1024 1024' width='200' height='200' fill='currentColor'>\n <path\n d='M877.44815445 206.10060629a64.72691371 64.72691371 0 0 0-95.14856334 4.01306852L380.73381888 685.46812814 235.22771741 533.48933518a64.72691371 64.72691371 0 0 0-92.43003222-1.03563036l-45.82665557 45.82665443a64.72691371 64.72691371 0 0 0-0.90617629 90.61767965l239.61903446 250.10479331a64.72691371 64.72691371 0 0 0 71.19960405 15.14609778 64.33855261 64.33855261 0 0 0 35.08198741-21.23042702l36.24707186-42.71976334 40.5190474-40.77795556-3.36579926-3.49525333 411.40426297-486.74638962a64.72691371 64.72691371 0 0 0-3.88361443-87.64024149l-45.3088404-45.43829334z'\n p-id='840'\n />\n </svg>\n )\n }\n})\n","<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\nimport { useNamespace } from '../../composable'\n\nexport default defineComponent({\n name: 'IconHover',\n props: {\n disabled: {\n type: Boolean,\n default: false\n }\n },\n setup(props) {\n const { b } = useNamespace('icon-hover')\n\n const prefixCls = computed(() => [\n b(),\n {\n [`${b()}-disabled`]: props.disabled\n }\n ])\n\n return {\n prefixCls\n }\n }\n})\n</script>\n\n<template>\n <span :class=\"prefixCls\">\n <slot />\n </span>\n</template>\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { RenderContent } from '../../types'\n\nexport interface BasicCheckboxOption {\n /**\n * @zh 文案\n * @en label content\n */\n label?: RenderContent\n /**\n * @zh 选项的 `value`\n * @en The `value` of the option\n */\n value: string | number\n /**\n * @zh 是否禁用\n * @en Whether to disable\n */\n disabled?: boolean\n /**\n * @zh 是否为半选状态\n * @en Whether it is half-selected\n */\n indeterminate?: boolean\n}\n\nexport const basicCheckboxProps = {\n /**\n * @zh 绑定值\n * @en Value\n * @vModel\n */\n modelValue: {\n type: [Boolean, Array] as PropType<boolean | Array<string | number | boolean>>,\n default: undefined\n },\n /**\n * @zh 默认是否选中(非受控状态)\n * @en Whether checked by default (uncontrolled state)\n */\n defaultChecked: {\n type: Boolean,\n default: false\n },\n /**\n * @zh 选项的 `value`\n * @en The `value` of the option\n */\n value: {\n type: [String, Number, Boolean]\n },\n /**\n * @zh 是否禁用\n * @en Whether to disable\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * @zh 是否为半选状态\n * @en Whether it is half-selected\n */\n indeterminate: {\n type: Boolean,\n default: false\n },\n // Private\n uninjectGroupContext: {\n type: Boolean,\n default: false\n }\n}\n\nexport type BasicCheckboxProps = ExtractPropTypes<typeof basicCheckboxProps>\n\nexport interface BasicCheckboxContext {\n name: string\n}\n","import { computed, defineComponent, inject, nextTick, ref, toRefs, watch } from 'vue'\nimport { isArray, isNull, isUndefined } from '@maxax/utils'\nimport { useNamespace } from '../../composable'\nimport { basicCheckboxGroupKey } from '../basic-checkbox-group/context'\nimport IconCheck from './icon-check'\nimport IconHover from './icon-hover.vue'\nimport { basicCheckboxProps } from './interface'\n\nexport default defineComponent({\n name: 'XBasicCheckbox',\n components: {\n IconCheck,\n IconHover\n },\n props: basicCheckboxProps,\n emits: {\n 'update:modelValue': (_value: boolean | Array<string | number | boolean>) => true,\n /**\n * @zh 值改变时触发\n * @en Trigger when the value changes\n * @param { boolean | (string | number | boolean)[] } _value\n * @param {Event} _ev\n */\n change: (_value: boolean | Array<string | number | boolean>, _ev: Event) => true\n },\n setup(props, { emit, slots }) {\n const { b, is, e } = useNamespace('basic-checkbox')\n\n const { disabled, modelValue } = toRefs(props)\n const checkboxRef = ref<HTMLInputElement>()\n const checkboxGroupCtx = !props.uninjectGroupContext ? inject(basicCheckboxGroupKey, undefined) : undefined\n const isGroup = checkboxGroupCtx?.name === 'XBasicCheckboxGroup'\n\n const $checked = ref(props.defaultChecked)\n const computedValue = computed(() => (isGroup ? checkboxGroupCtx?.computedValue : (props.modelValue ?? $checked.value)))\n const computedChecked = computed<boolean>(() => {\n return isArray(computedValue.value) ? computedValue.value.includes(props.value ?? true) : computedValue.value\n })\n const mergedDisabled = computed(() => checkboxGroupCtx?.disabled || disabled.value || (!computedChecked.value && checkboxGroupCtx?.isMaxed))\n\n const handleChange = (ev: Event) => {\n const { checked } = ev.target as HTMLInputElement\n\n let newValue: boolean | Array<string | number | boolean> = checked\n if (isArray(computedValue.value)) {\n const set = new Set(computedValue.value)\n if (checked) {\n set.add(props.value ?? true)\n } else {\n set.delete(props.value ?? true)\n }\n newValue = Array.from(set)\n }\n\n $checked.value = checked\n\n if (isGroup && isArray(newValue)) {\n checkboxGroupCtx?.handleChange(newValue, ev)\n } else {\n emit('update:modelValue', newValue)\n emit('change', newValue, ev)\n }\n\n nextTick(() => {\n if (checkboxRef.value && checkboxRef.value.checked !== computedChecked.value) {\n checkboxRef.value.checked = computedChecked.value\n }\n })\n }\n\n const cls = computed(() => [\n b(),\n {\n [is('checked')]: computedChecked.value,\n [is('indeterminate')]: props.indeterminate,\n [is('disabled')]: mergedDisabled.value\n }\n ])\n\n const handleClick = (ev: Event) => {\n ev.stopPropagation()\n }\n\n watch(modelValue, value => {\n if (isUndefined(value) || isNull(value)) {\n $checked.value = false\n }\n })\n\n watch(computedValue, value => {\n let checked\n if (isArray(value)) {\n checked = value.includes(props.value ?? true)\n } else {\n checked = value\n }\n if ($checked.value !== checked) {\n $checked.value = checked\n }\n if (checkboxRef.value && checkboxRef.value.checked !== checked) {\n checkboxRef.value.checked = checked\n }\n })\n\n const labelHoverRender = () => {\n return (\n <IconHover class={e('icon-hover')} disabled={mergedDisabled.value || computedChecked.value}>\n <div class={e('icon')}>{computedChecked.value && <IconCheck class={e('icon-check')} />}</div>\n </IconHover>\n )\n }\n\n return () => (\n <label aria-disabled={mergedDisabled.value} class={cls.value}>\n <input ref={checkboxRef} type='checkbox' checked={computedChecked.value} value={props.value} class={e('target')} disabled={mergedDisabled.value} onClick={handleClick} onChange={handleChange} />\n {(slots.checkbox ?? checkboxGroupCtx?.slots?.checkbox)?.({\n checked: computedChecked.value,\n disabled: mergedDisabled.value\n }) ?? labelHoverRender()}\n {slots.default && <span class={e('label')}>{slots.default()}</span>}\n </label>\n )\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicCheckbox from './BasicCheckbox'\n\nexport const XBasicCheckbox: SFCWithInstall<typeof BasicCheckbox> = withInstall(BasicCheckbox)\nexport type BasicCheckboxInstance = InstanceType<typeof BasicCheckbox>\n\nexport default XBasicCheckbox\n\nexport * from './interface'\n","import type { ExtractPropTypes, PropType, Slots } from 'vue'\nimport type { BasicCheckboxOption } from '../basic-checkbox/interface'\n\nexport const basicCheckboxGroupProps = {\n /**\n * @zh 绑定值\n * @en Value\n * @vModel\n */\n value: {\n type: Array as PropType<Array<string | number | boolean>>,\n default: undefined\n },\n /**\n * @zh 默认值(非受控状态)\n * @en Default value (uncontrolled state)\n */\n defaultValue: {\n type: Array as PropType<Array<string | number | boolean>>,\n default: () => [],\n required: false\n },\n /**\n * @zh 支持最多选中的数量\n * @en Support the maximum number of selections\n * @version 2.36.0\n */\n max: {\n type: Number,\n required: false\n },\n /**\n * @zh 选项\n * @en Options\n * @version 2.27.0\n */\n options: {\n type: Array as PropType<Array<string | number | BasicCheckboxOption>>\n },\n /**\n * @zh 复选框的排列方向\n * @en Arrangement direction of checkboxes\n */\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n required: false\n },\n /**\n * @zh 是否禁用\n * @en Whether to disable\n */\n disabled: {\n type: Boolean,\n required: false\n },\n /**\n * @zh 是否显示全选\n * @en Whether to show all\n * @default true\n */\n showCheckboxAll: {\n type: Boolean,\n default: true\n }\n}\n\nexport type BasicCheckboxGroupProps = Partial<ExtractPropTypes<typeof basicCheckboxGroupProps>>\n\nexport interface BasicCheckboxGroupContext {\n name: string\n computedValue: Array<string | number | boolean>\n disabled: boolean\n isMaxed: boolean\n slots: Slots\n handleChange: (value: Array<string | number | boolean>, e: Event) => void\n}\n","import { computed, defineComponent, reactive, ref, toRefs, watch } from 'vue'\nimport { isArray, isFunction, isNumber, isString } from '@maxax/utils'\nimport { useLocale, useNamespace } from '../../composable'\nimport BasicCheckbox from '../basic-checkbox'\nimport type { BasicCheckboxOption } from '../basic-checkbox/interface'\nimport { createBasicCheckboxGroupContext } from './context'\nimport { basicCheckboxGroupProps } from './interface'\n\nexport default defineComponent({\n name: 'XBasicCheckboxGroup',\n props: basicCheckboxGroupProps,\n emits: {\n 'update:value': (_value: Array<string | number | boolean>) => true,\n /**\n * @zh 值改变时触发\n * @en Trigger when the value changes\n * @param {(string | number | boolean)[]} _value\n * @param {Event} _ev\n */\n change: (_value: Array<string | number | boolean>, _ev: Event) => true\n },\n setup(props, { emit, slots }) {\n const { b, is } = useNamespace('checkbox-group')\n\n const { t } = useLocale()\n\n const { disabled } = toRefs(props)\n const $value = ref(props.defaultValue)\n const computedValue = computed(() => (isArray(props.value) ? props.value : $value.value))\n const isMaxed = computed(() => (props.max === undefined ? false : computedValue.value.length >= props.max))\n\n const options = computed(() => {\n return (props.options ?? []).map(option => {\n if (isString(option) || isNumber(option)) {\n return {\n label: option,\n value: option\n } as BasicCheckboxOption\n }\n return option\n })\n })\n\n const allChecked = ref(false) // 添加全选状态\n const indeterminate = ref(false) // 添加半选状态\n\n const updateAllChecked = () => {\n if (!props.showCheckboxAll) return\n const totalOptions = options.value.length\n const checkedOptions = computedValue.value.length\n allChecked.value = checkedOptions === totalOptions\n indeterminate.value = checkedOptions > 0 && checkedOptions < totalOptions\n }\n\n const handleChange = (value: Array<string | number | boolean>, e: Event) => {\n $value.value = value\n updateAllChecked() // 更新全选状态\n emit('update:value', value)\n emit('change', value, e)\n }\n\n const handleSelectAll = (value: boolean | Array<string | number | boolean>, e: Event) => {\n allChecked.value = value as boolean\n const newValue = allChecked.value ? options.value.map(option => option.value) : []\n handleChange(newValue, e)\n }\n\n const cls = computed(() => [b(), is(`direction-${props.direction}`)])\n\n watch(\n () => props.value,\n curValue => {\n if (isArray(curValue)) {\n $value.value = [...curValue]\n } else {\n $value.value = []\n }\n updateAllChecked()\n },\n { immediate: true }\n )\n\n watch(\n () => props.options,\n () => {\n updateAllChecked()\n },\n { immediate: true }\n )\n\n const context = reactive({\n name: 'XBasicCheckboxGroup',\n computedValue,\n disabled: disabled.value,\n isMaxed,\n slots,\n handleChange\n })\n\n createBasicCheckboxGroupContext(context)\n\n const renderOptions = () => {\n return options.value.map(option => {\n const checked = computedValue.value.includes(option.value)\n return (\n <BasicCheckbox key={option.value} value={option.value} disabled={option.disabled || (!checked && isMaxed.value)} indeterminate={option.indeterminate} modelValue={checked}>\n {slots.label ? slots.label({ data: option }) : isFunction(option.label) ? option.label() : option.label}\n </BasicCheckbox>\n )\n })\n }\n\n const renderSelectAll = () => {\n return (\n <BasicCheckbox key='select-all' modelValue={allChecked.value} indeterminate={indeterminate.value} onChange={handleSelectAll} uninjectGroupContext={true}>\n {t('max.checkbox.selectAll')}\n </BasicCheckbox>\n )\n }\n\n return () => (\n <span class={cls.value}>\n {props.showCheckboxAll ? renderSelectAll() : null}\n {options.value.length > 0 ? [renderOptions()] : slots.default?.()}\n </span>\n )\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicCheckboxGroup from './BasicCheckboxGroup'\n\nexport const XBasicCheckboxGroup: SFCWithInstall<typeof BasicCheckboxGroup> = withInstall(BasicCheckboxGroup)\nexport type BasicCheckboxGroupInstance = InstanceType<typeof BasicCheckboxGroup>\n\nexport default XBasicCheckboxGroup\n\nexport * from './interface'\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { BasicRowContext } from './interface'\n\nexport const basicRowKey: InjectionKey<BasicRowContext> = Symbol('basic-row')\n\nexport const createBasicRowContext = (props: BasicRowContext) => {\n return provide(basicRowKey, props)\n}\n\nexport const useBasicRowContext = () => {\n return inject(basicRowKey) as BasicRowContext\n}\n","import type { ExtractPropTypes, PropType } from 'vue'\n\nexport type FlexType = number | 'none' | 'auto' | string\n\nexport type ColSpanType = number | string\n\nexport interface ColSize {\n span?: ColSpanType\n order?: ColSpanType\n offset?: ColSpanType\n push?: ColSpanType\n pull?: ColSpanType\n}\n\nexport const basicColProps = {\n span: [String, Number],\n order: [String, Number],\n offset: [String, Number],\n push: [String, Number],\n pull: [String, Number],\n xs: {\n type: [String, Number, Object] as PropType<string | number | ColSize>,\n default: undefined as string | number | ColSize | undefined\n },\n sm: {\n type: [String, Number, Object] as PropType<string | number | ColSize>,\n default: undefined as string | number | ColSize | undefined\n },\n md: {\n type: [String, Number, Object] as PropType<string | number | ColSize>,\n default: undefined as string | number | ColSize | undefined\n },\n lg: {\n type: [String, Number, Object] as PropType<string | number | ColSize>,\n default: undefined as string | number | ColSize | undefined\n },\n xl: {\n type: [String, Number, Object] as PropType<string | number | ColSize>,\n default: undefined as string | number | ColSize | undefined\n },\n xxl: {\n type: [String, Number, Object] as PropType<string | number | ColSize>,\n default: undefined as string | number | ColSize | undefined\n },\n prefixCls: String,\n flex: [String, Number]\n}\n\nexport type BasicColProps = ExtractPropTypes<typeof basicColProps>\n\nexport interface BasicColContext {\n name: string\n}\n","import type { CSSProperties } from 'vue'\nimport { computed, defineComponent } from 'vue'\nimport { classNames } from '@maxax/utils'\nimport { useNamespace } from '../../composable'\nimport { useBasicRowContext } from '../basic-row/context'\nimport type { ColSize, FlexType } from './interface'\nimport { basicColProps } from './interface'\n\nfunction parseFlex(flex: FlexType): string {\n if (typeof flex === 'number') {\n return `${flex} ${flex} auto`\n }\n\n if (/^\\d+(\\.\\d+)?(px|em|rem|%)$/.test(flex)) {\n return `0 0 ${flex}`\n }\n\n return flex\n}\n\nconst sizes = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'] as const\n\nexport default defineComponent({\n compatConfig: { MODE: 3 },\n name: 'XBasicCol',\n inheritAttrs: false,\n props: basicColProps,\n setup(props, { slots, attrs }) {\n const { b, m } = useNamespace('basic-col')\n\n const { gutter, supportFlexGap, wrap } = useBasicRowContext()\n\n const classes = computed(() => {\n const { span, order, offset, push, pull } = props\n const pre = b()\n let sizeClassObj = {}\n sizes.forEach(size => {\n let sizeProps: ColSize = {}\n const propSize = props[size]\n if (typeof propSize === 'number') {\n sizeProps.span = propSize\n } else if (typeof propSize === 'object') {\n sizeProps = propSize || {}\n }\n\n sizeClassObj = {\n ...sizeClassObj,\n [m(`${size}-${sizeProps.span}`)]: sizeProps.span !== undefined,\n [m(`${size}-order-${sizeProps.order}`)]: sizeProps.order || sizeProps.order === 0,\n [m(`${size}-offset-${sizeProps.offset}`)]: sizeProps.offset || sizeProps.offset === 0,\n [m(`${size}-push-${sizeProps.push}`)]: sizeProps.push || sizeProps.push === 0,\n [m(`${size}-pull-${sizeProps.pull}`)]: sizeProps.pull || sizeProps.pull === 0\n // [m(`${size}-rtl`)]: true\n }\n })\n return classNames(\n pre,\n {\n [m(`${span}`)]: span !== undefined,\n [m(`order-${order}`)]: order,\n [m(`offset-${offset}`)]: offset,\n [m(`push-${push}`)]: push,\n [m(`pull-${pull}`)]: pull\n },\n sizeClassObj,\n attrs.class\n )\n })\n\n const mergedStyle = computed(() => {\n const { flex } = props\n const gutterVal = gutter.value\n const style: CSSProperties = {}\n // Horizontal gutter use padding\n if (gutterVal && gutterVal[0] && gutterVal[0] > 0) {\n const horizontalGutter = `${gutterVal[0] / 2}px`\n style.paddingLeft = horizontalGutter\n style.paddingRight = horizontalGutter\n }\n\n // Vertical gutter use padding when gap not support\n if (gutterVal && gutterVal[1] && gutterVal[1] > 0 && !supportFlexGap.value) {\n const verticalGutter = `${gutterVal[1] / 2}px`\n style.paddingTop = verticalGutter\n style.paddingBottom = verticalGutter\n }\n\n if (flex) {\n style.flex = parseFlex(flex)\n\n // Hack for Firefox to avoid size issue\n // https://github.com/ant-design/ant-design/pull/20023#issuecomment-564389553\n if (wrap.value === false && !style.minWidth) {\n style.minWidth = 0\n }\n }\n return style\n })\n\n return () => (\n <div {...attrs} class={classes.value} style={[mergedStyle.value, attrs.style as CSSProperties]}>\n {slots.default?.()}\n </div>\n )\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicCol from './BasicCol'\n\nexport const XBasicCol: SFCWithInstall<typeof BasicCol> = withInstall(BasicCol)\nexport type BasicColInstance = InstanceType<typeof BasicCol>\n\nexport default XBasicCol\n\nexport * from './interface'\n","import { computed, customRef, effectScope, getCurrentInstance, getCurrentScope, hasInjectionContext, inject, isReactive, isRef, nextTick, onBeforeMount, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, provide, reactive, readonly, ref, shallowReadonly, shallowRef, toRef as toRef$1, toRefs as toRefs$1, toValue, unref, watch, watchEffect } from \"vue\";\n\n//#region computedEager/index.ts\n/**\n*\n* @deprecated This function will be removed in future version.\n*\n* Note: If you are using Vue 3.4+, you can straight use computed instead.\n* Because in Vue 3.4+, if computed new value does not change,\n* computed, effect, watch, watchEffect, render dependencies will not be triggered.\n* refer: https://github.com/vuejs/core/pull/5912\n*\n* @param fn effect function\n* @param options WatchOptionsBase\n* @returns readonly shallowRef\n*/\nfunction computedEager(fn, options) {\n\tvar _options$flush;\n\tconst result = shallowRef();\n\twatchEffect(() => {\n\t\tresult.value = fn();\n\t}, {\n\t\t...options,\n\t\tflush: (_options$flush = options === null || options === void 0 ? void 0 : options.flush) !== null && _options$flush !== void 0 ? _options$flush : \"sync\"\n\t});\n\treturn readonly(result);\n}\n/** @deprecated use `computedEager` instead */\nconst eagerComputed = computedEager;\n\n//#endregion\n//#region computedWithControl/index.ts\n/**\n* Explicitly define the deps of computed.\n*\n* @param source\n* @param fn\n*/\nfunction computedWithControl(source, fn, options = {}) {\n\tlet v = void 0;\n\tlet track;\n\tlet trigger;\n\tlet dirty = true;\n\tconst update = () => {\n\t\tdirty = true;\n\t\ttrigger();\n\t};\n\twatch(source, update, {\n\t\tflush: \"sync\",\n\t\t...options\n\t});\n\tconst get$1 = typeof fn === \"function\" ? fn : fn.get;\n\tconst set$1 = typeof fn === \"function\" ? void 0 : fn.set;\n\tconst result = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tif (dirty) {\n\t\t\t\t\tv = get$1(v);\n\t\t\t\t\tdirty = false;\n\t\t\t\t}\n\t\t\t\ttrack();\n\t\t\t\treturn v;\n\t\t\t},\n\t\t\tset(v$1) {\n\t\t\t\tset$1 === null || set$1 === void 0 || set$1(v$1);\n\t\t\t}\n\t\t};\n\t});\n\tresult.trigger = update;\n\treturn result;\n}\n/** @deprecated use `computedWithControl` instead */\nconst controlledComputed = computedWithControl;\n\n//#endregion\n//#region tryOnScopeDispose/index.ts\n/**\n* Call onScopeDispose() if it's inside an effect scope lifecycle, if not, do nothing\n*\n* @param fn\n*/\nfunction tryOnScopeDispose(fn, failSilently) {\n\tif (getCurrentScope()) {\n\t\tonScopeDispose(fn, failSilently);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n//#endregion\n//#region createEventHook/index.ts\n/**\n* Utility for creating event hooks\n*\n* @see https://vueuse.org/createEventHook\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createEventHook() {\n\tconst fns = /* @__PURE__ */ new Set();\n\tconst off = (fn) => {\n\t\tfns.delete(fn);\n\t};\n\tconst clear = () => {\n\t\tfns.clear();\n\t};\n\tconst on = (fn) => {\n\t\tfns.add(fn);\n\t\tconst offFn = () => off(fn);\n\t\ttryOnScopeDispose(offFn);\n\t\treturn { off: offFn };\n\t};\n\tconst trigger = (...args) => {\n\t\treturn Promise.all(Array.from(fns).map((fn) => fn(...args)));\n\t};\n\treturn {\n\t\ton,\n\t\toff,\n\t\ttrigger,\n\t\tclear\n\t};\n}\n\n//#endregion\n//#region createGlobalState/index.ts\n/**\n* Keep states in the global scope to be reusable across Vue instances.\n*\n* @see https://vueuse.org/createGlobalState\n* @param stateFactory A factory function to create the state\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createGlobalState(stateFactory) {\n\tlet initialized = false;\n\tlet state;\n\tconst scope = effectScope(true);\n\treturn ((...args) => {\n\t\tif (!initialized) {\n\t\t\tstate = scope.run(() => stateFactory(...args));\n\t\t\tinitialized = true;\n\t\t}\n\t\treturn state;\n\t});\n}\n\n//#endregion\n//#region provideLocal/map.ts\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\n//#endregion\n//#region injectLocal/index.ts\n/**\n* On the basis of `inject`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* injectLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*\n* @__NO_SIDE_EFFECTS__\n*/\nconst injectLocal = (...args) => {\n\tvar _getCurrentInstance;\n\tconst key = args[0];\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null && !hasInjectionContext()) throw new Error(\"injectLocal must be called in setup\");\n\tif (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key];\n\treturn inject(...args);\n};\n\n//#endregion\n//#region provideLocal/index.ts\n/**\n* On the basis of `provide`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* provideLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*/\nfunction provideLocal(key, value) {\n\tvar _getCurrentInstance;\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null) throw new Error(\"provideLocal must be called in setup\");\n\tif (!localProvidedStateMap.has(owner)) localProvidedStateMap.set(owner, Object.create(null));\n\tconst localProvidedState = localProvidedStateMap.get(owner);\n\tlocalProvidedState[key] = value;\n\treturn provide(key, value);\n}\n\n//#endregion\n//#region createInjectionState/index.ts\n/**\n* Create global state that can be injected into components.\n*\n* @see https://vueuse.org/createInjectionState\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createInjectionState(composable, options) {\n\tconst key = (options === null || options === void 0 ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n\tconst defaultValue = options === null || options === void 0 ? void 0 : options.defaultValue;\n\tconst useProvidingState = (...args) => {\n\t\tconst state = composable(...args);\n\t\tprovideLocal(key, state);\n\t\treturn state;\n\t};\n\tconst useInjectedState = () => injectLocal(key, defaultValue);\n\treturn [useProvidingState, useInjectedState];\n}\n\n//#endregion\n//#region createRef/index.ts\n/**\n* Returns a `deepRef` or `shallowRef` depending on the `deep` param.\n*\n* @example createRef(1) // ShallowRef<number>\n* @example createRef(1, false) // ShallowRef<number>\n* @example createRef(1, true) // Ref<number>\n* @example createRef(\"string\") // ShallowRef<string>\n* @example createRef<\"A\"|\"B\">(\"A\", true) // Ref<\"A\"|\"B\">\n*\n* @param value\n* @param deep\n* @returns the `deepRef` or `shallowRef`\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createRef(value, deep) {\n\tif (deep === true) return ref(value);\n\telse return shallowRef(value);\n}\n\n//#endregion\n//#region utils/is.ts\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n\tif (!condition) console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {};\nconst rand = (min, max) => {\n\tmin = Math.ceil(min);\n\tmax = Math.floor(max);\n\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n\tvar _window, _window2, _window3;\n\treturn isClient && ((_window = window) === null || _window === void 0 || (_window = _window.navigator) === null || _window === void 0 ? void 0 : _window.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.navigator) === null || _window2 === void 0 ? void 0 : _window2.maxTouchPoints) > 2 && /iPad|Macintosh/.test((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.navigator.userAgent));\n}\n\n//#endregion\n//#region toRef/index.ts\nfunction toRef(...args) {\n\tif (args.length !== 1) return toRef$1(...args);\n\tconst r = args[0];\n\treturn typeof r === \"function\" ? readonly(customRef(() => ({\n\t\tget: r,\n\t\tset: noop\n\t}))) : ref(r);\n}\n\n//#endregion\n//#region utils/filters.ts\n/**\n* @internal\n*/\nfunction createFilterWrapper(filter, fn) {\n\tfunction wrapper(...args) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tPromise.resolve(filter(() => fn.apply(this, args), {\n\t\t\t\tfn,\n\t\t\t\tthisArg: this,\n\t\t\t\targs\n\t\t\t})).then(resolve).catch(reject);\n\t\t});\n\t}\n\treturn wrapper;\n}\nconst bypassFilter = (invoke$1) => {\n\treturn invoke$1();\n};\n/**\n* Create an EventFilter that debounce the events\n*/\nfunction debounceFilter(ms, options = {}) {\n\tlet timer;\n\tlet maxTimer;\n\tlet lastRejector = noop;\n\tconst _clearTimeout = (timer$1) => {\n\t\tclearTimeout(timer$1);\n\t\tlastRejector();\n\t\tlastRejector = noop;\n\t};\n\tlet lastInvoker;\n\tconst filter = (invoke$1) => {\n\t\tconst duration = toValue(ms);\n\t\tconst maxDuration = toValue(options.maxWait);\n\t\tif (timer) _clearTimeout(timer);\n\t\tif (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n\t\t\tif (maxTimer) {\n\t\t\t\t_clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t}\n\t\t\treturn Promise.resolve(invoke$1());\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlastRejector = options.rejectOnCancel ? reject : resolve;\n\t\t\tlastInvoker = invoke$1;\n\t\t\tif (maxDuration && !maxTimer) maxTimer = setTimeout(() => {\n\t\t\t\tif (timer) _clearTimeout(timer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\tresolve(lastInvoker());\n\t\t\t}, maxDuration);\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tif (maxTimer) _clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\tresolve(invoke$1());\n\t\t\t}, duration);\n\t\t});\n\t};\n\treturn filter;\n}\nfunction throttleFilter(...args) {\n\tlet lastExec = 0;\n\tlet timer;\n\tlet isLeading = true;\n\tlet lastRejector = noop;\n\tlet lastValue;\n\tlet ms;\n\tlet trailing;\n\tlet leading;\n\tlet rejectOnCancel;\n\tif (!isRef(args[0]) && typeof args[0] === \"object\") ({delay: ms, trailing = true, leading = true, rejectOnCancel = false} = args[0]);\n\telse [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n\tconst clear = () => {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t\tlastRejector();\n\t\t\tlastRejector = noop;\n\t\t}\n\t};\n\tconst filter = (_invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst elapsed = Date.now() - lastExec;\n\t\tconst invoke$1 = () => {\n\t\t\treturn lastValue = _invoke();\n\t\t};\n\t\tclear();\n\t\tif (duration <= 0) {\n\t\t\tlastExec = Date.now();\n\t\t\treturn invoke$1();\n\t\t}\n\t\tif (elapsed > duration) {\n\t\t\tlastExec = Date.now();\n\t\t\tif (leading || !isLeading) invoke$1();\n\t\t} else if (trailing) lastValue = new Promise((resolve, reject) => {\n\t\t\tlastRejector = rejectOnCancel ? reject : resolve;\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tlastExec = Date.now();\n\t\t\t\tisLeading = true;\n\t\t\t\tresolve(invoke$1());\n\t\t\t\tclear();\n\t\t\t}, Math.max(0, duration - elapsed));\n\t\t});\n\t\tif (!leading && !timer) timer = setTimeout(() => isLeading = true, duration);\n\t\tisLeading = false;\n\t\treturn lastValue;\n\t};\n\treturn filter;\n}\n/**\n* EventFilter that gives extra controls to pause and resume the filter\n*\n* @param extendFilter Extra filter to apply when the PausableFilter is active, default to none\n* @param options Options to configure the filter\n*/\nfunction pausableFilter(extendFilter = bypassFilter, options = {}) {\n\tconst { initialState = \"active\" } = options;\n\tconst isActive = toRef(initialState === \"active\");\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tfunction resume() {\n\t\tisActive.value = true;\n\t}\n\tconst eventFilter = (...args) => {\n\t\tif (isActive.value) extendFilter(...args);\n\t};\n\treturn {\n\t\tisActive: readonly(isActive),\n\t\tpause,\n\t\tresume,\n\t\teventFilter\n\t};\n}\n\n//#endregion\n//#region utils/general.ts\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n\treturn new Promise((resolve, reject) => {\n\t\tif (throwOnTimeout) setTimeout(() => reject(reason), ms);\n\t\telse setTimeout(resolve, ms);\n\t});\n}\nfunction identity(arg) {\n\treturn arg;\n}\n/**\n* Create singleton promise function\n*\n* @example\n* ```\n* const promise = createSingletonPromise(async () => { ... })\n*\n* await promise()\n* await promise() // all of them will be bind to a single promise instance\n* await promise() // and be resolved together\n* ```\n*/\nfunction createSingletonPromise(fn) {\n\tlet _promise;\n\tfunction wrapper() {\n\t\tif (!_promise) _promise = fn();\n\t\treturn _promise;\n\t}\n\twrapper.reset = async () => {\n\t\tconst _prev = _promise;\n\t\t_promise = void 0;\n\t\tif (_prev) await _prev;\n\t};\n\treturn wrapper;\n}\nfunction invoke(fn) {\n\treturn fn();\n}\nfunction containsProp(obj, ...props) {\n\treturn props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n\tvar _target$match;\n\tif (typeof target === \"number\") return target + delta;\n\tconst value = ((_target$match = target.match(/^-?\\d+\\.?\\d*/)) === null || _target$match === void 0 ? void 0 : _target$match[0]) || \"\";\n\tconst unit = target.slice(value.length);\n\tconst result = Number.parseFloat(value) + delta;\n\tif (Number.isNaN(result)) return target;\n\treturn result + unit;\n}\n/**\n* Get a px value for SSR use, do not rely on this method outside of SSR as REM unit is assumed at 16px, which might not be the case on the client\n*/\nfunction pxValue(px) {\n\treturn px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\n/**\n* Create a new subset object by giving keys\n*/\nfunction objectPick(obj, keys, omitUndefined = false) {\n\treturn keys.reduce((n, k) => {\n\t\tif (k in obj) {\n\t\t\tif (!omitUndefined || obj[k] !== void 0) n[k] = obj[k];\n\t\t}\n\t\treturn n;\n\t}, {});\n}\n/**\n* Create a new subset object by omit giving keys\n*/\nfunction objectOmit(obj, keys, omitUndefined = false) {\n\treturn Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n\t\treturn (!omitUndefined || value !== void 0) && !keys.includes(key);\n\t}));\n}\nfunction objectEntries(obj) {\n\treturn Object.entries(obj);\n}\nfunction toArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\n//#endregion\n//#region utils/port.ts\nfunction cacheStringFunction(fn) {\n\tconst cache = Object.create(null);\n\treturn ((str) => {\n\t\treturn cache[str] || (cache[str] = fn(str));\n\t});\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n\treturn str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\n//#endregion\n//#region utils/vue.ts\nfunction getLifeCycleTarget(target) {\n\treturn target || getCurrentInstance();\n}\n\n//#endregion\n//#region createSharedComposable/index.ts\n/**\n* Make a composable function usable with multiple Vue instances.\n*\n* @see https://vueuse.org/createSharedComposable\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createSharedComposable(composable) {\n\tif (!isClient) return composable;\n\tlet subscribers = 0;\n\tlet state;\n\tlet scope;\n\tconst dispose = () => {\n\t\tsubscribers -= 1;\n\t\tif (scope && subscribers <= 0) {\n\t\t\tscope.stop();\n\t\t\tstate = void 0;\n\t\t\tscope = void 0;\n\t\t}\n\t};\n\treturn ((...args) => {\n\t\tsubscribers += 1;\n\t\tif (!scope) {\n\t\t\tscope = effectScope(true);\n\t\t\tstate = scope.run(() => composable(...args));\n\t\t}\n\t\ttryOnScopeDispose(dispose);\n\t\treturn state;\n\t});\n}\n\n//#endregion\n//#region extendRef/index.ts\nfunction extendRef(ref$1, extend, { enumerable = false, unwrap = true } = {}) {\n\tfor (const [key, value] of Object.entries(extend)) {\n\t\tif (key === \"value\") continue;\n\t\tif (isRef(value) && unwrap) Object.defineProperty(ref$1, key, {\n\t\t\tget() {\n\t\t\t\treturn value.value;\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tvalue.value = v;\n\t\t\t},\n\t\t\tenumerable\n\t\t});\n\t\telse Object.defineProperty(ref$1, key, {\n\t\t\tvalue,\n\t\t\tenumerable\n\t\t});\n\t}\n\treturn ref$1;\n}\n\n//#endregion\n//#region get/index.ts\nfunction get(obj, key) {\n\tif (key == null) return unref(obj);\n\treturn unref(obj)[key];\n}\n\n//#endregion\n//#region isDefined/index.ts\nfunction isDefined(v) {\n\treturn unref(v) != null;\n}\n\n//#endregion\n//#region makeDestructurable/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction makeDestructurable(obj, arr) {\n\tif (typeof Symbol !== \"undefined\") {\n\t\tconst clone = { ...obj };\n\t\tObject.defineProperty(clone, Symbol.iterator, {\n\t\t\tenumerable: false,\n\t\t\tvalue() {\n\t\t\t\tlet index = 0;\n\t\t\t\treturn { next: () => ({\n\t\t\t\t\tvalue: arr[index++],\n\t\t\t\t\tdone: index > arr.length\n\t\t\t\t}) };\n\t\t\t}\n\t\t});\n\t\treturn clone;\n\t} else return Object.assign([...arr], obj);\n}\n\n//#endregion\n//#region reactify/index.ts\n/**\n* Converts plain function into a reactive function.\n* The converted function accepts refs as it's arguments\n* and returns a ComputedRef, with proper typing.\n*\n* @param fn - Source function\n* @param options - Options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactify(fn, options) {\n\tconst unrefFn = (options === null || options === void 0 ? void 0 : options.computedGetter) === false ? unref : toValue;\n\treturn function(...args) {\n\t\treturn computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n\t};\n}\n/** @deprecated use `reactify` instead */\nconst createReactiveFn = reactify;\n\n//#endregion\n//#region reactifyObject/index.ts\n/**\n* Apply `reactify` to an object\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n\tlet keys = [];\n\tlet options;\n\tif (Array.isArray(optionsOrKeys)) keys = optionsOrKeys;\n\telse {\n\t\toptions = optionsOrKeys;\n\t\tconst { includeOwnProperties = true } = optionsOrKeys;\n\t\tkeys.push(...Object.keys(obj));\n\t\tif (includeOwnProperties) keys.push(...Object.getOwnPropertyNames(obj));\n\t}\n\treturn Object.fromEntries(keys.map((key) => {\n\t\tconst value = obj[key];\n\t\treturn [key, typeof value === \"function\" ? reactify(value.bind(obj), options) : value];\n\t}));\n}\n\n//#endregion\n//#region toReactive/index.ts\n/**\n* Converts ref to reactive.\n*\n* @see https://vueuse.org/toReactive\n* @param objectRef A ref of object\n*/\nfunction toReactive(objectRef) {\n\tif (!isRef(objectRef)) return reactive(objectRef);\n\treturn reactive(new Proxy({}, {\n\t\tget(_, p, receiver) {\n\t\t\treturn unref(Reflect.get(objectRef.value, p, receiver));\n\t\t},\n\t\tset(_, p, value) {\n\t\t\tif (isRef(objectRef.value[p]) && !isRef(value)) objectRef.value[p].value = value;\n\t\t\telse objectRef.value[p] = value;\n\t\t\treturn true;\n\t\t},\n\t\tdeleteProperty(_, p) {\n\t\t\treturn Reflect.deleteProperty(objectRef.value, p);\n\t\t},\n\t\thas(_, p) {\n\t\t\treturn Reflect.has(objectRef.value, p);\n\t\t},\n\t\townKeys() {\n\t\t\treturn Object.keys(objectRef.value);\n\t\t},\n\t\tgetOwnPropertyDescriptor() {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t};\n\t\t}\n\t}));\n}\n\n//#endregion\n//#region reactiveComputed/index.ts\n/**\n* Computed reactive object.\n*/\nfunction reactiveComputed(fn) {\n\treturn toReactive(computed(fn));\n}\n\n//#endregion\n//#region reactiveOmit/index.ts\n/**\n* Reactively omit fields from a reactive object\n*\n* @see https://vueuse.org/reactiveOmit\n*/\nfunction reactiveOmit(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\n//#endregion\n//#region reactivePick/index.ts\n/**\n* Reactively pick fields from a reactive object\n*\n* @see https://vueuse.org/reactivePick\n*/\nfunction reactivePick(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\n//#endregion\n//#region refAutoReset/index.ts\n/**\n* Create a ref which will be reset to the default value after some time.\n*\n* @see https://vueuse.org/refAutoReset\n* @param defaultValue The value which will be set.\n* @param afterMs A zero-or-greater delay in milliseconds.\n*/\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n\treturn customRef((track, trigger) => {\n\t\tlet value = toValue(defaultValue);\n\t\tlet timer;\n\t\tconst resetAfter = () => setTimeout(() => {\n\t\t\tvalue = toValue(defaultValue);\n\t\t\ttrigger();\n\t\t}, toValue(afterMs));\n\t\ttryOnScopeDispose(() => {\n\t\t\tclearTimeout(timer);\n\t\t});\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = resetAfter();\n\t\t\t}\n\t\t};\n\t});\n}\n/** @deprecated use `refAutoReset` instead */\nconst autoResetRef = refAutoReset;\n\n//#endregion\n//#region useDebounceFn/index.ts\n/**\n* Debounce execution of a function.\n*\n* @see https://vueuse.org/useDebounceFn\n* @param fn A function to be executed after delay milliseconds debounced.\n* @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param options Options\n*\n* @return A new, debounce, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n\treturn createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\n//#endregion\n//#region refDebounced/index.ts\n/**\n* Debounce updates of a ref.\n*\n* @return A new debounced ref.\n*/\nfunction refDebounced(value, ms = 200, options = {}) {\n\tconst debounced = ref(toValue(value));\n\tconst updater = useDebounceFn(() => {\n\t\tdebounced.value = value.value;\n\t}, ms, options);\n\twatch(value, () => updater());\n\treturn shallowReadonly(debounced);\n}\n/** @deprecated use `refDebounced` instead */\nconst debouncedRef = refDebounced;\n/** @deprecated use `refDebounced` instead */\nconst useDebounce = refDebounced;\n\n//#endregion\n//#region refDefault/index.ts\n/**\n* Apply default value to a ref.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refDefault(source, defaultValue) {\n\treturn computed({\n\t\tget() {\n\t\t\tvar _source$value;\n\t\t\treturn (_source$value = source.value) !== null && _source$value !== void 0 ? _source$value : defaultValue;\n\t\t},\n\t\tset(value) {\n\t\t\tsource.value = value;\n\t\t}\n\t});\n}\n\n//#endregion\n//#region refManualReset/index.ts\n/**\n* Create a ref with manual reset functionality.\n*\n* @see https://vueuse.org/refManualReset\n* @param defaultValue The value which will be set.\n*/\nfunction refManualReset(defaultValue) {\n\tlet value = toValue(defaultValue);\n\tlet trigger;\n\tconst reset = () => {\n\t\tvalue = toValue(defaultValue);\n\t\ttrigger();\n\t};\n\tconst refValue = customRef((track, _trigger) => {\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t}\n\t\t};\n\t});\n\trefValue.reset = reset;\n\treturn refValue;\n}\n\n//#endregion\n//#region useThrottleFn/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param fn A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n* to `callback` when the throttled-function is executed.\n* @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* (default value: 200)\n*\n* @param [trailing] if true, call fn again after the time is up (default value: false)\n*\n* @param [leading] if true, call fn on the leading edge of the ms timeout (default value: true)\n*\n* @param [rejectOnCancel] if true, reject the last call if it's been cancel (default value: false)\n*\n* @return A new, throttled, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n\treturn createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n\n//#endregion\n//#region refThrottled/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param value Ref value to be watched with throttle effect\n* @param delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param trailing if true, update the value again after the delay time is up\n* @param leading if true, update the value on the leading edge of the ms timeout\n*/\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n\tif (delay <= 0) return value;\n\tconst throttled = ref(toValue(value));\n\tconst updater = useThrottleFn(() => {\n\t\tthrottled.value = value.value;\n\t}, delay, trailing, leading);\n\twatch(value, () => updater());\n\treturn throttled;\n}\n/** @deprecated use `refThrottled` instead */\nconst throttledRef = refThrottled;\n/** @deprecated use `refThrottled` instead */\nconst useThrottle = refThrottled;\n\n//#endregion\n//#region refWithControl/index.ts\n/**\n* Fine-grained controls over ref and its reactivity.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refWithControl(initial, options = {}) {\n\tlet source = initial;\n\tlet track;\n\tlet trigger;\n\tconst ref$1 = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\treturn get$1();\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tset$1(v);\n\t\t\t}\n\t\t};\n\t});\n\tfunction get$1(tracking = true) {\n\t\tif (tracking) track();\n\t\treturn source;\n\t}\n\tfunction set$1(value, triggering = true) {\n\t\tvar _options$onBeforeChan, _options$onChanged;\n\t\tif (value === source) return;\n\t\tconst old = source;\n\t\tif (((_options$onBeforeChan = options.onBeforeChange) === null || _options$onBeforeChan === void 0 ? void 0 : _options$onBeforeChan.call(options, value, old)) === false) return;\n\t\tsource = value;\n\t\t(_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, value, old);\n\t\tif (triggering) trigger();\n\t}\n\t/**\n\t* Get the value without tracked in the reactivity system\n\t*/\n\tconst untrackedGet = () => get$1(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*/\n\tconst silentSet = (v) => set$1(v, false);\n\t/**\n\t* Get the value without tracked in the reactivity system.\n\t*\n\t* Alias for `untrackedGet()`\n\t*/\n\tconst peek = () => get$1(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*\n\t* Alias for `silentSet(v)`\n\t*/\n\tconst lay = (v) => set$1(v, false);\n\treturn extendRef(ref$1, {\n\t\tget: get$1,\n\t\tset: set$1,\n\t\tuntrackedGet,\n\t\tsilentSet,\n\t\tpeek,\n\t\tlay\n\t}, { enumerable: true });\n}\n/** @deprecated use `refWithControl` instead */\nconst controlledRef = refWithControl;\n\n//#endregion\n//#region set/index.ts\n/**\n* Shorthand for `ref.value = x`\n*/\nfunction set(...args) {\n\tif (args.length === 2) {\n\t\tconst [ref$1, value] = args;\n\t\tref$1.value = value;\n\t}\n\tif (args.length === 3) {\n\t\tconst [target, key, value] = args;\n\t\ttarget[key] = value;\n\t}\n}\n\n//#endregion\n//#region watchWithFilter/index.ts\nfunction watchWithFilter(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter,...watchOptions } = options;\n\treturn watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\n//#endregion\n//#region watchPausable/index.ts\nfunction watchPausable(source, cb, options = {}) {\n\tconst { eventFilter: filter, initialState = \"active\",...watchOptions } = options;\n\tconst { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState });\n\treturn {\n\t\tstop: watchWithFilter(source, cb, {\n\t\t\t...watchOptions,\n\t\t\teventFilter\n\t\t}),\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n/** @deprecated use `watchPausable` instead */\nconst pausableWatch = watchPausable;\n\n//#endregion\n//#region syncRef/index.ts\n/**\n* Two-way refs synchronization.\n* From the set theory perspective to restrict the option's type\n* Check in the following order:\n* 1. L = R\n* 2. L ∩ R ≠ ∅\n* 3. L ⊆ R\n* 4. L ∩ R = ∅\n*/\nfunction syncRef(left, right, ...[options]) {\n\tconst { flush = \"sync\", deep = false, immediate = true, direction = \"both\", transform = {} } = options || {};\n\tconst watchers = [];\n\tconst transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n\tconst transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n\tif (direction === \"both\" || direction === \"ltr\") watchers.push(pausableWatch(left, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tright.value = transformLTR(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tif (direction === \"both\" || direction === \"rtl\") watchers.push(pausableWatch(right, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tleft.value = transformRTL(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tconst stop = () => {\n\t\twatchers.forEach((w) => w.stop());\n\t};\n\treturn stop;\n}\n\n//#endregion\n//#region syncRefs/index.ts\n/**\n* Keep target ref(s) in sync with the source ref\n*\n* @param source source ref\n* @param targets\n*/\nfunction syncRefs(source, targets, options = {}) {\n\tconst { flush = \"sync\", deep = false, immediate = true } = options;\n\tconst targetsArray = toArray(targets);\n\treturn watch(source, (newValue) => targetsArray.forEach((target) => target.value = newValue), {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t});\n}\n\n//#endregion\n//#region toRefs/index.ts\n/**\n* Extended `toRefs` that also accepts refs of an object.\n*\n* @see https://vueuse.org/toRefs\n* @param objectRef A ref or normal object or array.\n* @param options Options\n*/\nfunction toRefs(objectRef, options = {}) {\n\tif (!isRef(objectRef)) return toRefs$1(objectRef);\n\tconst result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n\tfor (const key in objectRef.value) result[key] = customRef(() => ({\n\t\tget() {\n\t\t\treturn objectRef.value[key];\n\t\t},\n\t\tset(v) {\n\t\t\tvar _toValue;\n\t\t\tif ((_toValue = toValue(options.replaceRef)) !== null && _toValue !== void 0 ? _toValue : true) if (Array.isArray(objectRef.value)) {\n\t\t\t\tconst copy = [...objectRef.value];\n\t\t\t\tcopy[key] = v;\n\t\t\t\tobjectRef.value = copy;\n\t\t\t} else {\n\t\t\t\tconst newObject = {\n\t\t\t\t\t...objectRef.value,\n\t\t\t\t\t[key]: v\n\t\t\t\t};\n\t\t\t\tObject.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n\t\t\t\tobjectRef.value = newObject;\n\t\t\t}\n\t\t\telse objectRef.value[key] = v;\n\t\t}\n\t}));\n\treturn result;\n}\n\n//#endregion\n//#region tryOnBeforeMount/index.ts\n/**\n* Call onBeforeMount() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnBeforeMount(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onBeforeMount(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n\n//#endregion\n//#region tryOnBeforeUnmount/index.ts\n/**\n* Call onBeforeUnmount() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnBeforeUnmount(fn, target) {\n\tif (getLifeCycleTarget(target)) onBeforeUnmount(fn, target);\n}\n\n//#endregion\n//#region tryOnMounted/index.ts\n/**\n* Call onMounted() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnMounted(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onMounted(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n\n//#endregion\n//#region tryOnUnmounted/index.ts\n/**\n* Call onUnmounted() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnUnmounted(fn, target) {\n\tif (getLifeCycleTarget(target)) onUnmounted(fn, target);\n}\n\n//#endregion\n//#region until/index.ts\nfunction createUntil(r, isNot = false) {\n\tfunction toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch(r, (v) => {\n\t\t\t\tif (condition(v) !== isNot) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop === null || stop === void 0 ? void 0 : stop()));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBe(value, options) {\n\t\tif (!isRef(value)) return toMatch((v) => v === value, options);\n\t\tconst { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options !== null && options !== void 0 ? options : {};\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch([r, value], ([v1, v2]) => {\n\t\t\t\tif (isNot !== (v1 === v2)) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v1);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n\t\t\tstop === null || stop === void 0 || stop();\n\t\t\treturn toValue(r);\n\t\t}));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBeTruthy(options) {\n\t\treturn toMatch((v) => Boolean(v), options);\n\t}\n\tfunction toBeNull(options) {\n\t\treturn toBe(null, options);\n\t}\n\tfunction toBeUndefined(options) {\n\t\treturn toBe(void 0, options);\n\t}\n\tfunction toBeNaN(options) {\n\t\treturn toMatch(Number.isNaN, options);\n\t}\n\tfunction toContains(value, options) {\n\t\treturn toMatch((v) => {\n\t\t\tconst array = Array.from(v);\n\t\t\treturn array.includes(value) || array.includes(toValue(value));\n\t\t}, options);\n\t}\n\tfunction changed(options) {\n\t\treturn changedTimes(1, options);\n\t}\n\tfunction changedTimes(n = 1, options) {\n\t\tlet count = -1;\n\t\treturn toMatch(() => {\n\t\t\tcount += 1;\n\t\t\treturn count >= n;\n\t\t}, options);\n\t}\n\tif (Array.isArray(toValue(r))) return {\n\t\ttoMatch,\n\t\ttoContains,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n\telse return {\n\t\ttoMatch,\n\t\ttoBe,\n\t\ttoBeTruthy,\n\t\ttoBeNull,\n\t\ttoBeNaN,\n\t\ttoBeUndefined,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n}\nfunction until(r) {\n\treturn createUntil(r);\n}\n\n//#endregion\n//#region useArrayDifference/index.ts\nfunction defaultComparator(value, othVal) {\n\treturn value === othVal;\n}\n/**\n* Reactive get array difference of two array\n* @see https://vueuse.org/useArrayDifference\n* @returns - the difference of two array\n* @param args\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayDifference(...args) {\n\tvar _args$, _args$2;\n\tconst list = args[0];\n\tconst values = args[1];\n\tlet compareFn = (_args$ = args[2]) !== null && _args$ !== void 0 ? _args$ : defaultComparator;\n\tconst { symmetric = false } = (_args$2 = args[3]) !== null && _args$2 !== void 0 ? _args$2 : {};\n\tif (typeof compareFn === \"string\") {\n\t\tconst key = compareFn;\n\t\tcompareFn = (value, othVal) => value[key] === othVal[key];\n\t}\n\tconst diff1 = computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n\tif (symmetric) {\n\t\tconst diff2 = computed(() => toValue(values).filter((x) => toValue(list).findIndex((y) => compareFn(x, y)) === -1));\n\t\treturn computed(() => symmetric ? [...toValue(diff1), ...toValue(diff2)] : toValue(diff1));\n\t} else return diff1;\n}\n\n//#endregion\n//#region useArrayEvery/index.ts\n/**\n* Reactive `Array.every`\n*\n* @see https://vueuse.org/useArrayEvery\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for every element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayEvery(list, fn) {\n\treturn computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\n//#endregion\n//#region useArrayFilter/index.ts\n/**\n* Reactive `Array.filter`\n*\n* @see https://vueuse.org/useArrayFilter\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a shallow copy of a portion of the given array, filtered down to just the elements from the given array that pass the test implemented by the provided function. If no elements pass the test, an empty array will be returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFilter(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\n//#endregion\n//#region useArrayFind/index.ts\n/**\n* Reactive `Array.find`\n*\n* @see https://vueuse.org/useArrayFind\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the first element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFind(list, fn) {\n\treturn computed(() => toValue(toValue(list).find((element, index, array) => fn(toValue(element), index, array))));\n}\n\n//#endregion\n//#region useArrayFindIndex/index.ts\n/**\n* Reactive `Array.findIndex`\n*\n* @see https://vueuse.org/useArrayFindIndex\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the index of the first element in the array that passes the test. Otherwise, \"-1\".\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindIndex(list, fn) {\n\treturn computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\n//#endregion\n//#region useArrayFindLast/index.ts\nfunction findLast(arr, cb) {\n\tlet index = arr.length;\n\twhile (index-- > 0) if (cb(arr[index], index, arr)) return arr[index];\n}\n/**\n* Reactive `Array.findLast`\n*\n* @see https://vueuse.org/useArrayFindLast\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the last element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindLast(list, fn) {\n\treturn computed(() => toValue(!Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))));\n}\n\n//#endregion\n//#region useArrayIncludes/index.ts\nfunction isArrayIncludesOptions(obj) {\n\treturn isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\n/**\n* Reactive `Array.includes`\n*\n* @see https://vueuse.org/useArrayIncludes\n*\n* @returns true if the `value` is found in the array. Otherwise, false.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayIncludes(...args) {\n\tvar _comparator;\n\tconst list = args[0];\n\tconst value = args[1];\n\tlet comparator = args[2];\n\tlet formIndex = 0;\n\tif (isArrayIncludesOptions(comparator)) {\n\t\tvar _comparator$fromIndex;\n\t\tformIndex = (_comparator$fromIndex = comparator.fromIndex) !== null && _comparator$fromIndex !== void 0 ? _comparator$fromIndex : 0;\n\t\tcomparator = comparator.comparator;\n\t}\n\tif (typeof comparator === \"string\") {\n\t\tconst key = comparator;\n\t\tcomparator = (element, value$1) => element[key] === toValue(value$1);\n\t}\n\tcomparator = (_comparator = comparator) !== null && _comparator !== void 0 ? _comparator : ((element, value$1) => element === toValue(value$1));\n\treturn computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(toValue(element), toValue(value), index, toValue(array))));\n}\n\n//#endregion\n//#region useArrayJoin/index.ts\n/**\n* Reactive `Array.join`\n*\n* @see https://vueuse.org/useArrayJoin\n* @param list - the array was called upon.\n* @param separator - a string to separate each pair of adjacent elements of the array. If omitted, the array elements are separated with a comma (\",\").\n*\n* @returns a string with all array elements joined. If arr.length is 0, the empty string is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayJoin(list, separator) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\n//#endregion\n//#region useArrayMap/index.ts\n/**\n* Reactive `Array.map`\n*\n* @see https://vueuse.org/useArrayMap\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a new array with each element being the result of the callback function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayMap(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\n//#endregion\n//#region useArrayReduce/index.ts\n/**\n* Reactive `Array.reduce`\n*\n* @see https://vueuse.org/useArrayReduce\n* @param list - the array was called upon.\n* @param reducer - a \"reducer\" function.\n* @param args\n*\n* @returns the value that results from running the \"reducer\" callback function to completion over the entire array.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayReduce(list, reducer, ...args) {\n\tconst reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n\treturn computed(() => {\n\t\tconst resolved = toValue(list);\n\t\treturn args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback);\n\t});\n}\n\n//#endregion\n//#region useArraySome/index.ts\n/**\n* Reactive `Array.some`\n*\n* @see https://vueuse.org/useArraySome\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for any element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArraySome(list, fn) {\n\treturn computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\n//#endregion\n//#region useArrayUnique/index.ts\nfunction uniq(array) {\n\treturn Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n\treturn array.reduce((acc, v) => {\n\t\tif (!acc.some((x) => fn(v, x, array))) acc.push(v);\n\t\treturn acc;\n\t}, []);\n}\n/**\n* reactive unique array\n* @see https://vueuse.org/useArrayUnique\n* @param list - the array was called upon.\n* @param compareFn\n* @returns A computed ref that returns a unique array of items.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayUnique(list, compareFn) {\n\treturn computed(() => {\n\t\tconst resolvedList = toValue(list).map((element) => toValue(element));\n\t\treturn compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n\t});\n}\n\n//#endregion\n//#region useCounter/index.ts\n/**\n* Basic counter with utility functions.\n*\n* @see https://vueuse.org/useCounter\n* @param [initialValue]\n* @param options\n*/\nfunction useCounter(initialValue = 0, options = {}) {\n\tlet _initialValue = unref(initialValue);\n\tconst count = shallowRef(initialValue);\n\tconst { max = Number.POSITIVE_INFINITY, min = Number.NEGATIVE_INFINITY } = options;\n\tconst inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n\tconst dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n\tconst get$1 = () => count.value;\n\tconst set$1 = (val) => count.value = Math.max(min, Math.min(max, val));\n\tconst reset = (val = _initialValue) => {\n\t\t_initialValue = val;\n\t\treturn set$1(val);\n\t};\n\treturn {\n\t\tcount: shallowReadonly(count),\n\t\tinc,\n\t\tdec,\n\t\tget: get$1,\n\t\tset: set$1,\n\t\treset\n\t};\n}\n\n//#endregion\n//#region useDateFormat/index.ts\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|z{1,4}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n\tlet m = hours < 12 ? \"AM\" : \"PM\";\n\tif (hasPeriod) m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n\treturn isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n\tconst suffixes = [\n\t\t\"th\",\n\t\t\"st\",\n\t\t\"nd\",\n\t\t\"rd\"\n\t];\n\tconst v = num % 100;\n\treturn num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n\tvar _options$customMeridi;\n\tconst years = date.getFullYear();\n\tconst month = date.getMonth();\n\tconst days = date.getDate();\n\tconst hours = date.getHours();\n\tconst minutes = date.getMinutes();\n\tconst seconds = date.getSeconds();\n\tconst milliseconds = date.getMilliseconds();\n\tconst day = date.getDay();\n\tconst meridiem = (_options$customMeridi = options.customMeridiem) !== null && _options$customMeridi !== void 0 ? _options$customMeridi : defaultMeridiem;\n\tconst stripTimeZone = (dateString) => {\n\t\tvar _dateString$split$;\n\t\treturn (_dateString$split$ = dateString.split(\" \")[1]) !== null && _dateString$split$ !== void 0 ? _dateString$split$ : \"\";\n\t};\n\tconst matches = {\n\t\tYo: () => formatOrdinal(years),\n\t\tYY: () => String(years).slice(-2),\n\t\tYYYY: () => years,\n\t\tM: () => month + 1,\n\t\tMo: () => formatOrdinal(month + 1),\n\t\tMM: () => `${month + 1}`.padStart(2, \"0\"),\n\t\tMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"short\" }),\n\t\tMMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"long\" }),\n\t\tD: () => String(days),\n\t\tDo: () => formatOrdinal(days),\n\t\tDD: () => `${days}`.padStart(2, \"0\"),\n\t\tH: () => String(hours),\n\t\tHo: () => formatOrdinal(hours),\n\t\tHH: () => `${hours}`.padStart(2, \"0\"),\n\t\th: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n\t\tho: () => formatOrdinal(hours % 12 || 12),\n\t\thh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n\t\tm: () => String(minutes),\n\t\tmo: () => formatOrdinal(minutes),\n\t\tmm: () => `${minutes}`.padStart(2, \"0\"),\n\t\ts: () => String(seconds),\n\t\tso: () => formatOrdinal(seconds),\n\t\tss: () => `${seconds}`.padStart(2, \"0\"),\n\t\tSSS: () => `${milliseconds}`.padStart(3, \"0\"),\n\t\td: () => day,\n\t\tdd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"narrow\" }),\n\t\tddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"short\" }),\n\t\tdddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"long\" }),\n\t\tA: () => meridiem(hours, minutes),\n\t\tAA: () => meridiem(hours, minutes, false, true),\n\t\ta: () => meridiem(hours, minutes, true),\n\t\taa: () => meridiem(hours, minutes, true, true),\n\t\tz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"longOffset\" }))\n\t};\n\treturn formatStr.replace(REGEX_FORMAT, (match, $1) => {\n\t\tvar _ref, _matches$match;\n\t\treturn (_ref = $1 !== null && $1 !== void 0 ? $1 : (_matches$match = matches[match]) === null || _matches$match === void 0 ? void 0 : _matches$match.call(matches)) !== null && _ref !== void 0 ? _ref : match;\n\t});\n}\nfunction normalizeDate(date) {\n\tif (date === null) return /* @__PURE__ */ new Date(NaN);\n\tif (date === void 0) return /* @__PURE__ */ new Date();\n\tif (date instanceof Date) return new Date(date);\n\tif (typeof date === \"string\" && !/Z$/i.test(date)) {\n\t\tconst d = date.match(REGEX_PARSE);\n\t\tif (d) {\n\t\t\tconst m = d[2] - 1 || 0;\n\t\t\tconst ms = (d[7] || \"0\").substring(0, 3);\n\t\t\treturn new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n\t\t}\n\t}\n\treturn new Date(date);\n}\n/**\n* Get the formatted date according to the string of tokens passed in.\n*\n* @see https://vueuse.org/useDateFormat\n* @param date - The date to format, can either be a `Date` object, a timestamp, or a string\n* @param formatStr - The combination of tokens to format the date\n* @param options - UseDateFormatOptions\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n\treturn computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\n//#endregion\n//#region useIntervalFn/index.ts\n/**\n* Wrapper for `setInterval` with controls\n*\n* @see https://vueuse.org/useIntervalFn\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tlet timer = null;\n\tconst isActive = shallowRef(false);\n\tfunction clean() {\n\t\tif (timer) {\n\t\t\tclearInterval(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tclean();\n\t}\n\tfunction resume() {\n\t\tconst intervalValue = toValue(interval);\n\t\tif (intervalValue <= 0) return;\n\t\tisActive.value = true;\n\t\tif (immediateCallback) cb();\n\t\tclean();\n\t\tif (isActive.value) timer = setInterval(cb, intervalValue);\n\t}\n\tif (immediate && isClient) resume();\n\tif (isRef(interval) || typeof interval === \"function\") tryOnScopeDispose(watch(interval, () => {\n\t\tif (isActive.value && isClient) resume();\n\t}));\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n\n//#endregion\n//#region useInterval/index.ts\nfunction useInterval(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, immediate = true, callback } = options;\n\tconst counter = shallowRef(0);\n\tconst update = () => counter.value += 1;\n\tconst reset = () => {\n\t\tcounter.value = 0;\n\t};\n\tconst controls = useIntervalFn(callback ? () => {\n\t\tupdate();\n\t\tcallback(counter.value);\n\t} : update, interval, { immediate });\n\tif (exposeControls) return {\n\t\tcounter: shallowReadonly(counter),\n\t\treset,\n\t\t...controls\n\t};\n\telse return shallowReadonly(counter);\n}\n\n//#endregion\n//#region useLastChanged/index.ts\nfunction useLastChanged(source, options = {}) {\n\tvar _options$initialValue;\n\tconst ms = shallowRef((_options$initialValue = options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : null);\n\twatch(source, () => ms.value = timestamp(), options);\n\treturn shallowReadonly(ms);\n}\n\n//#endregion\n//#region useTimeoutFn/index.ts\n/**\n* Wrapper for `setTimeout` with controls.\n*\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useTimeoutFn(cb, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tfunction clear() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t}\n\tfunction stop() {\n\t\tisPending.value = false;\n\t\tclear();\n\t}\n\tfunction start(...args) {\n\t\tif (immediateCallback) cb();\n\t\tclear();\n\t\tisPending.value = true;\n\t\ttimer = setTimeout(() => {\n\t\t\tisPending.value = false;\n\t\t\ttimer = void 0;\n\t\t\tcb(...args);\n\t\t}, toValue(interval));\n\t}\n\tif (immediate) {\n\t\tisPending.value = true;\n\t\tif (isClient) start();\n\t}\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisPending: shallowReadonly(isPending),\n\t\tstart,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useTimeout/index.ts\nfunction useTimeout(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, callback } = options;\n\tconst controls = useTimeoutFn(callback !== null && callback !== void 0 ? callback : noop, interval, options);\n\tconst ready = computed(() => !controls.isPending.value);\n\tif (exposeControls) return {\n\t\tready,\n\t\t...controls\n\t};\n\telse return ready;\n}\n\n//#endregion\n//#region useToNumber/index.ts\n/**\n* Reactively convert a string ref to number.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToNumber(value, options = {}) {\n\tconst { method = \"parseFloat\", radix, nanToZero } = options;\n\treturn computed(() => {\n\t\tlet resolved = toValue(value);\n\t\tif (typeof method === \"function\") resolved = method(resolved);\n\t\telse if (typeof resolved === \"string\") resolved = Number[method](resolved, radix);\n\t\tif (nanToZero && Number.isNaN(resolved)) resolved = 0;\n\t\treturn resolved;\n\t});\n}\n\n//#endregion\n//#region useToString/index.ts\n/**\n* Reactively convert a ref to string.\n*\n* @see https://vueuse.org/useToString\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToString(value) {\n\treturn computed(() => `${toValue(value)}`);\n}\n\n//#endregion\n//#region useToggle/index.ts\n/**\n* A boolean ref with a toggler\n*\n* @see https://vueuse.org/useToggle\n* @param [initialValue]\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToggle(initialValue = false, options = {}) {\n\tconst { truthyValue = true, falsyValue = false } = options;\n\tconst valueIsRef = isRef(initialValue);\n\tconst _value = shallowRef(initialValue);\n\tfunction toggle(value) {\n\t\tif (arguments.length) {\n\t\t\t_value.value = value;\n\t\t\treturn _value.value;\n\t\t} else {\n\t\t\tconst truthy = toValue(truthyValue);\n\t\t\t_value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n\t\t\treturn _value.value;\n\t\t}\n\t}\n\tif (valueIsRef) return toggle;\n\telse return [_value, toggle];\n}\n\n//#endregion\n//#region watchArray/index.ts\n/**\n* Watch for an array with additions and removals.\n*\n* @see https://vueuse.org/watchArray\n*/\nfunction watchArray(source, cb, options) {\n\tlet oldList = (options === null || options === void 0 ? void 0 : options.immediate) ? [] : [...typeof source === \"function\" ? source() : Array.isArray(source) ? source : toValue(source)];\n\treturn watch(source, (newList, _, onCleanup) => {\n\t\tconst oldListRemains = Array.from({ length: oldList.length });\n\t\tconst added = [];\n\t\tfor (const obj of newList) {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < oldList.length; i++) if (!oldListRemains[i] && obj === oldList[i]) {\n\t\t\t\toldListRemains[i] = true;\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!found) added.push(obj);\n\t\t}\n\t\tconst removed = oldList.filter((_$1, i) => !oldListRemains[i]);\n\t\tcb(newList, oldList, added, removed, onCleanup);\n\t\toldList = [...newList];\n\t}, options);\n}\n\n//#endregion\n//#region watchAtMost/index.ts\nfunction watchAtMost(source, cb, options) {\n\tconst { count,...watchOptions } = options;\n\tconst current = shallowRef(0);\n\tconst { stop, resume, pause } = watchWithFilter(source, (...args) => {\n\t\tcurrent.value += 1;\n\t\tif (current.value >= toValue(count)) nextTick(() => stop());\n\t\tcb(...args);\n\t}, watchOptions);\n\treturn {\n\t\tcount: current,\n\t\tstop,\n\t\tresume,\n\t\tpause\n\t};\n}\n\n//#endregion\n//#region watchDebounced/index.ts\nfunction watchDebounced(source, cb, options = {}) {\n\tconst { debounce = 0, maxWait = void 0,...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: debounceFilter(debounce, { maxWait })\n\t});\n}\n/** @deprecated use `watchDebounced` instead */\nconst debouncedWatch = watchDebounced;\n\n//#endregion\n//#region watchDeep/index.ts\n/**\n* Shorthand for watching value with {deep: true}\n*\n* @see https://vueuse.org/watchDeep\n*/\nfunction watchDeep(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tdeep: true\n\t});\n}\n\n//#endregion\n//#region watchIgnorable/index.ts\nfunction watchIgnorable(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter,...watchOptions } = options;\n\tconst filteredCb = createFilterWrapper(eventFilter, cb);\n\tlet ignoreUpdates;\n\tlet ignorePrevAsyncUpdates;\n\tlet stop;\n\tif (watchOptions.flush === \"sync\") {\n\t\tlet ignore = false;\n\t\tignorePrevAsyncUpdates = () => {};\n\t\tignoreUpdates = (updater) => {\n\t\t\tignore = true;\n\t\t\tupdater();\n\t\t\tignore = false;\n\t\t};\n\t\tstop = watch(source, (...args) => {\n\t\t\tif (!ignore) filteredCb(...args);\n\t\t}, watchOptions);\n\t} else {\n\t\tconst disposables = [];\n\t\tlet ignoreCounter = 0;\n\t\tlet syncCounter = 0;\n\t\tignorePrevAsyncUpdates = () => {\n\t\t\tignoreCounter = syncCounter;\n\t\t};\n\t\tdisposables.push(watch(source, () => {\n\t\t\tsyncCounter++;\n\t\t}, {\n\t\t\t...watchOptions,\n\t\t\tflush: \"sync\"\n\t\t}));\n\t\tignoreUpdates = (updater) => {\n\t\t\tconst syncCounterPrev = syncCounter;\n\t\t\tupdater();\n\t\t\tignoreCounter += syncCounter - syncCounterPrev;\n\t\t};\n\t\tdisposables.push(watch(source, (...args) => {\n\t\t\tconst ignore = ignoreCounter > 0 && ignoreCounter === syncCounter;\n\t\t\tignoreCounter = 0;\n\t\t\tsyncCounter = 0;\n\t\t\tif (ignore) return;\n\t\t\tfilteredCb(...args);\n\t\t}, watchOptions));\n\t\tstop = () => {\n\t\t\tdisposables.forEach((fn) => fn());\n\t\t};\n\t}\n\treturn {\n\t\tstop,\n\t\tignoreUpdates,\n\t\tignorePrevAsyncUpdates\n\t};\n}\n/** @deprecated use `watchIgnorable` instead */\nconst ignorableWatch = watchIgnorable;\n\n//#endregion\n//#region watchImmediate/index.ts\n/**\n* Shorthand for watching value with {immediate: true}\n*\n* @see https://vueuse.org/watchImmediate\n*/\nfunction watchImmediate(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\timmediate: true\n\t});\n}\n\n//#endregion\n//#region watchOnce/index.ts\n/**\n* Shorthand for watching value with { once: true }\n*\n* @see https://vueuse.org/watchOnce\n*/\nfunction watchOnce(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tonce: true\n\t});\n}\n\n//#endregion\n//#region watchThrottled/index.ts\nfunction watchThrottled(source, cb, options = {}) {\n\tconst { throttle = 0, trailing = true, leading = true,...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: throttleFilter(throttle, trailing, leading)\n\t});\n}\n/** @deprecated use `watchThrottled` instead */\nconst throttledWatch = watchThrottled;\n\n//#endregion\n//#region watchTriggerable/index.ts\nfunction watchTriggerable(source, cb, options = {}) {\n\tlet cleanupFn;\n\tfunction onEffect() {\n\t\tif (!cleanupFn) return;\n\t\tconst fn = cleanupFn;\n\t\tcleanupFn = void 0;\n\t\tfn();\n\t}\n\t/** Register the function `cleanupFn` */\n\tfunction onCleanup(callback) {\n\t\tcleanupFn = callback;\n\t}\n\tconst _cb = (value, oldValue) => {\n\t\tonEffect();\n\t\treturn cb(value, oldValue, onCleanup);\n\t};\n\tconst res = watchIgnorable(source, _cb, options);\n\tconst { ignoreUpdates } = res;\n\tconst trigger = () => {\n\t\tlet res$1;\n\t\tignoreUpdates(() => {\n\t\t\tres$1 = _cb(getWatchSources(source), getOldValue(source));\n\t\t});\n\t\treturn res$1;\n\t};\n\treturn {\n\t\t...res,\n\t\ttrigger\n\t};\n}\nfunction getWatchSources(sources) {\n\tif (isReactive(sources)) return sources;\n\tif (Array.isArray(sources)) return sources.map((item) => toValue(item));\n\treturn toValue(sources);\n}\nfunction getOldValue(source) {\n\treturn Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\n//#endregion\n//#region whenever/index.ts\n/**\n* Shorthand for watching value to be truthy\n*\n* @see https://vueuse.org/whenever\n*/\nfunction whenever(source, cb, options) {\n\tconst stop = watch(source, (v, ov, onInvalidate) => {\n\t\tif (v) {\n\t\t\tif (options === null || options === void 0 ? void 0 : options.once) nextTick(() => stop());\n\t\t\tcb(v, ov, onInvalidate);\n\t\t}\n\t}, {\n\t\t...options,\n\t\tonce: false\n\t});\n\treturn stop;\n}\n\n//#endregion\nexport { assert, autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, createReactiveFn, createRef, createSharedComposable, createSingletonPromise, debounceFilter, debouncedRef, debouncedWatch, eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refManualReset, refThrottled, refWithControl, set, syncRef, syncRefs, throttleFilter, throttledRef, throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };","import { bypassFilter, camelize, clamp, computedWithControl, containsProp, createEventHook, createFilterWrapper, createRef, createSingletonPromise, debounceFilter, hasOwn, identity, increaseWithUnit, injectLocal, isClient, isDef, isIOS, isObject, isWorker, makeDestructurable, noop, notNullish, objectEntries, objectOmit, objectPick, pausableFilter, pausableWatch, promiseTimeout, provideLocal, pxValue, syncRef, throttleFilter, timestamp, toArray, toRef, toRefs, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useDebounceFn, useIntervalFn, useThrottleFn, useTimeoutFn, watchIgnorable, watchImmediate, watchOnce, watchWithFilter, whenever } from \"@vueuse/shared\";\nimport { Fragment, TransitionGroup, computed, customRef, defineComponent, getCurrentInstance, getCurrentScope, h, hasInjectionContext, inject, isReadonly, isRef, markRaw, nextTick, onBeforeUpdate, onMounted, onUpdated, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, toRaw, toValue, unref, watch, watchEffect } from \"vue\";\n\nexport * from \"@vueuse/shared\"\n\n//#region computedAsync/index.ts\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n\tvar _globalThis$reportErr;\n\tlet options;\n\tif (isRef(optionsOrRef)) options = { evaluating: optionsOrRef };\n\telse options = optionsOrRef || {};\n\tconst { lazy = false, flush = \"sync\", evaluating = void 0, shallow = true, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop } = options;\n\tconst started = shallowRef(!lazy);\n\tconst current = shallow ? shallowRef(initialState) : ref(initialState);\n\tlet counter = 0;\n\twatchEffect(async (onInvalidate) => {\n\t\tif (!started.value) return;\n\t\tcounter++;\n\t\tconst counterAtBeginning = counter;\n\t\tlet hasFinished = false;\n\t\tif (evaluating) Promise.resolve().then(() => {\n\t\t\tevaluating.value = true;\n\t\t});\n\t\ttry {\n\t\t\tconst result = await evaluationCallback((cancelCallback) => {\n\t\t\t\tonInvalidate(() => {\n\t\t\t\t\tif (evaluating) evaluating.value = false;\n\t\t\t\t\tif (!hasFinished) cancelCallback();\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (counterAtBeginning === counter) current.value = result;\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (evaluating && counterAtBeginning === counter) evaluating.value = false;\n\t\t\thasFinished = true;\n\t\t}\n\t}, { flush });\n\tif (lazy) return computed(() => {\n\t\tstarted.value = true;\n\t\treturn current.value;\n\t});\n\telse return current;\n}\n/** @deprecated use `computedAsync` instead */\nconst asyncComputed = computedAsync;\n\n//#endregion\n//#region computedInject/index.ts\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n\tlet source = inject(key);\n\tif (defaultSource) source = inject(key, defaultSource);\n\tif (treatDefaultAsFactory) source = inject(key, defaultSource, treatDefaultAsFactory);\n\tif (typeof options === \"function\") return computed((oldValue) => options(source, oldValue));\n\telse return computed({\n\t\tget: (oldValue) => options.get(source, oldValue),\n\t\tset: options.set\n\t});\n}\n\n//#endregion\n//#region createReusableTemplate/index.ts\n/**\n* This function creates `define` and `reuse` components in pair,\n* It also allow to pass a generic to bind with type.\n*\n* @see https://vueuse.org/createReusableTemplate\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createReusableTemplate(options = {}) {\n\tconst { inheritAttrs = true } = options;\n\tconst render = shallowRef();\n\tconst define = defineComponent({ setup(_, { slots }) {\n\t\treturn () => {\n\t\t\trender.value = slots.default;\n\t\t};\n\t} });\n\tconst reuse = defineComponent({\n\t\tinheritAttrs,\n\t\tprops: options.props,\n\t\tsetup(props, { attrs, slots }) {\n\t\t\treturn () => {\n\t\t\t\tvar _render$value;\n\t\t\t\tif (!render.value && true) throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n\t\t\t\tconst vnode = (_render$value = render.value) === null || _render$value === void 0 ? void 0 : _render$value.call(render, {\n\t\t\t\t\t...options.props == null ? keysToCamelKebabCase(attrs) : props,\n\t\t\t\t\t$slots: slots\n\t\t\t\t});\n\t\t\t\treturn inheritAttrs && (vnode === null || vnode === void 0 ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n\t\t\t};\n\t\t}\n\t});\n\treturn makeDestructurable({\n\t\tdefine,\n\t\treuse\n\t}, [define, reuse]);\n}\nfunction keysToCamelKebabCase(obj) {\n\tconst newObj = {};\n\tfor (const key in obj) newObj[camelize(key)] = obj[key];\n\treturn newObj;\n}\n\n//#endregion\n//#region createTemplatePromise/index.ts\n/**\n* Creates a template promise component.\n*\n* @see https://vueuse.org/createTemplatePromise\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createTemplatePromise(options = {}) {\n\tlet index = 0;\n\tconst instances = ref([]);\n\tfunction create(...args) {\n\t\tconst props = shallowReactive({\n\t\t\tkey: index++,\n\t\t\targs,\n\t\t\tpromise: void 0,\n\t\t\tresolve: () => {},\n\t\t\treject: () => {},\n\t\t\tisResolving: false,\n\t\t\toptions\n\t\t});\n\t\tinstances.value.push(props);\n\t\tprops.promise = new Promise((_resolve, _reject) => {\n\t\t\tprops.resolve = (v) => {\n\t\t\t\tprops.isResolving = true;\n\t\t\t\treturn _resolve(v);\n\t\t\t};\n\t\t\tprops.reject = _reject;\n\t\t}).finally(() => {\n\t\t\tprops.promise = void 0;\n\t\t\tconst index$1 = instances.value.indexOf(props);\n\t\t\tif (index$1 !== -1) instances.value.splice(index$1, 1);\n\t\t});\n\t\treturn props.promise;\n\t}\n\tfunction start(...args) {\n\t\tif (options.singleton && instances.value.length > 0) return instances.value[0].promise;\n\t\treturn create(...args);\n\t}\n\tconst component = defineComponent((_, { slots }) => {\n\t\tconst renderList = () => instances.value.map((props) => {\n\t\t\tvar _slots$default;\n\t\t\treturn h(Fragment, { key: props.key }, (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots, props));\n\t\t});\n\t\tif (options.transition) return () => h(TransitionGroup, options.transition, renderList);\n\t\treturn renderList;\n\t});\n\tcomponent.start = start;\n\treturn component;\n}\n\n//#endregion\n//#region createUnrefFn/index.ts\n/**\n* Make a plain function accepting ref and raw values as arguments.\n* Returns the same value the unconverted function returns, with proper typing.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createUnrefFn(fn) {\n\treturn function(...args) {\n\t\treturn fn.apply(this, args.map((i) => toValue(i)));\n\t};\n}\n\n//#endregion\n//#region _configurable.ts\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\n//#endregion\n//#region unrefElement/index.ts\n/**\n* Get the dom element of a ref of element or Vue component instance\n*\n* @param elRef\n*/\nfunction unrefElement(elRef) {\n\tvar _$el;\n\tconst plain = toValue(elRef);\n\treturn (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;\n}\n\n//#endregion\n//#region useEventListener/index.ts\nfunction useEventListener(...args) {\n\tconst cleanups = [];\n\tconst cleanup = () => {\n\t\tcleanups.forEach((fn) => fn());\n\t\tcleanups.length = 0;\n\t};\n\tconst register = (el, event, listener, options) => {\n\t\tel.addEventListener(event, listener, options);\n\t\treturn () => el.removeEventListener(event, listener, options);\n\t};\n\tconst firstParamTargets = computed(() => {\n\t\tconst test = toArray(toValue(args[0])).filter((e) => e != null);\n\t\treturn test.every((e) => typeof e !== \"string\") ? test : void 0;\n\t});\n\tconst stopWatch = watchImmediate(() => {\n\t\tvar _firstParamTargets$va, _firstParamTargets$va2;\n\t\treturn [\n\t\t\t(_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),\n\t\t\ttoArray(toValue(firstParamTargets.value ? args[1] : args[0])),\n\t\t\ttoArray(unref(firstParamTargets.value ? args[2] : args[1])),\n\t\t\ttoValue(firstParamTargets.value ? args[3] : args[2])\n\t\t];\n\t}, ([raw_targets, raw_events, raw_listeners, raw_options]) => {\n\t\tcleanup();\n\t\tif (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;\n\t\tconst optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;\n\t\tcleanups.push(...raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone)))));\n\t}, { flush: \"post\" });\n\tconst stop = () => {\n\t\tstopWatch();\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(cleanup);\n\treturn stop;\n}\n\n//#endregion\n//#region onClickOutside/index.ts\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n\tconst { window: window$1 = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;\n\tif (!window$1) return controls ? {\n\t\tstop: noop,\n\t\tcancel: noop,\n\t\ttrigger: noop\n\t} : noop;\n\tif (isIOS && !_iOSWorkaround) {\n\t\t_iOSWorkaround = true;\n\t\tconst listenerOptions = { passive: true };\n\t\tArray.from(window$1.document.body.children).forEach((el) => el.addEventListener(\"click\", noop, listenerOptions));\n\t\twindow$1.document.documentElement.addEventListener(\"click\", noop, listenerOptions);\n\t}\n\tlet shouldListen = true;\n\tconst shouldIgnore = (event) => {\n\t\treturn toValue(ignore).some((target$1) => {\n\t\t\tif (typeof target$1 === \"string\") return Array.from(window$1.document.querySelectorAll(target$1)).some((el) => el === event.target || event.composedPath().includes(el));\n\t\t\telse {\n\t\t\t\tconst el = unrefElement(target$1);\n\t\t\t\treturn el && (event.target === el || event.composedPath().includes(el));\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t* Determines if the given target has multiple root elements.\n\t* Referenced from: https://github.com/vuejs/test-utils/blob/ccb460be55f9f6be05ab708500a41ec8adf6f4bc/src/vue-wrapper.ts#L21\n\t*/\n\tfunction hasMultipleRoots(target$1) {\n\t\tconst vm = toValue(target$1);\n\t\treturn vm && vm.$.subTree.shapeFlag === 16;\n\t}\n\tfunction checkMultipleRoots(target$1, event) {\n\t\tconst vm = toValue(target$1);\n\t\tconst children = vm.$.subTree && vm.$.subTree.children;\n\t\tif (children == null || !Array.isArray(children)) return false;\n\t\treturn children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n\t}\n\tconst listener = (event) => {\n\t\tconst el = unrefElement(target);\n\t\tif (event.target == null) return;\n\t\tif (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return;\n\t\tif (!el || el === event.target || event.composedPath().includes(el)) return;\n\t\tif (\"detail\" in event && event.detail === 0) shouldListen = !shouldIgnore(event);\n\t\tif (!shouldListen) {\n\t\t\tshouldListen = true;\n\t\t\treturn;\n\t\t}\n\t\thandler(event);\n\t};\n\tlet isProcessingClick = false;\n\tconst cleanup = [\n\t\tuseEventListener(window$1, \"click\", (event) => {\n\t\t\tif (!isProcessingClick) {\n\t\t\t\tisProcessingClick = true;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tisProcessingClick = false;\n\t\t\t\t}, 0);\n\t\t\t\tlistener(event);\n\t\t\t}\n\t\t}, {\n\t\t\tpassive: true,\n\t\t\tcapture\n\t\t}),\n\t\tuseEventListener(window$1, \"pointerdown\", (e) => {\n\t\t\tconst el = unrefElement(target);\n\t\t\tshouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n\t\t}, { passive: true }),\n\t\tdetectIframe && useEventListener(window$1, \"blur\", (event) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tvar _window$document$acti;\n\t\t\t\tconst el = unrefElement(target);\n\t\t\t\tif (((_window$document$acti = window$1.document.activeElement) === null || _window$document$acti === void 0 ? void 0 : _window$document$acti.tagName) === \"IFRAME\" && !(el === null || el === void 0 ? void 0 : el.contains(window$1.document.activeElement))) handler(event);\n\t\t\t}, 0);\n\t\t}, { passive: true })\n\t].filter(Boolean);\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\tif (controls) return {\n\t\tstop,\n\t\tcancel: () => {\n\t\t\tshouldListen = false;\n\t\t},\n\t\ttrigger: (event) => {\n\t\t\tshouldListen = true;\n\t\t\tlistener(event);\n\t\t\tshouldListen = false;\n\t\t}\n\t};\n\treturn stop;\n}\n\n//#endregion\n//#region useMounted/index.ts\n/**\n* Mounted state in ref.\n*\n* @see https://vueuse.org/useMounted\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMounted() {\n\tconst isMounted = shallowRef(false);\n\tconst instance = getCurrentInstance();\n\tif (instance) onMounted(() => {\n\t\tisMounted.value = true;\n\t}, instance);\n\treturn isMounted;\n}\n\n//#endregion\n//#region useSupported/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSupported(callback) {\n\tconst isMounted = useMounted();\n\treturn computed(() => {\n\t\tisMounted.value;\n\t\treturn Boolean(callback());\n\t});\n}\n\n//#endregion\n//#region useMutationObserver/index.ts\n/**\n* Watch for changes being made to the DOM tree.\n*\n* @see https://vueuse.org/useMutationObserver\n* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN\n* @param target\n* @param callback\n* @param options\n*/\nfunction useMutationObserver(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow,...mutationOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"MutationObserver\" in window$1);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst items = toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t\treturn new Set(items);\n\t}), (newTargets) => {\n\t\tcleanup();\n\t\tif (isSupported.value && newTargets.size) {\n\t\t\tobserver = new MutationObserver(callback);\n\t\t\tnewTargets.forEach((el) => observer.observe(el, mutationOptions));\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst takeRecords = () => {\n\t\treturn observer === null || observer === void 0 ? void 0 : observer.takeRecords();\n\t};\n\tconst stop = () => {\n\t\tstopWatch();\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop,\n\t\ttakeRecords\n\t};\n}\n\n//#endregion\n//#region onElementRemoval/index.ts\n/**\n* Fires when the element or any element containing it is removed.\n*\n* @param target\n* @param callback\n* @param options\n*/\nfunction onElementRemoval(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow, document: document$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.document, flush = \"sync\" } = options;\n\tif (!window$1 || !document$1) return noop;\n\tlet stopFn;\n\tconst cleanupAndUpdate = (fn) => {\n\t\tstopFn === null || stopFn === void 0 || stopFn();\n\t\tstopFn = fn;\n\t};\n\tconst stopWatch = watchEffect(() => {\n\t\tconst el = unrefElement(target);\n\t\tif (el) {\n\t\t\tconst { stop } = useMutationObserver(document$1, (mutationsList) => {\n\t\t\t\tif (mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el))) callback(mutationsList);\n\t\t\t}, {\n\t\t\t\twindow: window$1,\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true\n\t\t\t});\n\t\t\tcleanupAndUpdate(stop);\n\t\t}\n\t}, { flush });\n\tconst stopHandle = () => {\n\t\tstopWatch();\n\t\tcleanupAndUpdate();\n\t};\n\ttryOnScopeDispose(stopHandle);\n\treturn stopHandle;\n}\n\n//#endregion\n//#region onKeyStroke/index.ts\nfunction createKeyPredicate(keyFilter) {\n\tif (typeof keyFilter === \"function\") return keyFilter;\n\telse if (typeof keyFilter === \"string\") return (event) => event.key === keyFilter;\n\telse if (Array.isArray(keyFilter)) return (event) => keyFilter.includes(event.key);\n\treturn () => true;\n}\nfunction onKeyStroke(...args) {\n\tlet key;\n\tlet handler;\n\tlet options = {};\n\tif (args.length === 3) {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t\toptions = args[2];\n\t} else if (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tkey = true;\n\t\thandler = args[0];\n\t\toptions = args[1];\n\t} else {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t}\n\telse {\n\t\tkey = true;\n\t\thandler = args[0];\n\t}\n\tconst { target = defaultWindow, eventName = \"keydown\", passive = false, dedupe = false } = options;\n\tconst predicate = createKeyPredicate(key);\n\tconst listener = (e) => {\n\t\tif (e.repeat && toValue(dedupe)) return;\n\t\tif (predicate(e)) handler(e);\n\t};\n\treturn useEventListener(target, eventName, listener, passive);\n}\n/**\n* Listen to the keydown event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyDown(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keydown\"\n\t});\n}\n/**\n* Listen to the keypress event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyPressed(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keypress\"\n\t});\n}\n/**\n* Listen to the keyup event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyUp(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keyup\"\n\t});\n}\n\n//#endregion\n//#region onLongPress/index.ts\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n\tvar _options$modifiers10, _options$modifiers11;\n\tconst elementRef = computed(() => unrefElement(target));\n\tlet timeout;\n\tlet posStart;\n\tlet startTimestamp;\n\tlet hasLongPressed = false;\n\tfunction clear() {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = void 0;\n\t\t}\n\t\tposStart = void 0;\n\t\tstartTimestamp = void 0;\n\t\thasLongPressed = false;\n\t}\n\tfunction getDelay(ev) {\n\t\tconst delay = options === null || options === void 0 ? void 0 : options.delay;\n\t\tif (typeof delay === \"function\") return delay(ev);\n\t\treturn delay !== null && delay !== void 0 ? delay : DEFAULT_DELAY;\n\t}\n\tfunction onRelease(ev) {\n\t\tvar _options$modifiers, _options$modifiers2, _options$modifiers3;\n\t\tconst [_startTimestamp, _posStart, _hasLongPressed] = [\n\t\t\tstartTimestamp,\n\t\t\tposStart,\n\t\t\thasLongPressed\n\t\t];\n\t\tclear();\n\t\tif (!(options === null || options === void 0 ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp) return;\n\t\tif ((options === null || options === void 0 || (_options$modifiers = options.modifiers) === null || _options$modifiers === void 0 ? void 0 : _options$modifiers.self) && ev.target !== elementRef.value) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers2 = options.modifiers) === null || _options$modifiers2 === void 0 ? void 0 : _options$modifiers2.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers3 = options.modifiers) === null || _options$modifiers3 === void 0 ? void 0 : _options$modifiers3.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - _posStart.x;\n\t\tconst dy = ev.y - _posStart.y;\n\t\tconst distance = Math.sqrt(dx * dx + dy * dy);\n\t\toptions.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n\t}\n\tfunction onDown(ev) {\n\t\tvar _options$modifiers4, _options$modifiers5, _options$modifiers6;\n\t\tif ((options === null || options === void 0 || (_options$modifiers4 = options.modifiers) === null || _options$modifiers4 === void 0 ? void 0 : _options$modifiers4.self) && ev.target !== elementRef.value) return;\n\t\tclear();\n\t\tif (options === null || options === void 0 || (_options$modifiers5 = options.modifiers) === null || _options$modifiers5 === void 0 ? void 0 : _options$modifiers5.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers6 = options.modifiers) === null || _options$modifiers6 === void 0 ? void 0 : _options$modifiers6.stop) ev.stopPropagation();\n\t\tposStart = {\n\t\t\tx: ev.x,\n\t\t\ty: ev.y\n\t\t};\n\t\tstartTimestamp = ev.timeStamp;\n\t\ttimeout = setTimeout(() => {\n\t\t\thasLongPressed = true;\n\t\t\thandler(ev);\n\t\t}, getDelay(ev));\n\t}\n\tfunction onMove(ev) {\n\t\tvar _options$modifiers7, _options$modifiers8, _options$modifiers9, _options$distanceThre;\n\t\tif ((options === null || options === void 0 || (_options$modifiers7 = options.modifiers) === null || _options$modifiers7 === void 0 ? void 0 : _options$modifiers7.self) && ev.target !== elementRef.value) return;\n\t\tif (!posStart || (options === null || options === void 0 ? void 0 : options.distanceThreshold) === false) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers8 = options.modifiers) === null || _options$modifiers8 === void 0 ? void 0 : _options$modifiers8.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers9 = options.modifiers) === null || _options$modifiers9 === void 0 ? void 0 : _options$modifiers9.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - posStart.x;\n\t\tconst dy = ev.y - posStart.y;\n\t\tif (Math.sqrt(dx * dx + dy * dy) >= ((_options$distanceThre = options === null || options === void 0 ? void 0 : options.distanceThreshold) !== null && _options$distanceThre !== void 0 ? _options$distanceThre : DEFAULT_THRESHOLD)) clear();\n\t}\n\tconst listenerOptions = {\n\t\tcapture: options === null || options === void 0 || (_options$modifiers10 = options.modifiers) === null || _options$modifiers10 === void 0 ? void 0 : _options$modifiers10.capture,\n\t\tonce: options === null || options === void 0 || (_options$modifiers11 = options.modifiers) === null || _options$modifiers11 === void 0 ? void 0 : _options$modifiers11.once\n\t};\n\tconst cleanup = [\n\t\tuseEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n\t\tuseEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n\t\tuseEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n\t];\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\treturn stop;\n}\n\n//#endregion\n//#region onStartTyping/index.ts\nfunction isFocusedElementEditable() {\n\tconst { activeElement, body } = document;\n\tif (!activeElement) return false;\n\tif (activeElement === body) return false;\n\tswitch (activeElement.tagName) {\n\t\tcase \"INPUT\":\n\t\tcase \"TEXTAREA\": return true;\n\t}\n\treturn activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({ keyCode, metaKey, ctrlKey, altKey }) {\n\tif (metaKey || ctrlKey || altKey) return false;\n\tif (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) return true;\n\tif (keyCode >= 65 && keyCode <= 90) return true;\n\treturn false;\n}\n/**\n* Fires when users start typing on non-editable elements.\n*\n* @see https://vueuse.org/onStartTyping\n* @param callback\n* @param options\n*/\nfunction onStartTyping(callback, options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst keydown = (event) => {\n\t\tif (!isFocusedElementEditable() && isTypedCharValid(event)) callback(event);\n\t};\n\tif (document$1) useEventListener(document$1, \"keydown\", keydown, { passive: true });\n}\n\n//#endregion\n//#region templateRef/index.ts\n/**\n* @deprecated Use Vue's built-in `useTemplateRef` instead.\n*\n* Shorthand for binding ref to template element.\n*\n* @see https://vueuse.org/templateRef\n* @param key\n* @param initialValue\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction templateRef(key, initialValue = null) {\n\tconst instance = getCurrentInstance();\n\tlet _trigger = () => {};\n\tconst element = customRef((track, trigger) => {\n\t\t_trigger = trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tvar _instance$proxy$$refs, _instance$proxy;\n\t\t\t\ttrack();\n\t\t\t\treturn (_instance$proxy$$refs = instance === null || instance === void 0 || (_instance$proxy = instance.proxy) === null || _instance$proxy === void 0 ? void 0 : _instance$proxy.$refs[key]) !== null && _instance$proxy$$refs !== void 0 ? _instance$proxy$$refs : initialValue;\n\t\t\t},\n\t\t\tset() {}\n\t\t};\n\t});\n\ttryOnMounted(_trigger);\n\tonUpdated(_trigger);\n\treturn element;\n}\n\n//#endregion\n//#region useActiveElement/index.ts\n/**\n* Reactive `document.activeElement`\n*\n* @see https://vueuse.org/useActiveElement\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useActiveElement(options = {}) {\n\tvar _options$document;\n\tconst { window: window$1 = defaultWindow, deep = true, triggerOnRemoval = false } = options;\n\tconst document$1 = (_options$document = options.document) !== null && _options$document !== void 0 ? _options$document : window$1 === null || window$1 === void 0 ? void 0 : window$1.document;\n\tconst getDeepActiveElement = () => {\n\t\tlet element = document$1 === null || document$1 === void 0 ? void 0 : document$1.activeElement;\n\t\tif (deep) {\n\t\t\tvar _element$shadowRoot;\n\t\t\twhile (element === null || element === void 0 ? void 0 : element.shadowRoot) element = element === null || element === void 0 || (_element$shadowRoot = element.shadowRoot) === null || _element$shadowRoot === void 0 ? void 0 : _element$shadowRoot.activeElement;\n\t\t}\n\t\treturn element;\n\t};\n\tconst activeElement = shallowRef();\n\tconst trigger = () => {\n\t\tactiveElement.value = getDeepActiveElement();\n\t};\n\tif (window$1) {\n\t\tconst listenerOptions = {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t};\n\t\tuseEventListener(window$1, \"blur\", (event) => {\n\t\t\tif (event.relatedTarget !== null) return;\n\t\t\ttrigger();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window$1, \"focus\", trigger, listenerOptions);\n\t}\n\tif (triggerOnRemoval) onElementRemoval(activeElement, trigger, { document: document$1 });\n\ttrigger();\n\treturn activeElement;\n}\n\n//#endregion\n//#region useRafFn/index.ts\n/**\n* Call function on every `requestAnimationFrame`. With controls of pausing and resuming.\n*\n* @see https://vueuse.org/useRafFn\n* @param fn\n* @param options\n*/\nfunction useRafFn(fn, options = {}) {\n\tconst { immediate = true, fpsLimit = void 0, window: window$1 = defaultWindow, once = false } = options;\n\tconst isActive = shallowRef(false);\n\tconst intervalLimit = computed(() => {\n\t\treturn fpsLimit ? 1e3 / toValue(fpsLimit) : null;\n\t});\n\tlet previousFrameTimestamp = 0;\n\tlet rafId = null;\n\tfunction loop(timestamp$1) {\n\t\tif (!isActive.value || !window$1) return;\n\t\tif (!previousFrameTimestamp) previousFrameTimestamp = timestamp$1;\n\t\tconst delta = timestamp$1 - previousFrameTimestamp;\n\t\tif (intervalLimit.value && delta < intervalLimit.value) {\n\t\t\trafId = window$1.requestAnimationFrame(loop);\n\t\t\treturn;\n\t\t}\n\t\tpreviousFrameTimestamp = timestamp$1;\n\t\tfn({\n\t\t\tdelta,\n\t\t\ttimestamp: timestamp$1\n\t\t});\n\t\tif (once) {\n\t\t\tisActive.value = false;\n\t\t\trafId = null;\n\t\t\treturn;\n\t\t}\n\t\trafId = window$1.requestAnimationFrame(loop);\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value && window$1) {\n\t\t\tisActive.value = true;\n\t\t\tpreviousFrameTimestamp = 0;\n\t\t\trafId = window$1.requestAnimationFrame(loop);\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tif (rafId != null && window$1) {\n\t\t\twindow$1.cancelAnimationFrame(rafId);\n\t\t\trafId = null;\n\t\t}\n\t}\n\tif (immediate) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: readonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n\n//#endregion\n//#region useAnimate/index.ts\n/**\n* Reactive Web Animations API\n*\n* @see https://vueuse.org/useAnimate\n* @param target\n* @param keyframes\n* @param options\n*/\nfunction useAnimate(target, keyframes, options) {\n\tlet config;\n\tlet animateOptions;\n\tif (isObject(options)) {\n\t\tconfig = options;\n\t\tanimateOptions = objectOmit(options, [\n\t\t\t\"window\",\n\t\t\t\"immediate\",\n\t\t\t\"commitStyles\",\n\t\t\t\"persist\",\n\t\t\t\"onReady\",\n\t\t\t\"onError\"\n\t\t]);\n\t} else {\n\t\tconfig = { duration: options };\n\t\tanimateOptions = options;\n\t}\n\tconst { window: window$1 = defaultWindow, immediate = true, commitStyles, persist, playbackRate: _playbackRate = 1, onReady, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = config;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && HTMLElement && \"animate\" in HTMLElement.prototype);\n\tconst animate = shallowRef(void 0);\n\tconst store = shallowReactive({\n\t\tstartTime: null,\n\t\tcurrentTime: null,\n\t\ttimeline: null,\n\t\tplaybackRate: _playbackRate,\n\t\tpending: false,\n\t\tplayState: immediate ? \"idle\" : \"paused\",\n\t\treplaceState: \"active\"\n\t});\n\tconst pending = computed(() => store.pending);\n\tconst playState = computed(() => store.playState);\n\tconst replaceState = computed(() => store.replaceState);\n\tconst startTime = computed({\n\t\tget() {\n\t\t\treturn store.startTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.startTime = value;\n\t\t\tif (animate.value) animate.value.startTime = value;\n\t\t}\n\t});\n\tconst currentTime = computed({\n\t\tget() {\n\t\t\treturn store.currentTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.currentTime = value;\n\t\t\tif (animate.value) {\n\t\t\t\tanimate.value.currentTime = value;\n\t\t\t\tsyncResume();\n\t\t\t}\n\t\t}\n\t});\n\tconst timeline = computed({\n\t\tget() {\n\t\t\treturn store.timeline;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.timeline = value;\n\t\t\tif (animate.value) animate.value.timeline = value;\n\t\t}\n\t});\n\tconst playbackRate = computed({\n\t\tget() {\n\t\t\treturn store.playbackRate;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.playbackRate = value;\n\t\t\tif (animate.value) animate.value.playbackRate = value;\n\t\t}\n\t});\n\tconst play = () => {\n\t\tif (animate.value) try {\n\t\t\tanimate.value.play();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t\telse update();\n\t};\n\tconst pause = () => {\n\t\ttry {\n\t\t\tvar _animate$value;\n\t\t\t(_animate$value = animate.value) === null || _animate$value === void 0 || _animate$value.pause();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst reverse = () => {\n\t\tif (!animate.value) update();\n\t\ttry {\n\t\t\tvar _animate$value2;\n\t\t\t(_animate$value2 = animate.value) === null || _animate$value2 === void 0 || _animate$value2.reverse();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst finish = () => {\n\t\ttry {\n\t\t\tvar _animate$value3;\n\t\t\t(_animate$value3 = animate.value) === null || _animate$value3 === void 0 || _animate$value3.finish();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst cancel = () => {\n\t\ttry {\n\t\t\tvar _animate$value4;\n\t\t\t(_animate$value4 = animate.value) === null || _animate$value4 === void 0 || _animate$value4.cancel();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\twatch(() => unrefElement(target), (el) => {\n\t\tif (el) update(true);\n\t\telse animate.value = void 0;\n\t});\n\twatch(() => keyframes, (value) => {\n\t\tif (animate.value) {\n\t\t\tupdate();\n\t\t\tconst targetEl = unrefElement(target);\n\t\t\tif (targetEl) animate.value.effect = new KeyframeEffect(targetEl, toValue(value), animateOptions);\n\t\t}\n\t}, { deep: true });\n\ttryOnMounted(() => update(true), false);\n\ttryOnScopeDispose(cancel);\n\tfunction update(init) {\n\t\tconst el = unrefElement(target);\n\t\tif (!isSupported.value || !el) return;\n\t\tif (!animate.value) animate.value = el.animate(toValue(keyframes), animateOptions);\n\t\tif (persist) animate.value.persist();\n\t\tif (_playbackRate !== 1) animate.value.playbackRate = _playbackRate;\n\t\tif (init && !immediate) animate.value.pause();\n\t\telse syncResume();\n\t\tonReady === null || onReady === void 0 || onReady(animate.value);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(animate, [\n\t\t\"cancel\",\n\t\t\"finish\",\n\t\t\"remove\"\n\t], syncPause, listenerOptions);\n\tuseEventListener(animate, \"finish\", () => {\n\t\tvar _animate$value5;\n\t\tif (commitStyles) (_animate$value5 = animate.value) === null || _animate$value5 === void 0 || _animate$value5.commitStyles();\n\t}, listenerOptions);\n\tconst { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n\t\tif (!animate.value) return;\n\t\tstore.pending = animate.value.pending;\n\t\tstore.playState = animate.value.playState;\n\t\tstore.replaceState = animate.value.replaceState;\n\t\tstore.startTime = animate.value.startTime;\n\t\tstore.currentTime = animate.value.currentTime;\n\t\tstore.timeline = animate.value.timeline;\n\t\tstore.playbackRate = animate.value.playbackRate;\n\t}, { immediate: false });\n\tfunction syncResume() {\n\t\tif (isSupported.value) resumeRef();\n\t}\n\tfunction syncPause() {\n\t\tif (isSupported.value && window$1) window$1.requestAnimationFrame(pauseRef);\n\t}\n\treturn {\n\t\tisSupported,\n\t\tanimate,\n\t\tplay,\n\t\tpause,\n\t\treverse,\n\t\tfinish,\n\t\tcancel,\n\t\tpending,\n\t\tplayState,\n\t\treplaceState,\n\t\tstartTime,\n\t\tcurrentTime,\n\t\ttimeline,\n\t\tplaybackRate\n\t};\n}\n\n//#endregion\n//#region useAsyncQueue/index.ts\n/**\n* Asynchronous queue task controller.\n*\n* @see https://vueuse.org/useAsyncQueue\n* @param tasks\n* @param options\n*/\nfunction useAsyncQueue(tasks, options) {\n\tconst { interrupt = true, onError = noop, onFinished = noop, signal } = options || {};\n\tconst promiseState = {\n\t\taborted: \"aborted\",\n\t\tfulfilled: \"fulfilled\",\n\t\tpending: \"pending\",\n\t\trejected: \"rejected\"\n\t};\n\tconst result = reactive(Array.from(Array.from({ length: tasks.length }), () => ({\n\t\tstate: promiseState.pending,\n\t\tdata: null\n\t})));\n\tconst activeIndex = shallowRef(-1);\n\tif (!tasks || tasks.length === 0) {\n\t\tonFinished();\n\t\treturn {\n\t\t\tactiveIndex,\n\t\t\tresult\n\t\t};\n\t}\n\tfunction updateResult(state, res) {\n\t\tactiveIndex.value++;\n\t\tresult[activeIndex.value].data = res;\n\t\tresult[activeIndex.value].state = state;\n\t}\n\ttasks.reduce((prev, curr) => {\n\t\treturn prev.then((prevRes) => {\n\t\t\tvar _result$activeIndex$v;\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, /* @__PURE__ */ new Error(\"aborted\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (((_result$activeIndex$v = result[activeIndex.value]) === null || _result$activeIndex$v === void 0 ? void 0 : _result$activeIndex$v.state) === promiseState.rejected && interrupt) {\n\t\t\t\tonFinished();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst done = curr(prevRes).then((currentRes) => {\n\t\t\t\tupdateResult(promiseState.fulfilled, currentRes);\n\t\t\t\tif (activeIndex.value === tasks.length - 1) onFinished();\n\t\t\t\treturn currentRes;\n\t\t\t});\n\t\t\tif (!signal) return done;\n\t\t\treturn Promise.race([done, whenAborted(signal)]);\n\t\t}).catch((e) => {\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, e);\n\t\t\t\treturn e;\n\t\t\t}\n\t\t\tupdateResult(promiseState.rejected, e);\n\t\t\tonError();\n\t\t\treturn e;\n\t\t});\n\t}, Promise.resolve());\n\treturn {\n\t\tactiveIndex,\n\t\tresult\n\t};\n}\nfunction whenAborted(signal) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst error = /* @__PURE__ */ new Error(\"aborted\");\n\t\tif (signal.aborted) reject(error);\n\t\telse signal.addEventListener(\"abort\", () => reject(error), { once: true });\n\t});\n}\n\n//#endregion\n//#region useAsyncState/index.ts\n/**\n* Reactive async state. Will not block your setup function and will trigger changes once\n* the promise is ready.\n*\n* @see https://vueuse.org/useAsyncState\n* @param promise The promise / async function to be resolved\n* @param initialState The initial state, used until the first evaluation finishes\n* @param options\n*/\nfunction useAsyncState(promise, initialState, options) {\n\tvar _globalThis$reportErr;\n\tconst { immediate = true, delay = 0, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop, onSuccess = noop, resetOnExecute = true, shallow = true, throwError } = options !== null && options !== void 0 ? options : {};\n\tconst state = shallow ? shallowRef(initialState) : ref(initialState);\n\tconst isReady = shallowRef(false);\n\tconst isLoading = shallowRef(false);\n\tconst error = shallowRef(void 0);\n\tlet executionsCount = 0;\n\tasync function execute(delay$1 = 0, ...args) {\n\t\tconst executionId = executionsCount += 1;\n\t\tif (resetOnExecute) state.value = toValue(initialState);\n\t\terror.value = void 0;\n\t\tisReady.value = false;\n\t\tisLoading.value = true;\n\t\tif (delay$1 > 0) await promiseTimeout(delay$1);\n\t\tconst _promise = typeof promise === \"function\" ? promise(...args) : promise;\n\t\ttry {\n\t\t\tconst data = await _promise;\n\t\t\tif (executionId === executionsCount) {\n\t\t\t\tstate.value = data;\n\t\t\t\tisReady.value = true;\n\t\t\t}\n\t\t\tonSuccess(data);\n\t\t} catch (e) {\n\t\t\tif (executionId === executionsCount) error.value = e;\n\t\t\tonError(e);\n\t\t\tif (throwError) throw e;\n\t\t} finally {\n\t\t\tif (executionId === executionsCount) isLoading.value = false;\n\t\t}\n\t\treturn state.value;\n\t}\n\tif (immediate) execute(delay);\n\tconst shell = {\n\t\tstate,\n\t\tisReady,\n\t\tisLoading,\n\t\terror,\n\t\texecute,\n\t\texecuteImmediate: (...args) => execute(0, ...args)\n\t};\n\tfunction waitUntilIsLoaded() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilIsLoaded().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region useBase64/serialization.ts\nconst defaults = {\n\tarray: (v) => JSON.stringify(v),\n\tobject: (v) => JSON.stringify(v),\n\tset: (v) => JSON.stringify(Array.from(v)),\n\tmap: (v) => JSON.stringify(Object.fromEntries(v)),\n\tnull: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n\tif (!target) return defaults.null;\n\tif (target instanceof Map) return defaults.map;\n\telse if (target instanceof Set) return defaults.set;\n\telse if (Array.isArray(target)) return defaults.array;\n\telse return defaults.object;\n}\n\n//#endregion\n//#region useBase64/index.ts\nfunction useBase64(target, options) {\n\tconst base64 = shallowRef(\"\");\n\tconst promise = shallowRef();\n\tfunction execute() {\n\t\tif (!isClient) return;\n\t\tpromise.value = new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst _target = toValue(target);\n\t\t\t\tif (_target == null) resolve(\"\");\n\t\t\t\telse if (typeof _target === \"string\") resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n\t\t\t\telse if (_target instanceof Blob) resolve(blobToBase64(_target));\n\t\t\t\telse if (_target instanceof ArrayBuffer) resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n\t\t\t\telse if (_target instanceof HTMLCanvasElement) resolve(_target.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\telse if (_target instanceof HTMLImageElement) {\n\t\t\t\t\tconst img = _target.cloneNode(false);\n\t\t\t\t\timg.crossOrigin = \"Anonymous\";\n\t\t\t\t\timgLoaded(img).then(() => {\n\t\t\t\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\t\t\t\tconst ctx = canvas.getContext(\"2d\");\n\t\t\t\t\t\tcanvas.width = img.width;\n\t\t\t\t\t\tcanvas.height = img.height;\n\t\t\t\t\t\tctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\t\t\t\t\t\tresolve(canvas.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\t\t}).catch(reject);\n\t\t\t\t} else if (typeof _target === \"object\") {\n\t\t\t\t\tconst serialized = ((options === null || options === void 0 ? void 0 : options.serializer) || getDefaultSerialization(_target))(_target);\n\t\t\t\t\treturn resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n\t\t\t\t} else reject(/* @__PURE__ */ new Error(\"target is unsupported types\"));\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t\tpromise.value.then((res) => {\n\t\t\tbase64.value = (options === null || options === void 0 ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n\t\t});\n\t\treturn promise.value;\n\t}\n\tif (isRef(target) || typeof target === \"function\") watch(target, execute, { immediate: true });\n\telse execute();\n\treturn {\n\t\tbase64,\n\t\tpromise,\n\t\texecute\n\t};\n}\nfunction imgLoaded(img) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (!img.complete) {\n\t\t\timg.onload = () => {\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\timg.onerror = reject;\n\t\t} else resolve();\n\t});\n}\nfunction blobToBase64(blob) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst fr = new FileReader();\n\t\tfr.onload = (e) => {\n\t\t\tresolve(e.target.result);\n\t\t};\n\t\tfr.onerror = reject;\n\t\tfr.readAsDataURL(blob);\n\t});\n}\n\n//#endregion\n//#region useBattery/index.ts\n/**\n* Reactive Battery Status API.\n*\n* @see https://vueuse.org/useBattery\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBattery(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst events$1 = [\n\t\t\"chargingchange\",\n\t\t\"chargingtimechange\",\n\t\t\"dischargingtimechange\",\n\t\t\"levelchange\"\n\t];\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"getBattery\" in navigator$1 && typeof navigator$1.getBattery === \"function\");\n\tconst charging = shallowRef(false);\n\tconst chargingTime = shallowRef(0);\n\tconst dischargingTime = shallowRef(0);\n\tconst level = shallowRef(1);\n\tlet battery;\n\tfunction updateBatteryInfo() {\n\t\tcharging.value = this.charging;\n\t\tchargingTime.value = this.chargingTime || 0;\n\t\tdischargingTime.value = this.dischargingTime || 0;\n\t\tlevel.value = this.level;\n\t}\n\tif (isSupported.value) navigator$1.getBattery().then((_battery) => {\n\t\tbattery = _battery;\n\t\tupdateBatteryInfo.call(battery);\n\t\tuseEventListener(battery, events$1, updateBatteryInfo, { passive: true });\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcharging,\n\t\tchargingTime,\n\t\tdischargingTime,\n\t\tlevel\n\t};\n}\n\n//#endregion\n//#region useBluetooth/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useBluetooth(options) {\n\tlet { acceptAllDevices = false } = options || {};\n\tconst { filters = void 0, optionalServices = void 0, navigator: navigator$1 = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"bluetooth\" in navigator$1);\n\tconst device = shallowRef();\n\tconst error = shallowRef(null);\n\twatch(device, () => {\n\t\tconnectToBluetoothGATTServer();\n\t});\n\tasync function requestDevice() {\n\t\tif (!isSupported.value) return;\n\t\terror.value = null;\n\t\tif (filters && filters.length > 0) acceptAllDevices = false;\n\t\ttry {\n\t\t\tdevice.value = await (navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.bluetooth.requestDevice({\n\t\t\t\tacceptAllDevices,\n\t\t\t\tfilters,\n\t\t\t\toptionalServices\n\t\t\t}));\n\t\t} catch (err) {\n\t\t\terror.value = err;\n\t\t}\n\t}\n\tconst server = shallowRef();\n\tconst isConnected = shallowRef(false);\n\tfunction reset() {\n\t\tisConnected.value = false;\n\t\tdevice.value = void 0;\n\t\tserver.value = void 0;\n\t}\n\tasync function connectToBluetoothGATTServer() {\n\t\terror.value = null;\n\t\tif (device.value && device.value.gatt) {\n\t\t\tuseEventListener(device, \"gattserverdisconnected\", reset, { passive: true });\n\t\t\ttry {\n\t\t\t\tserver.value = await device.value.gatt.connect();\n\t\t\t\tisConnected.value = server.value.connected;\n\t\t\t} catch (err) {\n\t\t\t\terror.value = err;\n\t\t\t}\n\t\t}\n\t}\n\ttryOnMounted(() => {\n\t\tvar _device$value$gatt;\n\t\tif (device.value) (_device$value$gatt = device.value.gatt) === null || _device$value$gatt === void 0 || _device$value$gatt.connect();\n\t});\n\ttryOnScopeDispose(() => {\n\t\tvar _device$value$gatt2;\n\t\tif (device.value) (_device$value$gatt2 = device.value.gatt) === null || _device$value$gatt2 === void 0 || _device$value$gatt2.disconnect();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisConnected: readonly(isConnected),\n\t\tdevice,\n\t\trequestDevice,\n\t\tserver,\n\t\terror\n\t};\n}\n\n//#endregion\n//#region useSSRWidth/index.ts\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSSRWidth() {\n\tconst ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n\treturn typeof ssrWidth === \"number\" ? ssrWidth : void 0;\n}\nfunction provideSSRWidth(width, app) {\n\tif (app !== void 0) app.provide(ssrWidthSymbol, width);\n\telse provideLocal(ssrWidthSymbol, width);\n}\n\n//#endregion\n//#region useMediaQuery/index.ts\n/**\n* Reactive Media Query.\n*\n* @see https://vueuse.org/useMediaQuery\n* @param query\n* @param options\n*/\nfunction useMediaQuery(query, options = {}) {\n\tconst { window: window$1 = defaultWindow, ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"matchMedia\" in window$1 && typeof window$1.matchMedia === \"function\");\n\tconst ssrSupport = shallowRef(typeof ssrWidth === \"number\");\n\tconst mediaQuery = shallowRef();\n\tconst matches = shallowRef(false);\n\tconst handler = (event) => {\n\t\tmatches.value = event.matches;\n\t};\n\twatchEffect(() => {\n\t\tif (ssrSupport.value) {\n\t\t\tssrSupport.value = !isSupported.value;\n\t\t\tmatches.value = toValue(query).split(\",\").some((queryString) => {\n\t\t\t\tconst not = queryString.includes(\"not all\");\n\t\t\t\tconst minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tconst maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tlet res = Boolean(minWidth || maxWidth);\n\t\t\t\tif (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]);\n\t\t\t\tif (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]);\n\t\t\t\treturn not ? !res : res;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (!isSupported.value) return;\n\t\tmediaQuery.value = window$1.matchMedia(toValue(query));\n\t\tmatches.value = mediaQuery.value.matches;\n\t});\n\tuseEventListener(mediaQuery, \"change\", handler, { passive: true });\n\treturn computed(() => matches.value);\n}\n\n//#endregion\n//#region useBreakpoints/breakpoints.ts\n/**\n* Breakpoints from Tailwind V2\n*\n* @see https://tailwindcss.com/docs/breakpoints\n*/\nconst breakpointsTailwind = {\n\t\"sm\": 640,\n\t\"md\": 768,\n\t\"lg\": 1024,\n\t\"xl\": 1280,\n\t\"2xl\": 1536\n};\n/**\n* Breakpoints from Bootstrap V5\n*\n* @see https://getbootstrap.com/docs/5.0/layout/breakpoints\n*/\nconst breakpointsBootstrapV5 = {\n\txs: 0,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1400\n};\n/**\n* Breakpoints from Vuetify V2\n*\n* @see https://v2.vuetifyjs.com/en/features/breakpoints/\n*/\nconst breakpointsVuetifyV2 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1264,\n\txl: 1904\n};\n/**\n* Breakpoints from Vuetify V3\n*\n* @see https://vuetifyjs.com/en/styles/float/#overview\n*/\nconst breakpointsVuetifyV3 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1280,\n\txl: 1920,\n\txxl: 2560\n};\n/**\n* Alias to `breakpointsVuetifyV2`\n*\n* @deprecated explictly use `breakpointsVuetifyV2` or `breakpointsVuetifyV3` instead\n*/\nconst breakpointsVuetify = breakpointsVuetifyV2;\n/**\n* Breakpoints from Ant Design\n*\n* @see https://ant.design/components/layout/#breakpoint-width\n*/\nconst breakpointsAntDesign = {\n\txs: 480,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1600\n};\n/**\n* Breakpoints from Quasar V2\n*\n* @see https://quasar.dev/style/breakpoints\n*/\nconst breakpointsQuasar = {\n\txs: 0,\n\tsm: 600,\n\tmd: 1024,\n\tlg: 1440,\n\txl: 1920\n};\n/**\n* Sematic Breakpoints\n*/\nconst breakpointsSematic = {\n\tmobileS: 320,\n\tmobileM: 375,\n\tmobileL: 425,\n\ttablet: 768,\n\tlaptop: 1024,\n\tlaptopL: 1440,\n\tdesktop4K: 2560\n};\n/**\n* Breakpoints from Master CSS\n*\n* @see https://docs.master.co/css/breakpoints\n*/\nconst breakpointsMasterCss = {\n\t\"3xs\": 360,\n\t\"2xs\": 480,\n\t\"xs\": 600,\n\t\"sm\": 768,\n\t\"md\": 1024,\n\t\"lg\": 1280,\n\t\"xl\": 1440,\n\t\"2xl\": 1600,\n\t\"3xl\": 1920,\n\t\"4xl\": 2560\n};\n/**\n* Breakpoints from PrimeFlex\n*\n* @see https://primeflex.org/installation\n*/\nconst breakpointsPrimeFlex = {\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200\n};\n/**\n* Breakpoints from ElementUI/ElementPlus\n*\n* @see https://element.eleme.io/#/en-US/component/layout\n* @see https://element-plus.org/en-US/component/layout.html\n*/\nconst breakpointsElement = {\n\txs: 0,\n\tsm: 768,\n\tmd: 992,\n\tlg: 1200,\n\txl: 1920\n};\n\n//#endregion\n//#region useBreakpoints/index.ts\n/**\n* Reactively viewport breakpoints\n*\n* @see https://vueuse.org/useBreakpoints\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBreakpoints(breakpoints, options = {}) {\n\tfunction getValue$1(k, delta) {\n\t\tlet v = toValue(breakpoints[toValue(k)]);\n\t\tif (delta != null) v = increaseWithUnit(v, delta);\n\t\tif (typeof v === \"number\") v = `${v}px`;\n\t\treturn v;\n\t}\n\tconst { window: window$1 = defaultWindow, strategy = \"min-width\", ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst ssrSupport = typeof ssrWidth === \"number\";\n\tconst mounted = ssrSupport ? shallowRef(false) : { value: true };\n\tif (ssrSupport) tryOnMounted(() => mounted.value = !!window$1);\n\tfunction match(query, size) {\n\t\tif (!mounted.value && ssrSupport) return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n\t\tif (!window$1) return false;\n\t\treturn window$1.matchMedia(`(${query}-width: ${size})`).matches;\n\t}\n\tconst greaterOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(k)})`, options);\n\t};\n\tconst smallerOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(max-width: ${getValue$1(k)})`, options);\n\t};\n\tconst shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n\t\tObject.defineProperty(shortcuts, k, {\n\t\t\tget: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true\n\t\t});\n\t\treturn shortcuts;\n\t}, {});\n\tfunction current() {\n\t\tconst points = Object.keys(breakpoints).map((k) => [\n\t\t\tk,\n\t\t\tshortcutMethods[k],\n\t\t\tpxValue(getValue$1(k))\n\t\t]).sort((a, b) => a[2] - b[2]);\n\t\treturn computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n\t}\n\treturn Object.assign(shortcutMethods, {\n\t\tgreaterOrEqual,\n\t\tsmallerOrEqual,\n\t\tgreater(k) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(k, .1)})`, options);\n\t\t},\n\t\tsmaller(k) {\n\t\t\treturn useMediaQuery(() => `(max-width: ${getValue$1(k, -.1)})`, options);\n\t\t},\n\t\tbetween(a, b) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(a)}) and (max-width: ${getValue$1(b, -.1)})`, options);\n\t\t},\n\t\tisGreater(k) {\n\t\t\treturn match(\"min\", getValue$1(k, .1));\n\t\t},\n\t\tisGreaterOrEqual(k) {\n\t\t\treturn match(\"min\", getValue$1(k));\n\t\t},\n\t\tisSmaller(k) {\n\t\t\treturn match(\"max\", getValue$1(k, -.1));\n\t\t},\n\t\tisSmallerOrEqual(k) {\n\t\t\treturn match(\"max\", getValue$1(k));\n\t\t},\n\t\tisInBetween(a, b) {\n\t\t\treturn match(\"min\", getValue$1(a)) && match(\"max\", getValue$1(b, -.1));\n\t\t},\n\t\tcurrent,\n\t\tactive() {\n\t\t\tconst bps = current();\n\t\t\treturn computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useBroadcastChannel/index.ts\n/**\n* Reactive BroadcastChannel\n*\n* @see https://vueuse.org/useBroadcastChannel\n* @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n* @param options\n*\n*/\nfunction useBroadcastChannel(options) {\n\tconst { name, window: window$1 = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"BroadcastChannel\" in window$1);\n\tconst isClosed = shallowRef(false);\n\tconst channel = ref();\n\tconst data = ref();\n\tconst error = shallowRef(null);\n\tconst post = (data$1) => {\n\t\tif (channel.value) channel.value.postMessage(data$1);\n\t};\n\tconst close = () => {\n\t\tif (channel.value) channel.value.close();\n\t\tisClosed.value = true;\n\t};\n\tif (isSupported.value) tryOnMounted(() => {\n\t\terror.value = null;\n\t\tchannel.value = new BroadcastChannel(name);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(channel, \"message\", (e) => {\n\t\t\tdata.value = e.data;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"messageerror\", (e) => {\n\t\t\terror.value = e;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"close\", () => {\n\t\t\tisClosed.value = true;\n\t\t}, listenerOptions);\n\t});\n\ttryOnScopeDispose(() => {\n\t\tclose();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tchannel,\n\t\tdata,\n\t\tpost,\n\t\tclose,\n\t\terror,\n\t\tisClosed\n\t};\n}\n\n//#endregion\n//#region useBrowserLocation/index.ts\nconst WRITABLE_PROPERTIES = [\n\t\"hash\",\n\t\"host\",\n\t\"hostname\",\n\t\"href\",\n\t\"pathname\",\n\t\"port\",\n\t\"protocol\",\n\t\"search\"\n];\n/**\n* Reactive browser location.\n*\n* @see https://vueuse.org/useBrowserLocation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBrowserLocation(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst refs = Object.fromEntries(WRITABLE_PROPERTIES.map((key) => [key, ref()]));\n\tfor (const [key, ref$1] of objectEntries(refs)) watch(ref$1, (value) => {\n\t\tif (!(window$1 === null || window$1 === void 0 ? void 0 : window$1.location) || window$1.location[key] === value) return;\n\t\twindow$1.location[key] = value;\n\t});\n\tconst buildState = (trigger) => {\n\t\tvar _window$location;\n\t\tconst { state: state$1, length } = (window$1 === null || window$1 === void 0 ? void 0 : window$1.history) || {};\n\t\tconst { origin } = (window$1 === null || window$1 === void 0 ? void 0 : window$1.location) || {};\n\t\tfor (const key of WRITABLE_PROPERTIES) refs[key].value = window$1 === null || window$1 === void 0 || (_window$location = window$1.location) === null || _window$location === void 0 ? void 0 : _window$location[key];\n\t\treturn reactive({\n\t\t\ttrigger,\n\t\t\tstate: state$1,\n\t\t\tlength,\n\t\t\torigin,\n\t\t\t...refs\n\t\t});\n\t};\n\tconst state = ref(buildState(\"load\"));\n\tif (window$1) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window$1, \"popstate\", () => state.value = buildState(\"popstate\"), listenerOptions);\n\t\tuseEventListener(window$1, \"hashchange\", () => state.value = buildState(\"hashchange\"), listenerOptions);\n\t}\n\treturn state;\n}\n\n//#endregion\n//#region useCached/index.ts\nfunction useCached(refValue, comparator = (a, b) => a === b, options) {\n\tconst { deepRefs = true,...watchOptions } = options || {};\n\tconst cachedValue = createRef(refValue.value, deepRefs);\n\twatch(() => refValue.value, (value) => {\n\t\tif (!comparator(value, cachedValue.value)) cachedValue.value = value;\n\t}, watchOptions);\n\treturn cachedValue;\n}\n\n//#endregion\n//#region usePermission/index.ts\n/**\n* Reactive Permissions API.\n*\n* @see https://vueuse.org/usePermission\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePermission(permissionDesc, options = {}) {\n\tconst { controls = false, navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"permissions\" in navigator$1);\n\tconst permissionStatus = shallowRef();\n\tconst desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n\tconst state = shallowRef();\n\tconst update = () => {\n\t\tvar _permissionStatus$val, _permissionStatus$val2;\n\t\tstate.value = (_permissionStatus$val = (_permissionStatus$val2 = permissionStatus.value) === null || _permissionStatus$val2 === void 0 ? void 0 : _permissionStatus$val2.state) !== null && _permissionStatus$val !== void 0 ? _permissionStatus$val : \"prompt\";\n\t};\n\tuseEventListener(permissionStatus, \"change\", update, { passive: true });\n\tconst query = createSingletonPromise(async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionStatus.value) try {\n\t\t\tpermissionStatus.value = await navigator$1.permissions.query(desc);\n\t\t} catch (_unused) {\n\t\t\tpermissionStatus.value = void 0;\n\t\t} finally {\n\t\t\tupdate();\n\t\t}\n\t\tif (controls) return toRaw(permissionStatus.value);\n\t});\n\tquery();\n\tif (controls) return {\n\t\tstate,\n\t\tisSupported,\n\t\tquery\n\t};\n\telse return state;\n}\n\n//#endregion\n//#region useClipboard/index.ts\nfunction useClipboard(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, read = false, source, copiedDuring = 1500, legacy = false } = options;\n\tconst isClipboardApiSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"clipboard\" in navigator$1);\n\tconst permissionRead = usePermission(\"clipboard-read\");\n\tconst permissionWrite = usePermission(\"clipboard-write\");\n\tconst isSupported = computed(() => isClipboardApiSupported.value || legacy);\n\tconst text = shallowRef(\"\");\n\tconst copied = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tasync function updateText() {\n\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value));\n\t\tif (!useLegacy) try {\n\t\t\ttext.value = await navigator$1.clipboard.readText();\n\t\t} catch (_unused) {\n\t\t\tuseLegacy = true;\n\t\t}\n\t\tif (useLegacy) text.value = legacyRead();\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n\tasync function copy(value = toValue(source)) {\n\t\tif (isSupported.value && value != null) {\n\t\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value));\n\t\t\tif (!useLegacy) try {\n\t\t\t\tawait navigator$1.clipboard.writeText(value);\n\t\t\t} catch (_unused2) {\n\t\t\t\tuseLegacy = true;\n\t\t\t}\n\t\t\tif (useLegacy) legacyCopy(value);\n\t\t\ttext.value = value;\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t}\n\t}\n\tfunction legacyCopy(value) {\n\t\tconst ta = document.createElement(\"textarea\");\n\t\tta.value = value;\n\t\tta.style.position = \"absolute\";\n\t\tta.style.opacity = \"0\";\n\t\tdocument.body.appendChild(ta);\n\t\tta.select();\n\t\tdocument.execCommand(\"copy\");\n\t\tta.remove();\n\t}\n\tfunction legacyRead() {\n\t\tvar _document$getSelectio, _document, _document$getSelectio2;\n\t\treturn (_document$getSelectio = (_document = document) === null || _document === void 0 || (_document$getSelectio2 = _document.getSelection) === null || _document$getSelectio2 === void 0 || (_document$getSelectio2 = _document$getSelectio2.call(_document)) === null || _document$getSelectio2 === void 0 ? void 0 : _document$getSelectio2.toString()) !== null && _document$getSelectio !== void 0 ? _document$getSelectio : \"\";\n\t}\n\tfunction isAllowed(status) {\n\t\treturn status === \"granted\" || status === \"prompt\";\n\t}\n\treturn {\n\t\tisSupported,\n\t\ttext: readonly(text),\n\t\tcopied: readonly(copied),\n\t\tcopy\n\t};\n}\n\n//#endregion\n//#region useClipboardItems/index.ts\nfunction useClipboardItems(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, read = false, source, copiedDuring = 1500 } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"clipboard\" in navigator$1);\n\tconst content = ref([]);\n\tconst copied = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tfunction updateContent() {\n\t\tif (isSupported.value) navigator$1.clipboard.read().then((items) => {\n\t\t\tcontent.value = items;\n\t\t});\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n\tasync function copy(value = toValue(source)) {\n\t\tif (isSupported.value && value != null) {\n\t\t\tawait navigator$1.clipboard.write(value);\n\t\t\tcontent.value = value;\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t}\n\t}\n\treturn {\n\t\tisSupported,\n\t\tcontent: shallowReadonly(content),\n\t\tcopied: readonly(copied),\n\t\tcopy,\n\t\tread: updateContent\n\t};\n}\n\n//#endregion\n//#region useCloned/index.ts\nfunction cloneFnJSON(source) {\n\treturn JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n\tconst cloned = ref({});\n\tconst isModified = shallowRef(false);\n\tlet _lastSync = false;\n\tconst { manual, clone = cloneFnJSON, deep = true, immediate = true } = options;\n\twatch(cloned, () => {\n\t\tif (_lastSync) {\n\t\t\t_lastSync = false;\n\t\t\treturn;\n\t\t}\n\t\tisModified.value = true;\n\t}, {\n\t\tdeep: true,\n\t\tflush: \"sync\"\n\t});\n\tfunction sync() {\n\t\t_lastSync = true;\n\t\tisModified.value = false;\n\t\tcloned.value = clone(toValue(source));\n\t}\n\tif (!manual && (isRef(source) || typeof source === \"function\")) watch(source, sync, {\n\t\t...options,\n\t\tdeep,\n\t\timmediate\n\t});\n\telse sync();\n\treturn {\n\t\tcloned,\n\t\tisModified,\n\t\tsync\n\t};\n}\n\n//#endregion\n//#region ssr-handlers.ts\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n\tif (!(globalKey in _global)) _global[globalKey] = _global[globalKey] || {};\n\treturn _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n\treturn handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n\thandlers[key] = fn;\n}\n\n//#endregion\n//#region usePreferredDark/index.ts\n/**\n* Reactive dark theme preference.\n*\n* @see https://vueuse.org/usePreferredDark\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredDark(options) {\n\treturn useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\n//#endregion\n//#region useStorage/guess.ts\nfunction guessSerializerType(rawInit) {\n\treturn rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\n//#endregion\n//#region useStorage/index.ts\nconst StorageSerializers = {\n\tboolean: {\n\t\tread: (v) => v === \"true\",\n\t\twrite: (v) => String(v)\n\t},\n\tobject: {\n\t\tread: (v) => JSON.parse(v),\n\t\twrite: (v) => JSON.stringify(v)\n\t},\n\tnumber: {\n\t\tread: (v) => Number.parseFloat(v),\n\t\twrite: (v) => String(v)\n\t},\n\tany: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tstring: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tmap: {\n\t\tread: (v) => new Map(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v.entries()))\n\t},\n\tset: {\n\t\tread: (v) => new Set(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v))\n\t},\n\tdate: {\n\t\tread: (v) => new Date(v),\n\t\twrite: (v) => v.toISOString()\n\t}\n};\nconst customStorageEventName = \"vueuse-storage\";\n/**\n* Reactive LocalStorage/SessionStorage.\n*\n* @see https://vueuse.org/useStorage\n*/\nfunction useStorage(key, defaults$1, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window: window$1 = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, initOnMounted } = options;\n\tconst data = (shallow ? shallowRef : ref)(typeof defaults$1 === \"function\" ? defaults$1() : defaults$1);\n\tconst keyComputed = computed(() => toValue(key));\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorage\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tif (!storage) return data;\n\tconst rawInit = toValue(defaults$1);\n\tconst type = guessSerializerType(rawInit);\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tconst { pause: pauseWatch, resume: resumeWatch } = pausableWatch(data, (newValue) => write(newValue), {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\twatch(keyComputed, () => update(), { flush });\n\tlet firstMounted = false;\n\tconst onStorageEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdate(ev);\n\t};\n\tconst onStorageCustomEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdateFromCustomEvent(ev);\n\t};\n\t/**\n\t* The custom event is needed for same-document syncing when using custom\n\t* storage backends, but it doesn't work across different documents.\n\t*\n\t* TODO: Consider implementing a BroadcastChannel-based solution that fixes this.\n\t*/\n\tif (window$1 && listenToStorageChanges) if (storage instanceof Storage) useEventListener(window$1, \"storage\", onStorageEvent, { passive: true });\n\telse useEventListener(window$1, customStorageEventName, onStorageCustomEvent);\n\tif (initOnMounted) tryOnMounted(() => {\n\t\tfirstMounted = true;\n\t\tupdate();\n\t});\n\telse update();\n\tfunction dispatchWriteEvent(oldValue, newValue) {\n\t\tif (window$1) {\n\t\t\tconst payload = {\n\t\t\t\tkey: keyComputed.value,\n\t\t\t\toldValue,\n\t\t\t\tnewValue,\n\t\t\t\tstorageArea: storage\n\t\t\t};\n\t\t\twindow$1.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, { detail: payload }));\n\t\t}\n\t}\n\tfunction write(v) {\n\t\ttry {\n\t\t\tconst oldValue = storage.getItem(keyComputed.value);\n\t\t\tif (v == null) {\n\t\t\t\tdispatchWriteEvent(oldValue, null);\n\t\t\t\tstorage.removeItem(keyComputed.value);\n\t\t\t} else {\n\t\t\t\tconst serialized = serializer.write(v);\n\t\t\t\tif (oldValue !== serialized) {\n\t\t\t\t\tstorage.setItem(keyComputed.value, serialized);\n\t\t\t\t\tdispatchWriteEvent(oldValue, serialized);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tfunction read(event) {\n\t\tconst rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n\t\tif (rawValue == null) {\n\t\t\tif (writeDefaults && rawInit != null) storage.setItem(keyComputed.value, serializer.write(rawInit));\n\t\t\treturn rawInit;\n\t\t} else if (!event && mergeDefaults) {\n\t\t\tconst value = serializer.read(rawValue);\n\t\t\tif (typeof mergeDefaults === \"function\") return mergeDefaults(value, rawInit);\n\t\t\telse if (type === \"object\" && !Array.isArray(value)) return {\n\t\t\t\t...rawInit,\n\t\t\t\t...value\n\t\t\t};\n\t\t\treturn value;\n\t\t} else if (typeof rawValue !== \"string\") return rawValue;\n\t\telse return serializer.read(rawValue);\n\t}\n\tfunction update(event) {\n\t\tif (event && event.storageArea !== storage) return;\n\t\tif (event && event.key == null) {\n\t\t\tdata.value = rawInit;\n\t\t\treturn;\n\t\t}\n\t\tif (event && event.key !== keyComputed.value) return;\n\t\tpauseWatch();\n\t\ttry {\n\t\t\tconst serializedData = serializer.write(data.value);\n\t\t\tif (event === void 0 || (event === null || event === void 0 ? void 0 : event.newValue) !== serializedData) data.value = read(event);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (event) nextTick(resumeWatch);\n\t\t\telse resumeWatch();\n\t\t}\n\t}\n\tfunction updateFromCustomEvent(event) {\n\t\tupdate(event.detail);\n\t}\n\treturn data;\n}\n\n//#endregion\n//#region useColorMode/index.ts\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n/**\n* Reactive color mode with auto data persistence.\n*\n* @see https://vueuse.org/useColorMode\n* @param options\n*/\nfunction useColorMode(options = {}) {\n\tconst { selector = \"html\", attribute = \"class\", initialValue = \"auto\", window: window$1 = defaultWindow, storage, storageKey = \"vueuse-color-scheme\", listenToStorageChanges = true, storageRef, emitAuto, disableTransition = true } = options;\n\tconst modes = {\n\t\tauto: \"\",\n\t\tlight: \"light\",\n\t\tdark: \"dark\",\n\t\t...options.modes || {}\n\t};\n\tconst preferredDark = usePreferredDark({ window: window$1 });\n\tconst system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n\tconst store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, {\n\t\twindow: window$1,\n\t\tlistenToStorageChanges\n\t}));\n\tconst state = computed(() => store.value === \"auto\" ? system.value : store.value);\n\tconst updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector$1, attribute$1, value) => {\n\t\tconst el = typeof selector$1 === \"string\" ? window$1 === null || window$1 === void 0 ? void 0 : window$1.document.querySelector(selector$1) : unrefElement(selector$1);\n\t\tif (!el) return;\n\t\tconst classesToAdd = /* @__PURE__ */ new Set();\n\t\tconst classesToRemove = /* @__PURE__ */ new Set();\n\t\tlet attributeToChange = null;\n\t\tif (attribute$1 === \"class\") {\n\t\t\tconst current = value.split(/\\s/g);\n\t\t\tObject.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n\t\t\t\tif (current.includes(v)) classesToAdd.add(v);\n\t\t\t\telse classesToRemove.add(v);\n\t\t\t});\n\t\t} else attributeToChange = {\n\t\t\tkey: attribute$1,\n\t\t\tvalue\n\t\t};\n\t\tif (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null) return;\n\t\tlet style;\n\t\tif (disableTransition) {\n\t\t\tstyle = window$1.document.createElement(\"style\");\n\t\t\tstyle.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n\t\t\twindow$1.document.head.appendChild(style);\n\t\t}\n\t\tfor (const c of classesToAdd) el.classList.add(c);\n\t\tfor (const c of classesToRemove) el.classList.remove(c);\n\t\tif (attributeToChange) el.setAttribute(attributeToChange.key, attributeToChange.value);\n\t\tif (disableTransition) {\n\t\t\twindow$1.getComputedStyle(style).opacity;\n\t\t\tdocument.head.removeChild(style);\n\t\t}\n\t});\n\tfunction defaultOnChanged(mode) {\n\t\tvar _modes$mode;\n\t\tupdateHTMLAttrs(selector, attribute, (_modes$mode = modes[mode]) !== null && _modes$mode !== void 0 ? _modes$mode : mode);\n\t}\n\tfunction onChanged(mode) {\n\t\tif (options.onChanged) options.onChanged(mode, defaultOnChanged);\n\t\telse defaultOnChanged(mode);\n\t}\n\twatch(state, onChanged, {\n\t\tflush: \"post\",\n\t\timmediate: true\n\t});\n\ttryOnMounted(() => onChanged(state.value));\n\tconst auto = computed({\n\t\tget() {\n\t\t\treturn emitAuto ? store.value : state.value;\n\t\t},\n\t\tset(v) {\n\t\t\tstore.value = v;\n\t\t}\n\t});\n\treturn Object.assign(auto, {\n\t\tstore,\n\t\tsystem,\n\t\tstate\n\t});\n}\n\n//#endregion\n//#region useConfirmDialog/index.ts\n/**\n* Hooks for creating confirm dialogs. Useful for modal windows, popups and logins.\n*\n* @see https://vueuse.org/useConfirmDialog/\n* @param revealed `boolean` `ref` that handles a modal window\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useConfirmDialog(revealed = shallowRef(false)) {\n\tconst confirmHook = createEventHook();\n\tconst cancelHook = createEventHook();\n\tconst revealHook = createEventHook();\n\tlet _resolve = noop;\n\tconst reveal = (data) => {\n\t\trevealHook.trigger(data);\n\t\trevealed.value = true;\n\t\treturn new Promise((resolve) => {\n\t\t\t_resolve = resolve;\n\t\t});\n\t};\n\tconst confirm = (data) => {\n\t\trevealed.value = false;\n\t\tconfirmHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: false\n\t\t});\n\t};\n\tconst cancel = (data) => {\n\t\trevealed.value = false;\n\t\tcancelHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: true\n\t\t});\n\t};\n\treturn {\n\t\tisRevealed: computed(() => revealed.value),\n\t\treveal,\n\t\tconfirm,\n\t\tcancel,\n\t\tonReveal: revealHook.on,\n\t\tonConfirm: confirmHook.on,\n\t\tonCancel: cancelHook.on\n\t};\n}\n\n//#endregion\n//#region useCountdown/index.ts\n/**\n* Wrapper for `useIntervalFn` that provides a countdown timer in seconds.\n*\n* @param initialCountdown\n* @param options\n*\n* @see https://vueuse.org/useCountdown\n*/\nfunction useCountdown(initialCountdown, options) {\n\tvar _options$interval, _options$immediate;\n\tconst remaining = shallowRef(toValue(initialCountdown));\n\tconst intervalController = useIntervalFn(() => {\n\t\tvar _options$onTick;\n\t\tconst value = remaining.value - 1;\n\t\tremaining.value = value < 0 ? 0 : value;\n\t\toptions === null || options === void 0 || (_options$onTick = options.onTick) === null || _options$onTick === void 0 || _options$onTick.call(options);\n\t\tif (remaining.value <= 0) {\n\t\t\tvar _options$onComplete;\n\t\t\tintervalController.pause();\n\t\t\toptions === null || options === void 0 || (_options$onComplete = options.onComplete) === null || _options$onComplete === void 0 || _options$onComplete.call(options);\n\t\t}\n\t}, (_options$interval = options === null || options === void 0 ? void 0 : options.interval) !== null && _options$interval !== void 0 ? _options$interval : 1e3, { immediate: (_options$immediate = options === null || options === void 0 ? void 0 : options.immediate) !== null && _options$immediate !== void 0 ? _options$immediate : false });\n\tconst reset = (countdown) => {\n\t\tvar _toValue;\n\t\tremaining.value = (_toValue = toValue(countdown)) !== null && _toValue !== void 0 ? _toValue : toValue(initialCountdown);\n\t};\n\tconst stop = () => {\n\t\tintervalController.pause();\n\t\treset();\n\t};\n\tconst resume = () => {\n\t\tif (!intervalController.isActive.value) {\n\t\t\tif (remaining.value > 0) intervalController.resume();\n\t\t}\n\t};\n\tconst start = (countdown) => {\n\t\treset(countdown);\n\t\tintervalController.resume();\n\t};\n\treturn {\n\t\tremaining,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tpause: intervalController.pause,\n\t\tresume,\n\t\tisActive: intervalController.isActive\n\t};\n}\n\n//#endregion\n//#region useCssVar/index.ts\n/**\n* Manipulate CSS variables.\n*\n* @see https://vueuse.org/useCssVar\n* @param prop\n* @param target\n* @param options\n*/\nfunction useCssVar(prop, target, options = {}) {\n\tconst { window: window$1 = defaultWindow, initialValue, observe = false } = options;\n\tconst variable = shallowRef(initialValue);\n\tconst elRef = computed(() => {\n\t\tvar _window$document;\n\t\treturn unrefElement(target) || (window$1 === null || window$1 === void 0 || (_window$document = window$1.document) === null || _window$document === void 0 ? void 0 : _window$document.documentElement);\n\t});\n\tfunction updateCssVar() {\n\t\tconst key = toValue(prop);\n\t\tconst el = toValue(elRef);\n\t\tif (el && window$1 && key) {\n\t\t\tvar _window$getComputedSt;\n\t\t\tvariable.value = ((_window$getComputedSt = window$1.getComputedStyle(el).getPropertyValue(key)) === null || _window$getComputedSt === void 0 ? void 0 : _window$getComputedSt.trim()) || variable.value || initialValue;\n\t\t}\n\t}\n\tif (observe) useMutationObserver(elRef, updateCssVar, {\n\t\tattributeFilter: [\"style\", \"class\"],\n\t\twindow: window$1\n\t});\n\twatch([elRef, () => toValue(prop)], (_, old) => {\n\t\tif (old[0] && old[1]) old[0].style.removeProperty(old[1]);\n\t\tupdateCssVar();\n\t}, { immediate: true });\n\twatch([variable, elRef], ([val, el]) => {\n\t\tconst raw_prop = toValue(prop);\n\t\tif ((el === null || el === void 0 ? void 0 : el.style) && raw_prop) if (val == null) el.style.removeProperty(raw_prop);\n\t\telse el.style.setProperty(raw_prop, val);\n\t}, { immediate: true });\n\treturn variable;\n}\n\n//#endregion\n//#region useCurrentElement/index.ts\nfunction useCurrentElement(rootComponent) {\n\tconst vm = getCurrentInstance();\n\tconst currentElement = computedWithControl(() => null, () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el);\n\tonUpdated(currentElement.trigger);\n\tonMounted(currentElement.trigger);\n\treturn currentElement;\n}\n\n//#endregion\n//#region useCycleList/index.ts\n/**\n* Cycle through a list of items\n*\n* @see https://vueuse.org/useCycleList\n*/\nfunction useCycleList(list, options) {\n\tconst state = shallowRef(getInitialValue());\n\tconst listRef = toRef(list);\n\tconst index = computed({\n\t\tget() {\n\t\t\tvar _options$fallbackInde;\n\t\t\tconst targetList = listRef.value;\n\t\t\tlet index$1 = (options === null || options === void 0 ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n\t\t\tif (index$1 < 0) index$1 = (_options$fallbackInde = options === null || options === void 0 ? void 0 : options.fallbackIndex) !== null && _options$fallbackInde !== void 0 ? _options$fallbackInde : 0;\n\t\t\treturn index$1;\n\t\t},\n\t\tset(v) {\n\t\t\tset(v);\n\t\t}\n\t});\n\tfunction set(i) {\n\t\tconst targetList = listRef.value;\n\t\tconst length = targetList.length;\n\t\tconst value = targetList[(i % length + length) % length];\n\t\tstate.value = value;\n\t\treturn value;\n\t}\n\tfunction shift(delta = 1) {\n\t\treturn set(index.value + delta);\n\t}\n\tfunction next(n = 1) {\n\t\treturn shift(n);\n\t}\n\tfunction prev(n = 1) {\n\t\treturn shift(-n);\n\t}\n\tfunction getInitialValue() {\n\t\tvar _toValue, _options$initialValue;\n\t\treturn (_toValue = toValue((_options$initialValue = options === null || options === void 0 ? void 0 : options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : toValue(list)[0])) !== null && _toValue !== void 0 ? _toValue : void 0;\n\t}\n\twatch(listRef, () => set(index.value));\n\treturn {\n\t\tstate,\n\t\tindex,\n\t\tnext,\n\t\tprev,\n\t\tgo: set\n\t};\n}\n\n//#endregion\n//#region useDark/index.ts\n/**\n* Reactive dark mode with auto data persistence.\n*\n* @see https://vueuse.org/useDark\n* @param options\n*/\nfunction useDark(options = {}) {\n\tconst { valueDark = \"dark\", valueLight = \"\" } = options;\n\tconst mode = useColorMode({\n\t\t...options,\n\t\tonChanged: (mode$1, defaultHandler) => {\n\t\t\tvar _options$onChanged;\n\t\t\tif (options.onChanged) (_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, mode$1 === \"dark\", defaultHandler, mode$1);\n\t\t\telse defaultHandler(mode$1);\n\t\t},\n\t\tmodes: {\n\t\t\tdark: valueDark,\n\t\t\tlight: valueLight\n\t\t}\n\t});\n\tconst system = computed(() => mode.system.value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn mode.value === \"dark\";\n\t\t},\n\t\tset(v) {\n\t\t\tconst modeVal = v ? \"dark\" : \"light\";\n\t\t\tif (system.value === modeVal) mode.value = \"auto\";\n\t\t\telse mode.value = modeVal;\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useManualRefHistory/index.ts\nfunction fnBypass(v) {\n\treturn v;\n}\nfunction fnSetSource(source, value) {\n\treturn source.value = value;\n}\nfunction defaultDump(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useManualRefHistory\n* @param source\n* @param options\n*/\nfunction useManualRefHistory(source, options = {}) {\n\tconst { clone = false, dump = defaultDump(clone), parse = defaultParse(clone), setSource = fnSetSource } = options;\n\tfunction _createHistoryRecord() {\n\t\treturn markRaw({\n\t\t\tsnapshot: dump(source.value),\n\t\t\ttimestamp: timestamp()\n\t\t});\n\t}\n\tconst last = ref(_createHistoryRecord());\n\tconst undoStack = ref([]);\n\tconst redoStack = ref([]);\n\tconst _setSource = (record) => {\n\t\tsetSource(source, parse(record.snapshot));\n\t\tlast.value = record;\n\t};\n\tconst commit = () => {\n\t\tundoStack.value.unshift(last.value);\n\t\tlast.value = _createHistoryRecord();\n\t\tif (options.capacity && undoStack.value.length > options.capacity) undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n\t\tif (redoStack.value.length) redoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst clear = () => {\n\t\tundoStack.value.splice(0, undoStack.value.length);\n\t\tredoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst undo = () => {\n\t\tconst state = undoStack.value.shift();\n\t\tif (state) {\n\t\t\tredoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst redo = () => {\n\t\tconst state = redoStack.value.shift();\n\t\tif (state) {\n\t\t\tundoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst reset = () => {\n\t\t_setSource(last.value);\n\t};\n\treturn {\n\t\tsource,\n\t\tundoStack,\n\t\tredoStack,\n\t\tlast,\n\t\thistory: computed(() => [last.value, ...undoStack.value]),\n\t\tcanUndo: computed(() => undoStack.value.length > 0),\n\t\tcanRedo: computed(() => redoStack.value.length > 0),\n\t\tclear,\n\t\tcommit,\n\t\treset,\n\t\tundo,\n\t\tredo\n\t};\n}\n\n//#endregion\n//#region useRefHistory/index.ts\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useRefHistory\n* @param source\n* @param options\n*/\nfunction useRefHistory(source, options = {}) {\n\tconst { deep = false, flush = \"pre\", eventFilter, shouldCommit = () => true } = options;\n\tconst { eventFilter: composedFilter, pause, resume: resumeTracking, isActive: isTracking } = pausableFilter(eventFilter);\n\tlet lastRawValue = source.value;\n\tconst { ignoreUpdates, ignorePrevAsyncUpdates, stop } = watchIgnorable(source, commit, {\n\t\tdeep,\n\t\tflush,\n\t\teventFilter: composedFilter\n\t});\n\tfunction setSource(source$1, value) {\n\t\tignorePrevAsyncUpdates();\n\t\tignoreUpdates(() => {\n\t\t\tsource$1.value = value;\n\t\t\tlastRawValue = value;\n\t\t});\n\t}\n\tconst manualHistory = useManualRefHistory(source, {\n\t\t...options,\n\t\tclone: options.clone || deep,\n\t\tsetSource\n\t});\n\tconst { clear, commit: manualCommit } = manualHistory;\n\tfunction commit() {\n\t\tignorePrevAsyncUpdates();\n\t\tif (!shouldCommit(lastRawValue, source.value)) return;\n\t\tlastRawValue = source.value;\n\t\tmanualCommit();\n\t}\n\tfunction resume(commitNow) {\n\t\tresumeTracking();\n\t\tif (commitNow) commit();\n\t}\n\tfunction batch(fn) {\n\t\tlet canceled = false;\n\t\tconst cancel = () => canceled = true;\n\t\tignoreUpdates(() => {\n\t\t\tfn(cancel);\n\t\t});\n\t\tif (!canceled) commit();\n\t}\n\tfunction dispose() {\n\t\tstop();\n\t\tclear();\n\t}\n\treturn {\n\t\t...manualHistory,\n\t\tisTracking,\n\t\tpause,\n\t\tresume,\n\t\tcommit,\n\t\tbatch,\n\t\tdispose\n\t};\n}\n\n//#endregion\n//#region useDebouncedRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with debounce filter.\n*\n* @see https://vueuse.org/useDebouncedRefHistory\n* @param source\n* @param options\n*/\nfunction useDebouncedRefHistory(source, options = {}) {\n\tconst filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n\n//#endregion\n//#region useDeviceMotion/index.ts\n/**\n* Reactive DeviceMotionEvent.\n*\n* @see https://vueuse.org/useDeviceMotion\n* @param options\n*/\nfunction useDeviceMotion(options = {}) {\n\tconst { window: window$1 = defaultWindow, requestPermissions = false, eventFilter = bypassFilter } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n\tconst requirePermissions = /* @__PURE__ */ useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n\tconst permissionGranted = shallowRef(false);\n\tconst acceleration = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tconst rotationRate = ref({\n\t\talpha: null,\n\t\tbeta: null,\n\t\tgamma: null\n\t});\n\tconst interval = shallowRef(0);\n\tconst accelerationIncludingGravity = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tfunction init() {\n\t\tif (window$1) useEventListener(window$1, \"devicemotion\", createFilterWrapper(eventFilter, (event) => {\n\t\t\tvar _event$acceleration, _event$acceleration2, _event$acceleration3, _event$accelerationIn, _event$accelerationIn2, _event$accelerationIn3, _event$rotationRate, _event$rotationRate2, _event$rotationRate3;\n\t\t\tacceleration.value = {\n\t\t\t\tx: ((_event$acceleration = event.acceleration) === null || _event$acceleration === void 0 ? void 0 : _event$acceleration.x) || null,\n\t\t\t\ty: ((_event$acceleration2 = event.acceleration) === null || _event$acceleration2 === void 0 ? void 0 : _event$acceleration2.y) || null,\n\t\t\t\tz: ((_event$acceleration3 = event.acceleration) === null || _event$acceleration3 === void 0 ? void 0 : _event$acceleration3.z) || null\n\t\t\t};\n\t\t\taccelerationIncludingGravity.value = {\n\t\t\t\tx: ((_event$accelerationIn = event.accelerationIncludingGravity) === null || _event$accelerationIn === void 0 ? void 0 : _event$accelerationIn.x) || null,\n\t\t\t\ty: ((_event$accelerationIn2 = event.accelerationIncludingGravity) === null || _event$accelerationIn2 === void 0 ? void 0 : _event$accelerationIn2.y) || null,\n\t\t\t\tz: ((_event$accelerationIn3 = event.accelerationIncludingGravity) === null || _event$accelerationIn3 === void 0 ? void 0 : _event$accelerationIn3.z) || null\n\t\t\t};\n\t\t\trotationRate.value = {\n\t\t\t\talpha: ((_event$rotationRate = event.rotationRate) === null || _event$rotationRate === void 0 ? void 0 : _event$rotationRate.alpha) || null,\n\t\t\t\tbeta: ((_event$rotationRate2 = event.rotationRate) === null || _event$rotationRate2 === void 0 ? void 0 : _event$rotationRate2.beta) || null,\n\t\t\t\tgamma: ((_event$rotationRate3 = event.rotationRate) === null || _event$rotationRate3 === void 0 ? void 0 : _event$rotationRate3.gamma) || null\n\t\t\t};\n\t\t\tinterval.value = event.interval;\n\t\t}), { passive: true });\n\t}\n\tconst ensurePermissions = async () => {\n\t\tif (!requirePermissions.value) permissionGranted.value = true;\n\t\tif (permissionGranted.value) return;\n\t\tif (requirePermissions.value) {\n\t\t\tconst requestPermission = DeviceMotionEvent.requestPermission;\n\t\t\ttry {\n\t\t\t\tif (await requestPermission() === \"granted\") {\n\t\t\t\t\tpermissionGranted.value = true;\n\t\t\t\t\tinit();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t}\n\t};\n\tif (isSupported.value) if (requestPermissions && requirePermissions.value) ensurePermissions().then(() => init());\n\telse init();\n\treturn {\n\t\tacceleration,\n\t\taccelerationIncludingGravity,\n\t\trotationRate,\n\t\tinterval,\n\t\tisSupported,\n\t\trequirePermissions,\n\t\tensurePermissions,\n\t\tpermissionGranted\n\t};\n}\n\n//#endregion\n//#region useDeviceOrientation/index.ts\n/**\n* Reactive DeviceOrientationEvent.\n*\n* @see https://vueuse.org/useDeviceOrientation\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDeviceOrientation(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"DeviceOrientationEvent\" in window$1);\n\tconst isAbsolute = shallowRef(false);\n\tconst alpha = shallowRef(null);\n\tconst beta = shallowRef(null);\n\tconst gamma = shallowRef(null);\n\tif (window$1 && isSupported.value) useEventListener(window$1, \"deviceorientation\", (event) => {\n\t\tisAbsolute.value = event.absolute;\n\t\talpha.value = event.alpha;\n\t\tbeta.value = event.beta;\n\t\tgamma.value = event.gamma;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tisAbsolute,\n\t\talpha,\n\t\tbeta,\n\t\tgamma\n\t};\n}\n\n//#endregion\n//#region useDevicePixelRatio/index.ts\n/**\n* Reactively track `window.devicePixelRatio`.\n*\n* @see https://vueuse.org/useDevicePixelRatio\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDevicePixelRatio(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst pixelRatio = shallowRef(1);\n\tconst query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options);\n\tlet stop = noop;\n\tif (window$1) stop = watchImmediate(query, () => pixelRatio.value = window$1.devicePixelRatio);\n\treturn {\n\t\tpixelRatio: readonly(pixelRatio),\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useDevicesList/index.ts\n/**\n* Reactive `enumerateDevices` listing available input/output devices\n*\n* @see https://vueuse.org/useDevicesList\n* @param options\n*/\nfunction useDevicesList(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, requestPermissions = false, constraints = {\n\t\taudio: true,\n\t\tvideo: true\n\t}, onUpdated: onUpdated$1 } = options;\n\tconst devices = ref([]);\n\tconst videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n\tconst audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n\tconst audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && navigator$1.mediaDevices && navigator$1.mediaDevices.enumerateDevices);\n\tconst permissionGranted = shallowRef(false);\n\tlet stream;\n\tasync function update() {\n\t\tif (!isSupported.value) return;\n\t\tdevices.value = await navigator$1.mediaDevices.enumerateDevices();\n\t\tonUpdated$1 === null || onUpdated$1 === void 0 || onUpdated$1(devices.value);\n\t\tif (stream) {\n\t\t\tstream.getTracks().forEach((t) => t.stop());\n\t\t\tstream = null;\n\t\t}\n\t}\n\tasync function ensurePermissions() {\n\t\tconst deviceName = constraints.video ? \"camera\" : \"microphone\";\n\t\tif (!isSupported.value) return false;\n\t\tif (permissionGranted.value) return true;\n\t\tconst { state, query } = usePermission(deviceName, { controls: true });\n\t\tawait query();\n\t\tif (state.value !== \"granted\") {\n\t\t\tlet granted = true;\n\t\t\ttry {\n\t\t\t\tconst allDevices = await navigator$1.mediaDevices.enumerateDevices();\n\t\t\t\tconst hasCamera = allDevices.some((device) => device.kind === \"videoinput\");\n\t\t\t\tconst hasMicrophone = allDevices.some((device) => device.kind === \"audioinput\" || device.kind === \"audiooutput\");\n\t\t\t\tconstraints.video = hasCamera ? constraints.video : false;\n\t\t\t\tconstraints.audio = hasMicrophone ? constraints.audio : false;\n\t\t\t\tstream = await navigator$1.mediaDevices.getUserMedia(constraints);\n\t\t\t} catch (_unused) {\n\t\t\t\tstream = null;\n\t\t\t\tgranted = false;\n\t\t\t}\n\t\t\tupdate();\n\t\t\tpermissionGranted.value = granted;\n\t\t} else permissionGranted.value = true;\n\t\treturn permissionGranted.value;\n\t}\n\tif (isSupported.value) {\n\t\tif (requestPermissions) ensurePermissions();\n\t\tuseEventListener(navigator$1.mediaDevices, \"devicechange\", update, { passive: true });\n\t\tupdate();\n\t}\n\treturn {\n\t\tdevices,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tvideoInputs,\n\t\taudioInputs,\n\t\taudioOutputs,\n\t\tisSupported\n\t};\n}\n\n//#endregion\n//#region useDisplayMedia/index.ts\n/**\n* Reactive `mediaDevices.getDisplayMedia` streaming\n*\n* @see https://vueuse.org/useDisplayMedia\n* @param options\n*/\nfunction useDisplayMedia(options = {}) {\n\tvar _options$enabled;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst video = options.video;\n\tconst audio = options.audio;\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator$1 === null || navigator$1 === void 0 || (_navigator$mediaDevic = navigator$1.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getDisplayMedia;\n\t});\n\tconst constraint = {\n\t\taudio,\n\t\tvideo\n\t};\n\tconst stream = shallowRef();\n\tasync function _start() {\n\t\tvar _stream$value;\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator$1.mediaDevices.getDisplayMedia(constraint);\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => useEventListener(t, \"ended\", stop, { passive: true }));\n\t\treturn stream.value;\n\t}\n\tasync function _stop() {\n\t\tvar _stream$value2;\n\t\t(_stream$value2 = stream.value) === null || _stream$value2 === void 0 || _stream$value2.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\tenabled\n\t};\n}\n\n//#endregion\n//#region useDocumentVisibility/index.ts\n/**\n* Reactively track `document.visibilityState`.\n*\n* @see https://vueuse.org/useDocumentVisibility\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDocumentVisibility(options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tif (!document$1) return shallowRef(\"visible\");\n\tconst visibility = shallowRef(document$1.visibilityState);\n\tuseEventListener(document$1, \"visibilitychange\", () => {\n\t\tvisibility.value = document$1.visibilityState;\n\t}, { passive: true });\n\treturn visibility;\n}\n\n//#endregion\n//#region useDraggable/index.ts\n/**\n* Make elements draggable.\n*\n* @see https://vueuse.org/useDraggable\n* @param target\n* @param options\n*/\nfunction useDraggable(target, options = {}) {\n\tvar _toValue;\n\tconst { pointerTypes, preventDefault: preventDefault$1, stopPropagation, exact, onMove, onEnd, onStart, initialValue, axis = \"both\", draggingElement = defaultWindow, containerElement, handle: draggingHandle = target, buttons = [0] } = options;\n\tconst position = ref((_toValue = toValue(initialValue)) !== null && _toValue !== void 0 ? _toValue : {\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst pressedDelta = ref();\n\tconst filterEvent = (e) => {\n\t\tif (pointerTypes) return pointerTypes.includes(e.pointerType);\n\t\treturn true;\n\t};\n\tconst handleEvent = (e) => {\n\t\tif (toValue(preventDefault$1)) e.preventDefault();\n\t\tif (toValue(stopPropagation)) e.stopPropagation();\n\t};\n\tconst start = (e) => {\n\t\tvar _container$getBoundin;\n\t\tif (!toValue(buttons).includes(e.button)) return;\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (toValue(exact) && e.target !== toValue(target)) return;\n\t\tconst container = toValue(containerElement);\n\t\tconst containerRect = container === null || container === void 0 || (_container$getBoundin = container.getBoundingClientRect) === null || _container$getBoundin === void 0 ? void 0 : _container$getBoundin.call(container);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tconst pos = {\n\t\t\tx: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n\t\t\ty: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n\t\t};\n\t\tif ((onStart === null || onStart === void 0 ? void 0 : onStart(pos, e)) === false) return;\n\t\tpressedDelta.value = pos;\n\t\thandleEvent(e);\n\t};\n\tconst move = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tconst container = toValue(containerElement);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tlet { x, y } = position.value;\n\t\tif (axis === \"x\" || axis === \"both\") {\n\t\t\tx = e.clientX - pressedDelta.value.x;\n\t\t\tif (container) x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n\t\t}\n\t\tif (axis === \"y\" || axis === \"both\") {\n\t\t\ty = e.clientY - pressedDelta.value.y;\n\t\t\tif (container) y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n\t\t}\n\t\tposition.value = {\n\t\t\tx,\n\t\t\ty\n\t\t};\n\t\tonMove === null || onMove === void 0 || onMove(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tconst end = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tpressedDelta.value = void 0;\n\t\tonEnd === null || onEnd === void 0 || onEnd(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tif (isClient) {\n\t\tconst config = () => {\n\t\t\tvar _options$capture;\n\t\t\treturn {\n\t\t\t\tcapture: (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : true,\n\t\t\t\tpassive: !toValue(preventDefault$1)\n\t\t\t};\n\t\t};\n\t\tuseEventListener(draggingHandle, \"pointerdown\", start, config);\n\t\tuseEventListener(draggingElement, \"pointermove\", move, config);\n\t\tuseEventListener(draggingElement, \"pointerup\", end, config);\n\t}\n\treturn {\n\t\t...toRefs(position),\n\t\tposition,\n\t\tisDragging: computed(() => !!pressedDelta.value),\n\t\tstyle: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`)\n\t};\n}\n\n//#endregion\n//#region useDropZone/index.ts\nfunction useDropZone(target, options = {}) {\n\tconst isOverDropZone = shallowRef(false);\n\tconst files = shallowRef(null);\n\tlet counter = 0;\n\tlet isValid = true;\n\tif (isClient) {\n\t\tvar _options$multiple, _options$preventDefau;\n\t\tconst _options = typeof options === \"function\" ? { onDrop: options } : options;\n\t\tconst multiple = (_options$multiple = _options.multiple) !== null && _options$multiple !== void 0 ? _options$multiple : true;\n\t\tconst preventDefaultForUnhandled = (_options$preventDefau = _options.preventDefaultForUnhandled) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : false;\n\t\tconst getFiles = (event) => {\n\t\t\tvar _event$dataTransfer$f, _event$dataTransfer;\n\t\t\tconst list = Array.from((_event$dataTransfer$f = (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.files) !== null && _event$dataTransfer$f !== void 0 ? _event$dataTransfer$f : []);\n\t\t\treturn list.length === 0 ? null : multiple ? list : [list[0]];\n\t\t};\n\t\tconst checkDataTypes = (types) => {\n\t\t\tconst dataTypes = unref(_options.dataTypes);\n\t\t\tif (typeof dataTypes === \"function\") return dataTypes(types);\n\t\t\tif (!(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length)) return true;\n\t\t\tif (types.length === 0) return false;\n\t\t\treturn types.every((type) => dataTypes.some((allowedType) => type.includes(allowedType)));\n\t\t};\n\t\tconst checkValidity = (items) => {\n\t\t\tconst dataTypesValid = checkDataTypes(Array.from(items !== null && items !== void 0 ? items : []).map((item) => item.type));\n\t\t\tconst multipleFilesValid = multiple || items.length <= 1;\n\t\t\treturn dataTypesValid && multipleFilesValid;\n\t\t};\n\t\tconst isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n\t\tconst handleDragEvent = (event, eventType) => {\n\t\t\tvar _event$dataTransfer2, _ref;\n\t\t\tconst dataTransferItemList = (_event$dataTransfer2 = event.dataTransfer) === null || _event$dataTransfer2 === void 0 ? void 0 : _event$dataTransfer2.items;\n\t\t\tisValid = (_ref = dataTransferItemList && checkValidity(dataTransferItemList)) !== null && _ref !== void 0 ? _ref : false;\n\t\t\tif (preventDefaultForUnhandled) event.preventDefault();\n\t\t\tif (!isSafari() && !isValid) {\n\t\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"copy\";\n\t\t\tconst currentFiles = getFiles(event);\n\t\t\tswitch (eventType) {\n\t\t\t\tcase \"enter\":\n\t\t\t\t\tvar _options$onEnter;\n\t\t\t\t\tcounter += 1;\n\t\t\t\t\tisOverDropZone.value = true;\n\t\t\t\t\t(_options$onEnter = _options.onEnter) === null || _options$onEnter === void 0 || _options$onEnter.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"over\":\n\t\t\t\t\tvar _options$onOver;\n\t\t\t\t\t(_options$onOver = _options.onOver) === null || _options$onOver === void 0 || _options$onOver.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"leave\":\n\t\t\t\t\tvar _options$onLeave;\n\t\t\t\t\tcounter -= 1;\n\t\t\t\t\tif (counter === 0) isOverDropZone.value = false;\n\t\t\t\t\t(_options$onLeave = _options.onLeave) === null || _options$onLeave === void 0 || _options$onLeave.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"drop\":\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tisOverDropZone.value = false;\n\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\tvar _options$onDrop;\n\t\t\t\t\t\tfiles.value = currentFiles;\n\t\t\t\t\t\t(_options$onDrop = _options.onDrop) === null || _options$onDrop === void 0 || _options$onDrop.call(_options, currentFiles, event);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tuseEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n\t\tuseEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n\t\tuseEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n\t\tuseEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n\t}\n\treturn {\n\t\tfiles,\n\t\tisOverDropZone\n\t};\n}\n\n//#endregion\n//#region useResizeObserver/index.ts\n/**\n* Reports changes to the dimensions of an Element's content or the border-box\n*\n* @see https://vueuse.org/useResizeObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useResizeObserver(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow,...observerOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"ResizeObserver\" in window$1);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst _targets = toValue(target);\n\t\treturn Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n\t}), (els) => {\n\t\tcleanup();\n\t\tif (isSupported.value && window$1) {\n\t\t\tobserver = new ResizeObserver(callback);\n\t\t\tfor (const _el of els) if (_el) observer.observe(_el, observerOptions);\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useElementBounding/index.ts\n/**\n* Reactive bounding box of an HTML element.\n*\n* @see https://vueuse.org/useElementBounding\n* @param target\n*/\nfunction useElementBounding(target, options = {}) {\n\tconst { reset = true, windowResize = true, windowScroll = true, immediate = true, updateTiming = \"sync\" } = options;\n\tconst height = shallowRef(0);\n\tconst bottom = shallowRef(0);\n\tconst left = shallowRef(0);\n\tconst right = shallowRef(0);\n\tconst top = shallowRef(0);\n\tconst width = shallowRef(0);\n\tconst x = shallowRef(0);\n\tconst y = shallowRef(0);\n\tfunction recalculate() {\n\t\tconst el = unrefElement(target);\n\t\tif (!el) {\n\t\t\tif (reset) {\n\t\t\t\theight.value = 0;\n\t\t\t\tbottom.value = 0;\n\t\t\t\tleft.value = 0;\n\t\t\t\tright.value = 0;\n\t\t\t\ttop.value = 0;\n\t\t\t\twidth.value = 0;\n\t\t\t\tx.value = 0;\n\t\t\t\ty.value = 0;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst rect = el.getBoundingClientRect();\n\t\theight.value = rect.height;\n\t\tbottom.value = rect.bottom;\n\t\tleft.value = rect.left;\n\t\tright.value = rect.right;\n\t\ttop.value = rect.top;\n\t\twidth.value = rect.width;\n\t\tx.value = rect.x;\n\t\ty.value = rect.y;\n\t}\n\tfunction update() {\n\t\tif (updateTiming === \"sync\") recalculate();\n\t\telse if (updateTiming === \"next-frame\") requestAnimationFrame(() => recalculate());\n\t}\n\tuseResizeObserver(target, update);\n\twatch(() => unrefElement(target), (ele) => !ele && update());\n\tuseMutationObserver(target, update, { attributeFilter: [\"style\", \"class\"] });\n\tif (windowScroll) useEventListener(\"scroll\", update, {\n\t\tcapture: true,\n\t\tpassive: true\n\t});\n\tif (windowResize) useEventListener(\"resize\", update, { passive: true });\n\ttryOnMounted(() => {\n\t\tif (immediate) update();\n\t});\n\treturn {\n\t\theight,\n\t\tbottom,\n\t\tleft,\n\t\tright,\n\t\ttop,\n\t\twidth,\n\t\tx,\n\t\ty,\n\t\tupdate\n\t};\n}\n\n//#endregion\n//#region useElementByPoint/index.ts\n/**\n* Reactive element by point.\n*\n* @see https://vueuse.org/useElementByPoint\n* @param options - UseElementByPointOptions\n*/\nfunction useElementByPoint(options) {\n\tconst { x, y, document: document$1 = defaultDocument, multiple, interval = \"requestAnimationFrame\", immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (toValue(multiple)) return document$1 && \"elementsFromPoint\" in document$1;\n\t\treturn document$1 && \"elementFromPoint\" in document$1;\n\t});\n\tconst element = shallowRef(null);\n\tconst cb = () => {\n\t\tvar _document$elementsFro, _document$elementFrom;\n\t\telement.value = toValue(multiple) ? (_document$elementsFro = document$1 === null || document$1 === void 0 ? void 0 : document$1.elementsFromPoint(toValue(x), toValue(y))) !== null && _document$elementsFro !== void 0 ? _document$elementsFro : [] : (_document$elementFrom = document$1 === null || document$1 === void 0 ? void 0 : document$1.elementFromPoint(toValue(x), toValue(y))) !== null && _document$elementFrom !== void 0 ? _document$elementFrom : null;\n\t};\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\t...interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate })\n\t};\n}\n\n//#endregion\n//#region useElementHover/index.ts\nfunction useElementHover(el, options = {}) {\n\tconst { delayEnter = 0, delayLeave = 0, triggerOnRemoval = false, window: window$1 = defaultWindow } = options;\n\tconst isHovered = shallowRef(false);\n\tlet timer;\n\tconst toggle = (entering) => {\n\t\tconst delay = entering ? delayEnter : delayLeave;\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t\tif (delay) timer = setTimeout(() => isHovered.value = entering, delay);\n\t\telse isHovered.value = entering;\n\t};\n\tif (!window$1) return isHovered;\n\tuseEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n\tuseEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n\tif (triggerOnRemoval) onElementRemoval(computed(() => unrefElement(el)), () => toggle(false));\n\treturn isHovered;\n}\n\n//#endregion\n//#region useElementSize/index.ts\n/**\n* Reactive size of an HTML element.\n*\n* @see https://vueuse.org/useElementSize\n*/\nfunction useElementSize(target, initialSize = {\n\twidth: 0,\n\theight: 0\n}, options = {}) {\n\tconst { window: window$1 = defaultWindow, box = \"content-box\" } = options;\n\tconst isSVG = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) === null || _unrefElement === void 0 || (_unrefElement = _unrefElement.namespaceURI) === null || _unrefElement === void 0 ? void 0 : _unrefElement.includes(\"svg\");\n\t});\n\tconst width = shallowRef(initialSize.width);\n\tconst height = shallowRef(initialSize.height);\n\tconst { stop: stop1 } = useResizeObserver(target, ([entry]) => {\n\t\tconst boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n\t\tif (window$1 && isSVG.value) {\n\t\t\tconst $elem = unrefElement(target);\n\t\t\tif ($elem) {\n\t\t\t\tconst rect = $elem.getBoundingClientRect();\n\t\t\t\twidth.value = rect.width;\n\t\t\t\theight.value = rect.height;\n\t\t\t}\n\t\t} else if (boxSize) {\n\t\t\tconst formatBoxSize = toArray(boxSize);\n\t\t\twidth.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n\t\t\theight.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n\t\t} else {\n\t\t\twidth.value = entry.contentRect.width;\n\t\t\theight.value = entry.contentRect.height;\n\t\t}\n\t}, options);\n\ttryOnMounted(() => {\n\t\tconst ele = unrefElement(target);\n\t\tif (ele) {\n\t\t\twidth.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n\t\t\theight.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n\t\t}\n\t});\n\tconst stop2 = watch(() => unrefElement(target), (ele) => {\n\t\twidth.value = ele ? initialSize.width : 0;\n\t\theight.value = ele ? initialSize.height : 0;\n\t});\n\tfunction stop() {\n\t\tstop1();\n\t\tstop2();\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useIntersectionObserver/index.ts\n/**\n* Detects that a target element's visibility.\n*\n* @see https://vueuse.org/useIntersectionObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useIntersectionObserver(target, callback, options = {}) {\n\tconst { root, rootMargin = \"0px\", threshold = 0, window: window$1 = defaultWindow, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"IntersectionObserver\" in window$1);\n\tconst targets = computed(() => {\n\t\treturn toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t});\n\tlet cleanup = noop;\n\tconst isActive = shallowRef(immediate);\n\tconst stopWatch = isSupported.value ? watch(() => [\n\t\ttargets.value,\n\t\tunrefElement(root),\n\t\tisActive.value\n\t], ([targets$1, root$1]) => {\n\t\tcleanup();\n\t\tif (!isActive.value) return;\n\t\tif (!targets$1.length) return;\n\t\tconst observer = new IntersectionObserver(callback, {\n\t\t\troot: unrefElement(root$1),\n\t\t\trootMargin,\n\t\t\tthreshold\n\t\t});\n\t\ttargets$1.forEach((el) => el && observer.observe(el));\n\t\tcleanup = () => {\n\t\t\tobserver.disconnect();\n\t\t\tcleanup = noop;\n\t\t};\n\t}, {\n\t\timmediate,\n\t\tflush: \"post\"\n\t}) : noop;\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t\tisActive.value = false;\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tisActive,\n\t\tpause() {\n\t\t\tcleanup();\n\t\t\tisActive.value = false;\n\t\t},\n\t\tresume() {\n\t\t\tisActive.value = true;\n\t\t},\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useElementVisibility/index.ts\n/**\n* Tracks the visibility of an element within the viewport.\n*\n* @see https://vueuse.org/useElementVisibility\n*/\nfunction useElementVisibility(element, options = {}) {\n\tconst { window: window$1 = defaultWindow, scrollTarget, threshold = 0, rootMargin, once = false } = options;\n\tconst elementIsVisible = shallowRef(false);\n\tconst { stop } = useIntersectionObserver(element, (intersectionObserverEntries) => {\n\t\tlet isIntersecting = elementIsVisible.value;\n\t\tlet latestTime = 0;\n\t\tfor (const entry of intersectionObserverEntries) if (entry.time >= latestTime) {\n\t\t\tlatestTime = entry.time;\n\t\t\tisIntersecting = entry.isIntersecting;\n\t\t}\n\t\telementIsVisible.value = isIntersecting;\n\t\tif (once) watchOnce(elementIsVisible, () => {\n\t\t\tstop();\n\t\t});\n\t}, {\n\t\troot: scrollTarget,\n\t\twindow: window$1,\n\t\tthreshold,\n\t\trootMargin: toValue(rootMargin)\n\t});\n\treturn elementIsVisible;\n}\n\n//#endregion\n//#region useEventBus/internal.ts\nconst events = /* @__PURE__ */ new Map();\n\n//#endregion\n//#region useEventBus/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useEventBus(key) {\n\tconst scope = getCurrentScope();\n\tfunction on(listener) {\n\t\tvar _scope$cleanups;\n\t\tconst listeners = events.get(key) || /* @__PURE__ */ new Set();\n\t\tlisteners.add(listener);\n\t\tevents.set(key, listeners);\n\t\tconst _off = () => off(listener);\n\t\tscope === null || scope === void 0 || (_scope$cleanups = scope.cleanups) === null || _scope$cleanups === void 0 || _scope$cleanups.push(_off);\n\t\treturn _off;\n\t}\n\tfunction once(listener) {\n\t\tfunction _listener(...args) {\n\t\t\toff(_listener);\n\t\t\tlistener(...args);\n\t\t}\n\t\treturn on(_listener);\n\t}\n\tfunction off(listener) {\n\t\tconst listeners = events.get(key);\n\t\tif (!listeners) return;\n\t\tlisteners.delete(listener);\n\t\tif (!listeners.size) reset();\n\t}\n\tfunction reset() {\n\t\tevents.delete(key);\n\t}\n\tfunction emit(event, payload) {\n\t\tvar _events$get;\n\t\t(_events$get = events.get(key)) === null || _events$get === void 0 || _events$get.forEach((v) => v(event, payload));\n\t}\n\treturn {\n\t\ton,\n\t\tonce,\n\t\toff,\n\t\temit,\n\t\treset\n\t};\n}\n\n//#endregion\n//#region useEventSource/index.ts\nfunction resolveNestedOptions$1(options) {\n\tif (options === true) return {};\n\treturn options;\n}\n/**\n* Reactive wrapper for EventSource.\n*\n* @see https://vueuse.org/useEventSource\n* @see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/EventSource EventSource\n* @param url\n* @param events\n* @param options\n*/\nfunction useEventSource(url, events$1 = [], options = {}) {\n\tconst event = shallowRef(null);\n\tconst data = shallowRef(null);\n\tconst status = shallowRef(\"CONNECTING\");\n\tconst eventSource = ref(null);\n\tconst error = shallowRef(null);\n\tconst urlRef = toRef(url);\n\tconst lastEventId = shallowRef(null);\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tconst { withCredentials = false, immediate = true, autoConnect = true, autoReconnect, serializer = { read: (v) => v } } = options;\n\tconst close = () => {\n\t\tif (isClient && eventSource.value) {\n\t\t\teventSource.value.close();\n\t\t\teventSource.value = null;\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\texplicitlyClosed = true;\n\t\t}\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst es = new EventSource(urlRef.value, { withCredentials });\n\t\tstatus.value = \"CONNECTING\";\n\t\teventSource.value = es;\n\t\tes.onopen = () => {\n\t\t\tstatus.value = \"OPEN\";\n\t\t\terror.value = null;\n\t\t};\n\t\tes.onerror = (e) => {\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\terror.value = e;\n\t\t\tif (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n\t\t\t\tes.close();\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions$1(autoReconnect);\n\t\t\t\tretried += 1;\n\t\t\t\tif (typeof retries === \"number\" && (retries < 0 || retried < retries)) setTimeout(_init, delay);\n\t\t\t\telse if (typeof retries === \"function\" && retries()) setTimeout(_init, delay);\n\t\t\t\telse onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tes.onmessage = (e) => {\n\t\t\tvar _serializer$read;\n\t\t\tevent.value = null;\n\t\t\tdata.value = (_serializer$read = serializer.read(e.data)) !== null && _serializer$read !== void 0 ? _serializer$read : null;\n\t\t\tlastEventId.value = e.lastEventId;\n\t\t};\n\t\tfor (const event_name of events$1) useEventListener(es, event_name, (e) => {\n\t\t\tvar _serializer$read2, _e$lastEventId;\n\t\t\tevent.value = event_name;\n\t\t\tdata.value = (_serializer$read2 = serializer.read(e.data)) !== null && _serializer$read2 !== void 0 ? _serializer$read2 : null;\n\t\t\tlastEventId.value = (_e$lastEventId = e.lastEventId) !== null && _e$lastEventId !== void 0 ? _e$lastEventId : null;\n\t\t}, { passive: true });\n\t};\n\tconst open = () => {\n\t\tif (!isClient) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\ttryOnScopeDispose(close);\n\treturn {\n\t\teventSource,\n\t\tevent,\n\t\tdata,\n\t\tstatus,\n\t\terror,\n\t\topen,\n\t\tclose,\n\t\tlastEventId\n\t};\n}\n\n//#endregion\n//#region useEyeDropper/index.ts\n/**\n* Reactive [EyeDropper API](https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper_API)\n*\n* @see https://vueuse.org/useEyeDropper\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useEyeDropper(options = {}) {\n\tconst { initialValue = \"\" } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n\tconst sRGBHex = shallowRef(initialValue);\n\tasync function open(openOptions) {\n\t\tif (!isSupported.value) return;\n\t\tconst result = await new window.EyeDropper().open(openOptions);\n\t\tsRGBHex.value = result.sRGBHex;\n\t\treturn result;\n\t}\n\treturn {\n\t\tisSupported,\n\t\tsRGBHex,\n\t\topen\n\t};\n}\n\n//#endregion\n//#region useFavicon/index.ts\nfunction useFavicon(newIcon = null, options = {}) {\n\tconst { baseUrl = \"\", rel = \"icon\", document: document$1 = defaultDocument } = options;\n\tconst favicon = toRef(newIcon);\n\tconst applyIcon = (icon) => {\n\t\tconst elements = document$1 === null || document$1 === void 0 ? void 0 : document$1.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n\t\tif (!elements || elements.length === 0) {\n\t\t\tconst link = document$1 === null || document$1 === void 0 ? void 0 : document$1.createElement(\"link\");\n\t\t\tif (link) {\n\t\t\t\tlink.rel = rel;\n\t\t\t\tlink.href = `${baseUrl}${icon}`;\n\t\t\t\tlink.type = `image/${icon.split(\".\").pop()}`;\n\t\t\t\tdocument$1 === null || document$1 === void 0 || document$1.head.append(link);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telements === null || elements === void 0 || elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n\t};\n\twatch(favicon, (i, o) => {\n\t\tif (typeof i === \"string\" && i !== o) applyIcon(i);\n\t}, { immediate: true });\n\treturn favicon;\n}\n\n//#endregion\n//#region useFetch/index.ts\nconst payloadMapping = {\n\tjson: \"application/json\",\n\ttext: \"text/plain\"\n};\n/**\n* !!!IMPORTANT!!!\n*\n* If you update the UseFetchOptions interface, be sure to update this object\n* to include the new options\n*/\nfunction isFetchOptions(obj) {\n\treturn obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n\treturn reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n\tif (typeof Headers !== \"undefined\" && headers instanceof Headers) return Object.fromEntries(headers.entries());\n\treturn headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n\tif (combination === \"overwrite\") return async (ctx) => {\n\t\tlet callback;\n\t\tfor (let i = callbacks.length - 1; i >= 0; i--) if (callbacks[i] != null) {\n\t\t\tcallback = callbacks[i];\n\t\t\tbreak;\n\t\t}\n\t\tif (callback) return {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n\telse return async (ctx) => {\n\t\tfor (const callback of callbacks) if (callback) ctx = {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n}\nfunction createFetch(config = {}) {\n\tconst _combination = config.combination || \"chain\";\n\tconst _options = config.options || {};\n\tconst _fetchOptions = config.fetchOptions || {};\n\tfunction useFactoryFetch(url, ...args) {\n\t\tconst computedUrl = computed(() => {\n\t\t\tconst baseUrl = toValue(config.baseUrl);\n\t\t\tconst targetUrl = toValue(url);\n\t\t\treturn baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n\t\t});\n\t\tlet options = _options;\n\t\tlet fetchOptions = _fetchOptions;\n\t\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t\t...options,\n\t\t\t...args[0],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n\t\t};\n\t\telse fetchOptions = {\n\t\t\t...fetchOptions,\n\t\t\t...args[0],\n\t\t\theaders: {\n\t\t\t\t...headersToObject(fetchOptions.headers) || {},\n\t\t\t\t...headersToObject(args[0].headers) || {}\n\t\t\t}\n\t\t};\n\t\tif (args.length > 1 && isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n\t\t};\n\t\treturn useFetch(computedUrl, fetchOptions, options);\n\t}\n\treturn useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n\tvar _defaultWindow$fetch, _globalThis;\n\tconst supportsAbort = typeof AbortController === \"function\";\n\tlet fetchOptions = {};\n\tlet options = {\n\t\timmediate: true,\n\t\trefetch: false,\n\t\ttimeout: 0,\n\t\tupdateDataOnError: false\n\t};\n\tconst config = {\n\t\tmethod: \"GET\",\n\t\ttype: \"text\",\n\t\tpayload: void 0\n\t};\n\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t...options,\n\t\t...args[0]\n\t};\n\telse fetchOptions = args[0];\n\tif (args.length > 1) {\n\t\tif (isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1]\n\t\t};\n\t}\n\tconst { fetch = (_defaultWindow$fetch = defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.fetch) !== null && _defaultWindow$fetch !== void 0 ? _defaultWindow$fetch : (_globalThis = globalThis) === null || _globalThis === void 0 ? void 0 : _globalThis.fetch, initialData, timeout } = options;\n\tconst responseEvent = createEventHook();\n\tconst errorEvent = createEventHook();\n\tconst finallyEvent = createEventHook();\n\tconst isFinished = shallowRef(false);\n\tconst isFetching = shallowRef(false);\n\tconst aborted = shallowRef(false);\n\tconst statusCode = shallowRef(null);\n\tconst response = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst data = shallowRef(initialData || null);\n\tconst canAbort = computed(() => supportsAbort && isFetching.value);\n\tlet controller;\n\tlet timer;\n\tconst abort = (reason) => {\n\t\tif (supportsAbort) {\n\t\t\tcontroller === null || controller === void 0 || controller.abort(reason);\n\t\t\tcontroller = new AbortController();\n\t\t\tcontroller.signal.onabort = () => aborted.value = true;\n\t\t\tfetchOptions = {\n\t\t\t\t...fetchOptions,\n\t\t\t\tsignal: controller.signal\n\t\t\t};\n\t\t}\n\t};\n\tconst loading = (isLoading) => {\n\t\tisFetching.value = isLoading;\n\t\tisFinished.value = !isLoading;\n\t};\n\tif (timeout) timer = useTimeoutFn(abort, timeout, { immediate: false });\n\tlet executeCounter = 0;\n\tconst execute = async (throwOnFailed = false) => {\n\t\tvar _context$options;\n\t\tabort();\n\t\tloading(true);\n\t\terror.value = null;\n\t\tstatusCode.value = null;\n\t\taborted.value = false;\n\t\texecuteCounter += 1;\n\t\tconst currentExecuteCounter = executeCounter;\n\t\tconst defaultFetchOptions = {\n\t\t\tmethod: config.method,\n\t\t\theaders: {}\n\t\t};\n\t\tconst payload = toValue(config.payload);\n\t\tif (payload) {\n\t\t\tvar _payloadMapping$confi;\n\t\t\tconst headers = headersToObject(defaultFetchOptions.headers);\n\t\t\tconst proto = Object.getPrototypeOf(payload);\n\t\t\tif (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData)) config.payloadType = \"json\";\n\t\t\tif (config.payloadType) headers[\"Content-Type\"] = (_payloadMapping$confi = payloadMapping[config.payloadType]) !== null && _payloadMapping$confi !== void 0 ? _payloadMapping$confi : config.payloadType;\n\t\t\tdefaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n\t\t}\n\t\tlet isCanceled = false;\n\t\tconst context = {\n\t\t\turl: toValue(url),\n\t\t\toptions: {\n\t\t\t\t...defaultFetchOptions,\n\t\t\t\t...fetchOptions\n\t\t\t},\n\t\t\tcancel: () => {\n\t\t\t\tisCanceled = true;\n\t\t\t}\n\t\t};\n\t\tif (options.beforeFetch) Object.assign(context, await options.beforeFetch(context));\n\t\tif (isCanceled || !fetch) {\n\t\t\tloading(false);\n\t\t\treturn Promise.resolve(null);\n\t\t}\n\t\tlet responseData = null;\n\t\tif (timer) timer.start();\n\t\treturn fetch(context.url, {\n\t\t\t...defaultFetchOptions,\n\t\t\t...context.options,\n\t\t\theaders: {\n\t\t\t\t...headersToObject(defaultFetchOptions.headers),\n\t\t\t\t...headersToObject((_context$options = context.options) === null || _context$options === void 0 ? void 0 : _context$options.headers)\n\t\t\t}\n\t\t}).then(async (fetchResponse) => {\n\t\t\tresponse.value = fetchResponse;\n\t\t\tstatusCode.value = fetchResponse.status;\n\t\t\tresponseData = await fetchResponse.clone()[config.type]();\n\t\t\tif (!fetchResponse.ok) {\n\t\t\t\tdata.value = initialData || null;\n\t\t\t\tthrow new Error(fetchResponse.statusText);\n\t\t\t}\n\t\t\tif (options.afterFetch) ({data: responseData} = await options.afterFetch({\n\t\t\t\tdata: responseData,\n\t\t\t\tresponse: fetchResponse,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\tdata.value = responseData;\n\t\t\tresponseEvent.trigger(fetchResponse);\n\t\t\treturn fetchResponse;\n\t\t}).catch(async (fetchError) => {\n\t\t\tlet errorData = fetchError.message || fetchError.name;\n\t\t\tif (options.onFetchError) ({error: errorData, data: responseData} = await options.onFetchError({\n\t\t\t\tdata: responseData,\n\t\t\t\terror: fetchError,\n\t\t\t\tresponse: response.value,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\terror.value = errorData;\n\t\t\tif (options.updateDataOnError) data.value = responseData;\n\t\t\terrorEvent.trigger(fetchError);\n\t\t\tif (throwOnFailed) throw fetchError;\n\t\t\treturn null;\n\t\t}).finally(() => {\n\t\t\tif (currentExecuteCounter === executeCounter) loading(false);\n\t\t\tif (timer) timer.stop();\n\t\t\tfinallyEvent.trigger(null);\n\t\t});\n\t};\n\tconst refetch = toRef(options.refetch);\n\twatch([refetch, toRef(url)], ([refetch$1]) => refetch$1 && execute(), { deep: true });\n\tconst shell = {\n\t\tisFinished: readonly(isFinished),\n\t\tisFetching: readonly(isFetching),\n\t\tstatusCode,\n\t\tresponse,\n\t\terror,\n\t\tdata,\n\t\tcanAbort,\n\t\taborted,\n\t\tabort,\n\t\texecute,\n\t\tonFetchResponse: responseEvent.on,\n\t\tonFetchError: errorEvent.on,\n\t\tonFetchFinally: finallyEvent.on,\n\t\tget: setMethod(\"GET\"),\n\t\tput: setMethod(\"PUT\"),\n\t\tpost: setMethod(\"POST\"),\n\t\tdelete: setMethod(\"DELETE\"),\n\t\tpatch: setMethod(\"PATCH\"),\n\t\thead: setMethod(\"HEAD\"),\n\t\toptions: setMethod(\"OPTIONS\"),\n\t\tjson: setType(\"json\"),\n\t\ttext: setType(\"text\"),\n\t\tblob: setType(\"blob\"),\n\t\tarrayBuffer: setType(\"arrayBuffer\"),\n\t\tformData: setType(\"formData\")\n\t};\n\tfunction setMethod(method) {\n\t\treturn (payload, payloadType) => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.method = method;\n\t\t\t\tconfig.payload = payload;\n\t\t\t\tconfig.payloadType = payloadType;\n\t\t\t\tif (isRef(config.payload)) watch([refetch, toRef(config.payload)], ([refetch$1]) => refetch$1 && execute(), { deep: true });\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tfunction waitUntilFinished() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\tfunction setType(type) {\n\t\treturn () => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.type = type;\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tif (options.immediate) Promise.resolve().then(() => execute());\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\nfunction joinPaths(start, end) {\n\tif (!start.endsWith(\"/\") && !end.startsWith(\"/\")) return `${start}/${end}`;\n\tif (start.endsWith(\"/\") && end.startsWith(\"/\")) return `${start.slice(0, -1)}${end}`;\n\treturn `${start}${end}`;\n}\n\n//#endregion\n//#region useFileDialog/index.ts\nconst DEFAULT_OPTIONS = {\n\tmultiple: true,\n\taccept: \"*\",\n\treset: false,\n\tdirectory: false\n};\nfunction prepareInitialFiles(files) {\n\tif (!files) return null;\n\tif (files instanceof FileList) return files;\n\tconst dt = new DataTransfer();\n\tfor (const file of files) dt.items.add(file);\n\treturn dt.files;\n}\n/**\n* Open file dialog with ease.\n*\n* @see https://vueuse.org/useFileDialog\n* @param options\n*/\nfunction useFileDialog(options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst files = ref(prepareInitialFiles(options.initialFiles));\n\tconst { on: onChange, trigger: changeTrigger } = createEventHook();\n\tconst { on: onCancel, trigger: cancelTrigger } = createEventHook();\n\tconst inputRef = computed(() => {\n\t\tvar _unrefElement;\n\t\tconst input = (_unrefElement = unrefElement(options.input)) !== null && _unrefElement !== void 0 ? _unrefElement : document$1 ? document$1.createElement(\"input\") : void 0;\n\t\tif (input) {\n\t\t\tinput.type = \"file\";\n\t\t\tinput.onchange = (event) => {\n\t\t\t\tfiles.value = event.target.files;\n\t\t\t\tchangeTrigger(files.value);\n\t\t\t};\n\t\t\tinput.oncancel = () => {\n\t\t\t\tcancelTrigger();\n\t\t\t};\n\t\t}\n\t\treturn input;\n\t});\n\tconst reset = () => {\n\t\tfiles.value = null;\n\t\tif (inputRef.value && inputRef.value.value) {\n\t\t\tinputRef.value.value = \"\";\n\t\t\tchangeTrigger(null);\n\t\t}\n\t};\n\tconst applyOptions = (options$1) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tel.multiple = toValue(options$1.multiple);\n\t\tel.accept = toValue(options$1.accept);\n\t\tel.webkitdirectory = toValue(options$1.directory);\n\t\tif (hasOwn(options$1, \"capture\")) el.capture = toValue(options$1.capture);\n\t};\n\tconst open = (localOptions) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tconst mergedOptions = {\n\t\t\t...DEFAULT_OPTIONS,\n\t\t\t...options,\n\t\t\t...localOptions\n\t\t};\n\t\tapplyOptions(mergedOptions);\n\t\tif (toValue(mergedOptions.reset)) reset();\n\t\tel.click();\n\t};\n\twatchEffect(() => {\n\t\tapplyOptions(options);\n\t});\n\treturn {\n\t\tfiles: readonly(files),\n\t\topen,\n\t\treset,\n\t\tonCancel,\n\t\tonChange\n\t};\n}\n\n//#endregion\n//#region useFileSystemAccess/index.ts\nfunction useFileSystemAccess(options = {}) {\n\tconst { window: _window = defaultWindow, dataType = \"Text\" } = options;\n\tconst window$1 = _window;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"showSaveFilePicker\" in window$1 && \"showOpenFilePicker\" in window$1);\n\tconst fileHandle = shallowRef();\n\tconst data = shallowRef();\n\tconst file = shallowRef();\n\tconst fileName = computed(() => {\n\t\tvar _file$value$name, _file$value;\n\t\treturn (_file$value$name = (_file$value = file.value) === null || _file$value === void 0 ? void 0 : _file$value.name) !== null && _file$value$name !== void 0 ? _file$value$name : \"\";\n\t});\n\tconst fileMIME = computed(() => {\n\t\tvar _file$value$type, _file$value2;\n\t\treturn (_file$value$type = (_file$value2 = file.value) === null || _file$value2 === void 0 ? void 0 : _file$value2.type) !== null && _file$value$type !== void 0 ? _file$value$type : \"\";\n\t});\n\tconst fileSize = computed(() => {\n\t\tvar _file$value$size, _file$value3;\n\t\treturn (_file$value$size = (_file$value3 = file.value) === null || _file$value3 === void 0 ? void 0 : _file$value3.size) !== null && _file$value$size !== void 0 ? _file$value$size : 0;\n\t});\n\tconst fileLastModified = computed(() => {\n\t\tvar _file$value$lastModif, _file$value4;\n\t\treturn (_file$value$lastModif = (_file$value4 = file.value) === null || _file$value4 === void 0 ? void 0 : _file$value4.lastModified) !== null && _file$value$lastModif !== void 0 ? _file$value$lastModif : 0;\n\t});\n\tasync function open(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tconst [handle] = await window$1.showOpenFilePicker({\n\t\t\t...toValue(options),\n\t\t\t..._options\n\t\t});\n\t\tfileHandle.value = handle;\n\t\tawait updateData();\n\t}\n\tasync function create(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window$1.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tdata.value = void 0;\n\t\tawait updateData();\n\t}\n\tasync function save(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tif (!fileHandle.value) return saveAs(_options);\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function saveAs(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window$1.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function updateFile() {\n\t\tvar _fileHandle$value;\n\t\tfile.value = await ((_fileHandle$value = fileHandle.value) === null || _fileHandle$value === void 0 ? void 0 : _fileHandle$value.getFile());\n\t}\n\tasync function updateData() {\n\t\tvar _file$value5, _file$value6;\n\t\tawait updateFile();\n\t\tconst type = toValue(dataType);\n\t\tif (type === \"Text\") data.value = await ((_file$value5 = file.value) === null || _file$value5 === void 0 ? void 0 : _file$value5.text());\n\t\telse if (type === \"ArrayBuffer\") data.value = await ((_file$value6 = file.value) === null || _file$value6 === void 0 ? void 0 : _file$value6.arrayBuffer());\n\t\telse if (type === \"Blob\") data.value = file.value;\n\t}\n\twatch(() => toValue(dataType), updateData);\n\treturn {\n\t\tisSupported,\n\t\tdata,\n\t\tfile,\n\t\tfileName,\n\t\tfileMIME,\n\t\tfileSize,\n\t\tfileLastModified,\n\t\topen,\n\t\tcreate,\n\t\tsave,\n\t\tsaveAs,\n\t\tupdateData\n\t};\n}\n\n//#endregion\n//#region useFocus/index.ts\n/**\n* Track or set the focus state of a DOM element.\n*\n* @see https://vueuse.org/useFocus\n* @param target The target element for the focus and blur events.\n* @param options\n*/\nfunction useFocus(target, options = {}) {\n\tconst { initialValue = false, focusVisible = false, preventScroll = false } = options;\n\tconst innerFocused = shallowRef(false);\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, \"focus\", (event) => {\n\t\tvar _matches, _ref;\n\t\tif (!focusVisible || ((_matches = (_ref = event.target).matches) === null || _matches === void 0 ? void 0 : _matches.call(_ref, \":focus-visible\"))) innerFocused.value = true;\n\t}, listenerOptions);\n\tuseEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n\tconst focused = computed({\n\t\tget: () => innerFocused.value,\n\t\tset(value) {\n\t\t\tvar _targetElement$value, _targetElement$value2;\n\t\t\tif (!value && innerFocused.value) (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || _targetElement$value.blur();\n\t\t\telse if (value && !innerFocused.value) (_targetElement$value2 = targetElement.value) === null || _targetElement$value2 === void 0 || _targetElement$value2.focus({ preventScroll });\n\t\t}\n\t});\n\twatch(targetElement, () => {\n\t\tfocused.value = initialValue;\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\treturn { focused };\n}\n\n//#endregion\n//#region useFocusWithin/index.ts\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\n/**\n* Track if focus is contained within the target element\n*\n* @see https://vueuse.org/useFocusWithin\n* @param target The target element to track\n* @param options Focus within options\n*/\nfunction useFocusWithin(target, options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst _focused = shallowRef(false);\n\tconst focused = computed(() => _focused.value);\n\tconst activeElement = useActiveElement(options);\n\tif (!window$1 || !activeElement.value) return { focused };\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n\tuseEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n\t\tvar _targetElement$value$, _targetElement$value, _targetElement$value$2;\n\t\treturn _focused.value = (_targetElement$value$ = (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || (_targetElement$value$2 = _targetElement$value.matches) === null || _targetElement$value$2 === void 0 ? void 0 : _targetElement$value$2.call(_targetElement$value, PSEUDO_CLASS_FOCUS_WITHIN)) !== null && _targetElement$value$ !== void 0 ? _targetElement$value$ : false;\n\t}, listenerOptions);\n\treturn { focused };\n}\n\n//#endregion\n//#region useFps/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useFps(options) {\n\tvar _options$every;\n\tconst fps = shallowRef(0);\n\tif (typeof performance === \"undefined\") return fps;\n\tconst every = (_options$every = options === null || options === void 0 ? void 0 : options.every) !== null && _options$every !== void 0 ? _options$every : 10;\n\tlet last = performance.now();\n\tlet ticks = 0;\n\tuseRafFn(() => {\n\t\tticks += 1;\n\t\tif (ticks >= every) {\n\t\t\tconst now = performance.now();\n\t\t\tconst diff = now - last;\n\t\t\tfps.value = Math.round(1e3 / (diff / ticks));\n\t\t\tlast = now;\n\t\t\tticks = 0;\n\t\t}\n\t});\n\treturn fps;\n}\n\n//#endregion\n//#region useFullscreen/index.ts\nconst eventHandlers = [\n\t\"fullscreenchange\",\n\t\"webkitfullscreenchange\",\n\t\"webkitendfullscreen\",\n\t\"mozfullscreenchange\",\n\t\"MSFullscreenChange\"\n];\n/**\n* Reactive Fullscreen API.\n*\n* @see https://vueuse.org/useFullscreen\n* @param target\n* @param options\n*/\nfunction useFullscreen(target, options = {}) {\n\tconst { document: document$1 = defaultDocument, autoExit = false } = options;\n\tconst targetRef = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : document$1 === null || document$1 === void 0 ? void 0 : document$1.documentElement;\n\t});\n\tconst isFullscreen = shallowRef(false);\n\tconst requestMethod = computed(() => {\n\t\treturn [\n\t\t\t\"requestFullscreen\",\n\t\t\t\"webkitRequestFullscreen\",\n\t\t\t\"webkitEnterFullscreen\",\n\t\t\t\"webkitEnterFullScreen\",\n\t\t\t\"webkitRequestFullScreen\",\n\t\t\t\"mozRequestFullScreen\",\n\t\t\t\"msRequestFullscreen\"\n\t\t].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value);\n\t});\n\tconst exitMethod = computed(() => {\n\t\treturn [\n\t\t\t\"exitFullscreen\",\n\t\t\t\"webkitExitFullscreen\",\n\t\t\t\"webkitExitFullScreen\",\n\t\t\t\"webkitCancelFullScreen\",\n\t\t\t\"mozCancelFullScreen\",\n\t\t\t\"msExitFullscreen\"\n\t\t].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenEnabled = computed(() => {\n\t\treturn [\n\t\t\t\"fullScreen\",\n\t\t\t\"webkitIsFullScreen\",\n\t\t\t\"webkitDisplayingFullscreen\",\n\t\t\t\"mozFullScreen\",\n\t\t\t\"msFullscreenElement\"\n\t\t].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenElementMethod = [\n\t\t\"fullscreenElement\",\n\t\t\"webkitFullscreenElement\",\n\t\t\"mozFullScreenElement\",\n\t\t\"msFullscreenElement\"\n\t].find((m) => document$1 && m in document$1);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => targetRef.value && document$1 && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n\tconst isCurrentElementFullScreen = () => {\n\t\tif (fullscreenElementMethod) return (document$1 === null || document$1 === void 0 ? void 0 : document$1[fullscreenElementMethod]) === targetRef.value;\n\t\treturn false;\n\t};\n\tconst isElementFullScreen = () => {\n\t\tif (fullscreenEnabled.value) if (document$1 && document$1[fullscreenEnabled.value] != null) return document$1[fullscreenEnabled.value];\n\t\telse {\n\t\t\tconst target$1 = targetRef.value;\n\t\t\tif ((target$1 === null || target$1 === void 0 ? void 0 : target$1[fullscreenEnabled.value]) != null) return Boolean(target$1[fullscreenEnabled.value]);\n\t\t}\n\t\treturn false;\n\t};\n\tasync function exit() {\n\t\tif (!isSupported.value || !isFullscreen.value) return;\n\t\tif (exitMethod.value) if ((document$1 === null || document$1 === void 0 ? void 0 : document$1[exitMethod.value]) != null) await document$1[exitMethod.value]();\n\t\telse {\n\t\t\tconst target$1 = targetRef.value;\n\t\t\tif ((target$1 === null || target$1 === void 0 ? void 0 : target$1[exitMethod.value]) != null) await target$1[exitMethod.value]();\n\t\t}\n\t\tisFullscreen.value = false;\n\t}\n\tasync function enter() {\n\t\tif (!isSupported.value || isFullscreen.value) return;\n\t\tif (isElementFullScreen()) await exit();\n\t\tconst target$1 = targetRef.value;\n\t\tif (requestMethod.value && (target$1 === null || target$1 === void 0 ? void 0 : target$1[requestMethod.value]) != null) {\n\t\t\tawait target$1[requestMethod.value]();\n\t\t\tisFullscreen.value = true;\n\t\t}\n\t}\n\tasync function toggle() {\n\t\tawait (isFullscreen.value ? exit() : enter());\n\t}\n\tconst handlerCallback = () => {\n\t\tconst isElementFullScreenValue = isElementFullScreen();\n\t\tif (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen()) isFullscreen.value = isElementFullScreenValue;\n\t};\n\tconst listenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t};\n\tuseEventListener(document$1, eventHandlers, handlerCallback, listenerOptions);\n\tuseEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n\ttryOnMounted(handlerCallback, false);\n\tif (autoExit) tryOnScopeDispose(exit);\n\treturn {\n\t\tisSupported,\n\t\tisFullscreen,\n\t\tenter,\n\t\texit,\n\t\ttoggle\n\t};\n}\n\n//#endregion\n//#region useGamepad/index.ts\n/**\n* Maps a standard standard gamepad to an Xbox 360 Controller.\n*/\nfunction mapGamepadToXbox360Controller(gamepad) {\n\treturn computed(() => {\n\t\tif (gamepad.value) return {\n\t\t\tbuttons: {\n\t\t\t\ta: gamepad.value.buttons[0],\n\t\t\t\tb: gamepad.value.buttons[1],\n\t\t\t\tx: gamepad.value.buttons[2],\n\t\t\t\ty: gamepad.value.buttons[3]\n\t\t\t},\n\t\t\tbumper: {\n\t\t\t\tleft: gamepad.value.buttons[4],\n\t\t\t\tright: gamepad.value.buttons[5]\n\t\t\t},\n\t\t\ttriggers: {\n\t\t\t\tleft: gamepad.value.buttons[6],\n\t\t\t\tright: gamepad.value.buttons[7]\n\t\t\t},\n\t\t\tstick: {\n\t\t\t\tleft: {\n\t\t\t\t\thorizontal: gamepad.value.axes[0],\n\t\t\t\t\tvertical: gamepad.value.axes[1],\n\t\t\t\t\tbutton: gamepad.value.buttons[10]\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\thorizontal: gamepad.value.axes[2],\n\t\t\t\t\tvertical: gamepad.value.axes[3],\n\t\t\t\t\tbutton: gamepad.value.buttons[11]\n\t\t\t\t}\n\t\t\t},\n\t\t\tdpad: {\n\t\t\t\tup: gamepad.value.buttons[12],\n\t\t\t\tdown: gamepad.value.buttons[13],\n\t\t\t\tleft: gamepad.value.buttons[14],\n\t\t\t\tright: gamepad.value.buttons[15]\n\t\t\t},\n\t\t\tback: gamepad.value.buttons[8],\n\t\t\tstart: gamepad.value.buttons[9]\n\t\t};\n\t\treturn null;\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction useGamepad(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"getGamepads\" in navigator$1);\n\tconst gamepads = ref([]);\n\tconst onConnectedHook = createEventHook();\n\tconst onDisconnectedHook = createEventHook();\n\tconst stateFromGamepad = (gamepad) => {\n\t\tconst hapticActuators = [];\n\t\tconst vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n\t\tif (vibrationActuator) hapticActuators.push(vibrationActuator);\n\t\tif (gamepad.hapticActuators) hapticActuators.push(...gamepad.hapticActuators);\n\t\treturn {\n\t\t\tid: gamepad.id,\n\t\t\tindex: gamepad.index,\n\t\t\tconnected: gamepad.connected,\n\t\t\tmapping: gamepad.mapping,\n\t\t\ttimestamp: gamepad.timestamp,\n\t\t\tvibrationActuator: gamepad.vibrationActuator,\n\t\t\thapticActuators,\n\t\t\taxes: gamepad.axes.map((axes) => axes),\n\t\t\tbuttons: gamepad.buttons.map((button) => ({\n\t\t\t\tpressed: button.pressed,\n\t\t\t\ttouched: button.touched,\n\t\t\t\tvalue: button.value\n\t\t\t}))\n\t\t};\n\t};\n\tconst updateGamepadState = () => {\n\t\tconst _gamepads = (navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n\t};\n\tconst { isActive, pause, resume } = useRafFn(updateGamepadState);\n\tconst onGamepadConnected = (gamepad) => {\n\t\tif (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n\t\t\tgamepads.value.push(stateFromGamepad(gamepad));\n\t\t\tonConnectedHook.trigger(gamepad.index);\n\t\t}\n\t\tresume();\n\t};\n\tconst onGamepadDisconnected = (gamepad) => {\n\t\tgamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n\t\tonDisconnectedHook.trigger(gamepad.index);\n\t};\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n\tuseEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n\ttryOnMounted(() => {\n\t\tconst _gamepads = (navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) onGamepadConnected(gamepad);\n\t});\n\tpause();\n\treturn {\n\t\tisSupported,\n\t\tonConnected: onConnectedHook.on,\n\t\tonDisconnected: onDisconnectedHook.on,\n\t\tgamepads,\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n\n//#endregion\n//#region useGeolocation/index.ts\n/**\n* Reactive Geolocation API.\n*\n* @see https://vueuse.org/useGeolocation\n* @param options\n*/\nfunction useGeolocation(options = {}) {\n\tconst { enableHighAccuracy = true, maximumAge = 3e4, timeout = 27e3, navigator: navigator$1 = defaultNavigator, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"geolocation\" in navigator$1);\n\tconst locatedAt = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst coords = ref({\n\t\taccuracy: 0,\n\t\tlatitude: Number.POSITIVE_INFINITY,\n\t\tlongitude: Number.POSITIVE_INFINITY,\n\t\taltitude: null,\n\t\taltitudeAccuracy: null,\n\t\theading: null,\n\t\tspeed: null\n\t});\n\tfunction updatePosition(position) {\n\t\tlocatedAt.value = position.timestamp;\n\t\tcoords.value = position.coords;\n\t\terror.value = null;\n\t}\n\tlet watcher;\n\tfunction resume() {\n\t\tif (isSupported.value) watcher = navigator$1.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n\t\t\tenableHighAccuracy,\n\t\t\tmaximumAge,\n\t\t\ttimeout\n\t\t});\n\t}\n\tif (immediate) resume();\n\tfunction pause() {\n\t\tif (watcher && navigator$1) navigator$1.geolocation.clearWatch(watcher);\n\t}\n\ttryOnScopeDispose(() => {\n\t\tpause();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcoords,\n\t\tlocatedAt,\n\t\terror,\n\t\tresume,\n\t\tpause\n\t};\n}\n\n//#endregion\n//#region useIdle/index.ts\nconst defaultEvents$1 = [\n\t\"mousemove\",\n\t\"mousedown\",\n\t\"resize\",\n\t\"keydown\",\n\t\"touchstart\",\n\t\"wheel\"\n];\nconst oneMinute = 6e4;\n/**\n* Tracks whether the user is being inactive.\n*\n* @see https://vueuse.org/useIdle\n* @param timeout default to 1 minute\n* @param options IdleOptions\n*/\nfunction useIdle(timeout = oneMinute, options = {}) {\n\tconst { initialState = false, listenForVisibilityChange = true, events: events$1 = defaultEvents$1, window: window$1 = defaultWindow, eventFilter = throttleFilter(50) } = options;\n\tconst idle = shallowRef(initialState);\n\tconst lastActive = shallowRef(timestamp());\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tconst reset = () => {\n\t\tidle.value = false;\n\t\tclearTimeout(timer);\n\t\ttimer = setTimeout(() => idle.value = true, timeout);\n\t};\n\tconst onEvent = createFilterWrapper(eventFilter, () => {\n\t\tlastActive.value = timestamp();\n\t\treset();\n\t});\n\tif (window$1) {\n\t\tconst document$1 = window$1.document;\n\t\tconst listenerOptions = { passive: true };\n\t\tfor (const event of events$1) useEventListener(window$1, event, () => {\n\t\t\tif (!isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tif (listenForVisibilityChange) useEventListener(document$1, \"visibilitychange\", () => {\n\t\t\tif (document$1.hidden || !isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tstart();\n\t}\n\tfunction start() {\n\t\tif (isPending.value) return;\n\t\tisPending.value = true;\n\t\tif (!initialState) reset();\n\t}\n\tfunction stop() {\n\t\tidle.value = initialState;\n\t\tclearTimeout(timer);\n\t\tisPending.value = false;\n\t}\n\treturn {\n\t\tidle,\n\t\tlastActive,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tisPending: shallowReadonly(isPending)\n\t};\n}\n\n//#endregion\n//#region useImage/index.ts\nasync function loadImage(options) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst img = new Image();\n\t\tconst { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n\t\timg.src = src;\n\t\tif (srcset != null) img.srcset = srcset;\n\t\tif (sizes != null) img.sizes = sizes;\n\t\tif (clazz != null) img.className = clazz;\n\t\tif (loading != null) img.loading = loading;\n\t\tif (crossorigin != null) img.crossOrigin = crossorigin;\n\t\tif (referrerPolicy != null) img.referrerPolicy = referrerPolicy;\n\t\tif (width != null) img.width = width;\n\t\tif (height != null) img.height = height;\n\t\tif (decoding != null) img.decoding = decoding;\n\t\tif (fetchPriority != null) img.fetchPriority = fetchPriority;\n\t\tif (ismap != null) img.isMap = ismap;\n\t\tif (usemap != null) img.useMap = usemap;\n\t\timg.onload = () => resolve(img);\n\t\timg.onerror = reject;\n\t});\n}\n/**\n* Reactive load an image in the browser, you can wait the result to display it or show a fallback.\n*\n* @see https://vueuse.org/useImage\n* @param options Image attributes, as used in the <img> tag\n* @param asyncStateOptions\n*/\nfunction useImage(options, asyncStateOptions = {}) {\n\tconst state = useAsyncState(() => loadImage(toValue(options)), void 0, {\n\t\tresetOnExecute: true,\n\t\t...asyncStateOptions\n\t});\n\twatch(() => toValue(options), () => state.execute(asyncStateOptions.delay), { deep: true });\n\treturn state;\n}\n\n//#endregion\n//#region _resolve-element.ts\n/**\n* Resolves an element from a given element, window, or document.\n*\n* @internal\n*/\nfunction resolveElement(el) {\n\tif (typeof Window !== \"undefined\" && el instanceof Window) return el.document.documentElement;\n\tif (typeof Document !== \"undefined\" && el instanceof Document) return el.documentElement;\n\treturn el;\n}\n\n//#endregion\n//#region useScroll/index.ts\n/**\n* We have to check if the scroll amount is close enough to some threshold in order to\n* more accurately calculate arrivedState. This is because scrollTop/scrollLeft are non-rounded\n* numbers, while scrollHeight/scrollWidth and clientHeight/clientWidth are rounded.\n* https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled\n*/\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\n/**\n* Reactive scroll.\n*\n* @see https://vueuse.org/useScroll\n* @param element\n* @param options\n*/\nfunction useScroll(element, options = {}) {\n\tconst { throttle = 0, idle = 200, onStop = noop, onScroll = noop, offset = {\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0\n\t}, observe: _observe = { mutation: false }, eventListenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t}, behavior = \"auto\", window: window$1 = defaultWindow, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = options;\n\tconst observe = typeof _observe === \"boolean\" ? { mutation: _observe } : _observe;\n\tconst internalX = shallowRef(0);\n\tconst internalY = shallowRef(0);\n\tconst x = computed({\n\t\tget() {\n\t\t\treturn internalX.value;\n\t\t},\n\t\tset(x$1) {\n\t\t\tscrollTo(x$1, void 0);\n\t\t}\n\t});\n\tconst y = computed({\n\t\tget() {\n\t\t\treturn internalY.value;\n\t\t},\n\t\tset(y$1) {\n\t\t\tscrollTo(void 0, y$1);\n\t\t}\n\t});\n\tfunction scrollTo(_x, _y) {\n\t\tvar _ref, _toValue, _toValue2, _document;\n\t\tif (!window$1) return;\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\t(_ref = _element instanceof Document ? window$1.document.body : _element) === null || _ref === void 0 || _ref.scrollTo({\n\t\t\ttop: (_toValue = toValue(_y)) !== null && _toValue !== void 0 ? _toValue : y.value,\n\t\t\tleft: (_toValue2 = toValue(_x)) !== null && _toValue2 !== void 0 ? _toValue2 : x.value,\n\t\t\tbehavior: toValue(behavior)\n\t\t});\n\t\tconst scrollContainer = (_element === null || _element === void 0 || (_document = _element.document) === null || _document === void 0 ? void 0 : _document.documentElement) || (_element === null || _element === void 0 ? void 0 : _element.documentElement) || _element;\n\t\tif (x != null) internalX.value = scrollContainer.scrollLeft;\n\t\tif (y != null) internalY.value = scrollContainer.scrollTop;\n\t}\n\tconst isScrolling = shallowRef(false);\n\tconst arrivedState = reactive({\n\t\tleft: true,\n\t\tright: false,\n\t\ttop: true,\n\t\tbottom: false\n\t});\n\tconst directions = reactive({\n\t\tleft: false,\n\t\tright: false,\n\t\ttop: false,\n\t\tbottom: false\n\t});\n\tconst onScrollEnd = (e) => {\n\t\tif (!isScrolling.value) return;\n\t\tisScrolling.value = false;\n\t\tdirections.left = false;\n\t\tdirections.right = false;\n\t\tdirections.top = false;\n\t\tdirections.bottom = false;\n\t\tonStop(e);\n\t};\n\tconst onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n\tconst setArrivedState = (target) => {\n\t\tvar _document2;\n\t\tif (!window$1) return;\n\t\tconst el = (target === null || target === void 0 || (_document2 = target.document) === null || _document2 === void 0 ? void 0 : _document2.documentElement) || (target === null || target === void 0 ? void 0 : target.documentElement) || unrefElement(target);\n\t\tconst { display, flexDirection, direction } = getComputedStyle(el);\n\t\tconst directionMultipler = direction === \"rtl\" ? -1 : 1;\n\t\tconst scrollLeft = el.scrollLeft;\n\t\tdirections.left = scrollLeft < internalX.value;\n\t\tdirections.right = scrollLeft > internalX.value;\n\t\tconst left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0);\n\t\tconst right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\tif (display === \"flex\" && flexDirection === \"row-reverse\") {\n\t\t\tarrivedState.left = right;\n\t\t\tarrivedState.right = left;\n\t\t} else {\n\t\t\tarrivedState.left = left;\n\t\t\tarrivedState.right = right;\n\t\t}\n\t\tinternalX.value = scrollLeft;\n\t\tlet scrollTop = el.scrollTop;\n\t\tif (target === window$1.document && !scrollTop) scrollTop = window$1.document.body.scrollTop;\n\t\tdirections.top = scrollTop < internalY.value;\n\t\tdirections.bottom = scrollTop > internalY.value;\n\t\tconst top = Math.abs(scrollTop) <= (offset.top || 0);\n\t\tconst bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\t/**\n\t\t* reverse columns and rows behave exactly the other way around,\n\t\t* bottom is treated as top and top is treated as the negative version of bottom\n\t\t*/\n\t\tif (display === \"flex\" && flexDirection === \"column-reverse\") {\n\t\t\tarrivedState.top = bottom;\n\t\t\tarrivedState.bottom = top;\n\t\t} else {\n\t\t\tarrivedState.top = top;\n\t\t\tarrivedState.bottom = bottom;\n\t\t}\n\t\tinternalY.value = scrollTop;\n\t};\n\tconst onScrollHandler = (e) => {\n\t\tvar _documentElement;\n\t\tif (!window$1) return;\n\t\tsetArrivedState((_documentElement = e.target.documentElement) !== null && _documentElement !== void 0 ? _documentElement : e.target);\n\t\tisScrolling.value = true;\n\t\tonScrollEndDebounced(e);\n\t\tonScroll(e);\n\t};\n\tuseEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);\n\ttryOnMounted(() => {\n\t\ttry {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (!_element) return;\n\t\t\tsetArrivedState(_element);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t});\n\tif ((observe === null || observe === void 0 ? void 0 : observe.mutation) && element != null && element !== window$1 && element !== document) useMutationObserver(element, () => {\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\tsetArrivedState(_element);\n\t}, {\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true\n\t});\n\tuseEventListener(element, \"scrollend\", onScrollEnd, eventListenerOptions);\n\treturn {\n\t\tx,\n\t\ty,\n\t\tisScrolling,\n\t\tarrivedState,\n\t\tdirections,\n\t\tmeasure() {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (window$1 && _element) setArrivedState(_element);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region useInfiniteScroll/index.ts\n/**\n* Reactive infinite scroll.\n*\n* @see https://vueuse.org/useInfiniteScroll\n*/\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n\tvar _options$distance;\n\tconst { direction = \"bottom\", interval = 100, canLoadMore = () => true } = options;\n\tconst state = reactive(useScroll(element, {\n\t\t...options,\n\t\toffset: {\n\t\t\t[direction]: (_options$distance = options.distance) !== null && _options$distance !== void 0 ? _options$distance : 0,\n\t\t\t...options.offset\n\t\t}\n\t}));\n\tconst promise = ref();\n\tconst isLoading = computed(() => !!promise.value);\n\tconst observedElement = computed(() => {\n\t\treturn resolveElement(toValue(element));\n\t});\n\tconst isElementVisible = useElementVisibility(observedElement);\n\tfunction checkAndLoad() {\n\t\tstate.measure();\n\t\tif (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value)) return;\n\t\tconst { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n\t\tconst isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n\t\tif (state.arrivedState[direction] || isNarrower) {\n\t\t\tif (!promise.value) promise.value = Promise.all([onLoadMore(state), new Promise((resolve) => setTimeout(resolve, interval))]).finally(() => {\n\t\t\t\tpromise.value = null;\n\t\t\t\tnextTick(() => checkAndLoad());\n\t\t\t});\n\t\t}\n\t}\n\ttryOnUnmounted(watch(() => [state.arrivedState[direction], isElementVisible.value], checkAndLoad, { immediate: true }));\n\treturn {\n\t\tisLoading,\n\t\treset() {\n\t\t\tnextTick(() => checkAndLoad());\n\t\t}\n\t};\n}\n\n//#endregion\n//#region useKeyModifier/index.ts\nconst defaultEvents = [\n\t\"mousedown\",\n\t\"mouseup\",\n\t\"keydown\",\n\t\"keyup\"\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction useKeyModifier(modifier, options = {}) {\n\tconst { events: events$1 = defaultEvents, document: document$1 = defaultDocument, initial = null } = options;\n\tconst state = shallowRef(initial);\n\tif (document$1) events$1.forEach((listenerEvent) => {\n\t\tuseEventListener(document$1, listenerEvent, (evt) => {\n\t\t\tif (typeof evt.getModifierState === \"function\") state.value = evt.getModifierState(modifier);\n\t\t}, { passive: true });\n\t});\n\treturn state;\n}\n\n//#endregion\n//#region useLocalStorage/index.ts\n/**\n* Reactive LocalStorage.\n*\n* @see https://vueuse.org/useLocalStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useLocalStorage(key, initialValue, options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window$1 === null || window$1 === void 0 ? void 0 : window$1.localStorage, options);\n}\n\n//#endregion\n//#region useMagicKeys/aliasMap.ts\nconst DefaultMagicKeysAliasMap = {\n\tctrl: \"control\",\n\tcommand: \"meta\",\n\tcmd: \"meta\",\n\toption: \"alt\",\n\tup: \"arrowup\",\n\tdown: \"arrowdown\",\n\tleft: \"arrowleft\",\n\tright: \"arrowright\"\n};\n\n//#endregion\n//#region useMagicKeys/index.ts\nfunction useMagicKeys(options = {}) {\n\tconst { reactive: useReactive = false, target = defaultWindow, aliasMap = DefaultMagicKeysAliasMap, passive = true, onEventFired = noop } = options;\n\tconst current = reactive(/* @__PURE__ */ new Set());\n\tconst obj = {\n\t\ttoJSON() {\n\t\t\treturn {};\n\t\t},\n\t\tcurrent\n\t};\n\tconst refs = useReactive ? reactive(obj) : obj;\n\tconst metaDeps = /* @__PURE__ */ new Set();\n\tconst depsMap = new Map([\n\t\t[\"Meta\", metaDeps],\n\t\t[\"Shift\", /* @__PURE__ */ new Set()],\n\t\t[\"Alt\", /* @__PURE__ */ new Set()]\n\t]);\n\tconst usedKeys = /* @__PURE__ */ new Set();\n\tfunction setRefs(key, value) {\n\t\tif (key in refs) if (useReactive) refs[key] = value;\n\t\telse refs[key].value = value;\n\t}\n\tfunction reset() {\n\t\tcurrent.clear();\n\t\tfor (const key of usedKeys) setRefs(key, false);\n\t}\n\tfunction updateDeps(value, e, keys$1) {\n\t\tif (!value || typeof e.getModifierState !== \"function\") return;\n\t\tfor (const [modifier, depsSet] of depsMap) if (e.getModifierState(modifier)) {\n\t\t\tkeys$1.forEach((key) => depsSet.add(key));\n\t\t\tbreak;\n\t\t}\n\t}\n\tfunction clearDeps(value, key) {\n\t\tif (value) return;\n\t\tconst depsMapKey = `${key[0].toUpperCase()}${key.slice(1)}`;\n\t\tconst deps = depsMap.get(depsMapKey);\n\t\tif (![\"shift\", \"alt\"].includes(key) || !deps) return;\n\t\tconst depsArray = Array.from(deps);\n\t\tconst depsIndex = depsArray.indexOf(key);\n\t\tdepsArray.forEach((key$1, index) => {\n\t\t\tif (index >= depsIndex) {\n\t\t\t\tcurrent.delete(key$1);\n\t\t\t\tsetRefs(key$1, false);\n\t\t\t}\n\t\t});\n\t\tdeps.clear();\n\t}\n\tfunction updateRefs(e, value) {\n\t\tvar _e$key, _e$code;\n\t\tconst key = (_e$key = e.key) === null || _e$key === void 0 ? void 0 : _e$key.toLowerCase();\n\t\tconst values = [(_e$code = e.code) === null || _e$code === void 0 ? void 0 : _e$code.toLowerCase(), key].filter(Boolean);\n\t\tif (key) if (value) current.add(key);\n\t\telse current.delete(key);\n\t\tfor (const key$1 of values) {\n\t\t\tusedKeys.add(key$1);\n\t\t\tsetRefs(key$1, value);\n\t\t}\n\t\tupdateDeps(value, e, [...current, ...values]);\n\t\tclearDeps(value, key);\n\t\tif (key === \"meta\" && !value) {\n\t\t\tmetaDeps.forEach((key$1) => {\n\t\t\t\tcurrent.delete(key$1);\n\t\t\t\tsetRefs(key$1, false);\n\t\t\t});\n\t\t\tmetaDeps.clear();\n\t\t}\n\t}\n\tuseEventListener(target, \"keydown\", (e) => {\n\t\tupdateRefs(e, true);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(target, \"keyup\", (e) => {\n\t\tupdateRefs(e, false);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(\"blur\", reset, { passive });\n\tuseEventListener(\"focus\", reset, { passive });\n\tconst proxy = new Proxy(refs, { get(target$1, prop, rec) {\n\t\tif (typeof prop !== \"string\") return Reflect.get(target$1, prop, rec);\n\t\tprop = prop.toLowerCase();\n\t\tif (prop in aliasMap) prop = aliasMap[prop];\n\t\tif (!(prop in refs)) if (/[+_-]/.test(prop)) {\n\t\t\tconst keys$1 = prop.split(/[+_-]/g).map((i) => i.trim());\n\t\t\trefs[prop] = computed(() => keys$1.map((key) => toValue(proxy[key])).every(Boolean));\n\t\t} else refs[prop] = shallowRef(false);\n\t\tconst r = Reflect.get(target$1, prop, rec);\n\t\treturn useReactive ? toValue(r) : r;\n\t} });\n\treturn proxy;\n}\n\n//#endregion\n//#region useMediaControls/index.ts\n/**\n* Automatically check if the ref exists and if it does run the cb fn\n*/\nfunction usingElRef(source, cb) {\n\tif (toValue(source)) cb(toValue(source));\n}\n/**\n* Converts a TimeRange object to an array\n*/\nfunction timeRangeToArray(timeRanges) {\n\tlet ranges = [];\n\tfor (let i = 0; i < timeRanges.length; ++i) ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n\treturn ranges;\n}\n/**\n* Converts a TextTrackList object to an array of `UseMediaTextTrack`\n*/\nfunction tracksToArray(tracks) {\n\treturn Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({\n\t\tid,\n\t\tlabel,\n\t\tkind,\n\t\tlanguage,\n\t\tmode,\n\t\tactiveCues,\n\t\tcues,\n\t\tinBandMetadataTrackDispatchType\n\t}));\n}\nconst defaultOptions = {\n\tsrc: \"\",\n\ttracks: []\n};\nfunction useMediaControls(target, options = {}) {\n\ttarget = toRef(target);\n\toptions = {\n\t\t...defaultOptions,\n\t\t...options\n\t};\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst listenerOptions = { passive: true };\n\tconst currentTime = shallowRef(0);\n\tconst duration = shallowRef(0);\n\tconst seeking = shallowRef(false);\n\tconst volume = shallowRef(1);\n\tconst waiting = shallowRef(false);\n\tconst ended = shallowRef(false);\n\tconst playing = shallowRef(false);\n\tconst rate = shallowRef(1);\n\tconst stalled = shallowRef(false);\n\tconst buffered = ref([]);\n\tconst tracks = ref([]);\n\tconst selectedTrack = shallowRef(-1);\n\tconst isPictureInPicture = shallowRef(false);\n\tconst muted = shallowRef(false);\n\tconst supportsPictureInPicture = document$1 && \"pictureInPictureEnabled\" in document$1;\n\tconst sourceErrorEvent = createEventHook();\n\tconst playbackErrorEvent = createEventHook();\n\t/**\n\t* Disables the specified track. If no track is specified then\n\t* all tracks will be disabled\n\t*\n\t* @param track The id of the track to disable\n\t*/\n\tconst disableTrack = (track) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tif (track) {\n\t\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\t\tel.textTracks[id].mode = \"disabled\";\n\t\t\t} else for (let i = 0; i < el.textTracks.length; ++i) el.textTracks[i].mode = \"disabled\";\n\t\t\tselectedTrack.value = -1;\n\t\t});\n\t};\n\t/**\n\t* Enables the specified track and disables the\n\t* other tracks unless otherwise specified\n\t*\n\t* @param track The track of the id of the track to enable\n\t* @param disableTracks Disable all other tracks\n\t*/\n\tconst enableTrack = (track, disableTracks = true) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\tif (disableTracks) disableTrack();\n\t\t\tel.textTracks[id].mode = \"showing\";\n\t\t\tselectedTrack.value = id;\n\t\t});\n\t};\n\t/**\n\t* Toggle picture in picture mode for the player.\n\t*/\n\tconst togglePictureInPicture = () => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tusingElRef(target, async (el) => {\n\t\t\t\tif (supportsPictureInPicture) if (!isPictureInPicture.value) el.requestPictureInPicture().then(resolve).catch(reject);\n\t\t\t\telse document$1.exitPictureInPicture().then(resolve).catch(reject);\n\t\t\t});\n\t\t});\n\t};\n\t/**\n\t* This will automatically inject sources to the media element. The sources will be\n\t* appended as children to the media element as `<source>` elements.\n\t*/\n\twatchEffect(() => {\n\t\tif (!document$1) return;\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tconst src = toValue(options.src);\n\t\tlet sources = [];\n\t\tif (!src) return;\n\t\tif (typeof src === \"string\") sources = [{ src }];\n\t\telse if (Array.isArray(src)) sources = src;\n\t\telse if (isObject(src)) sources = [src];\n\t\tel.querySelectorAll(\"source\").forEach((e) => {\n\t\t\te.remove();\n\t\t});\n\t\tsources.forEach(({ src: src$1, type, media }) => {\n\t\t\tconst source = document$1.createElement(\"source\");\n\t\t\tsource.setAttribute(\"src\", src$1);\n\t\t\tsource.setAttribute(\"type\", type || \"\");\n\t\t\tsource.setAttribute(\"media\", media || \"\");\n\t\t\tuseEventListener(source, \"error\", sourceErrorEvent.trigger, listenerOptions);\n\t\t\tel.appendChild(source);\n\t\t});\n\t\tel.load();\n\t});\n\t/**\n\t* Apply composable state to the element, also when element is changed\n\t*/\n\twatch([target, volume], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.volume = volume.value;\n\t});\n\twatch([target, muted], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.muted = muted.value;\n\t});\n\twatch([target, rate], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.playbackRate = rate.value;\n\t});\n\t/**\n\t* Load Tracks\n\t*/\n\twatchEffect(() => {\n\t\tif (!document$1) return;\n\t\tconst textTracks = toValue(options.tracks);\n\t\tconst el = toValue(target);\n\t\tif (!textTracks || !textTracks.length || !el) return;\n\t\t/**\n\t\t* The MediaAPI provides an API for adding text tracks, but they don't currently\n\t\t* have an API for removing text tracks, so instead we will just create and remove\n\t\t* the tracks manually using the HTML api.\n\t\t*/\n\t\tel.querySelectorAll(\"track\").forEach((e) => e.remove());\n\t\ttextTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n\t\t\tconst track = document$1.createElement(\"track\");\n\t\t\ttrack.default = isDefault || false;\n\t\t\ttrack.kind = kind;\n\t\t\ttrack.label = label;\n\t\t\ttrack.src = src;\n\t\t\ttrack.srclang = srcLang;\n\t\t\tif (track.default) selectedTrack.value = i;\n\t\t\tel.appendChild(track);\n\t\t});\n\t});\n\t/**\n\t* This will allow us to update the current time from the timeupdate event\n\t* without setting the medias current position, but if the user changes the\n\t* current time via the ref, then the media will seek.\n\t*\n\t* If we did not use an ignorable watch, then the current time update from\n\t* the timeupdate event would cause the media to stutter.\n\t*/\n\tconst { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.currentTime = time;\n\t});\n\t/**\n\t* Using an ignorable watch so we can control the play state using a ref and not\n\t* a function\n\t*/\n\tconst { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tif (isPlaying) el.play().catch((e) => {\n\t\t\tplaybackErrorEvent.trigger(e);\n\t\t\tthrow e;\n\t\t});\n\t\telse el.pause();\n\t});\n\tuseEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime), listenerOptions);\n\tuseEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration, listenerOptions);\n\tuseEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered), listenerOptions);\n\tuseEventListener(target, \"seeking\", () => seeking.value = true, listenerOptions);\n\tuseEventListener(target, \"seeked\", () => seeking.value = false, listenerOptions);\n\tuseEventListener(target, [\"waiting\", \"loadstart\"], () => {\n\t\twaiting.value = true;\n\t\tignorePlayingUpdates(() => playing.value = false);\n\t}, listenerOptions);\n\tuseEventListener(target, \"loadeddata\", () => waiting.value = false, listenerOptions);\n\tuseEventListener(target, \"playing\", () => {\n\t\twaiting.value = false;\n\t\tended.value = false;\n\t\tignorePlayingUpdates(() => playing.value = true);\n\t}, listenerOptions);\n\tuseEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate, listenerOptions);\n\tuseEventListener(target, \"stalled\", () => stalled.value = true, listenerOptions);\n\tuseEventListener(target, \"ended\", () => ended.value = true, listenerOptions);\n\tuseEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false), listenerOptions);\n\tuseEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true), listenerOptions);\n\tuseEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true, listenerOptions);\n\tuseEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false, listenerOptions);\n\tuseEventListener(target, \"volumechange\", () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tvolume.value = el.volume;\n\t\tmuted.value = el.muted;\n\t}, listenerOptions);\n\t/**\n\t* The following listeners need to listen to a nested\n\t* object on the target, so we will have to use a nested\n\t* watch and manually remove the listeners\n\t*/\n\tconst listeners = [];\n\tconst stop = watch([target], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tstop();\n\t\tlisteners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t});\n\ttryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n\treturn {\n\t\tcurrentTime,\n\t\tduration,\n\t\twaiting,\n\t\tseeking,\n\t\tended,\n\t\tstalled,\n\t\tbuffered,\n\t\tplaying,\n\t\trate,\n\t\tvolume,\n\t\tmuted,\n\t\ttracks,\n\t\tselectedTrack,\n\t\tenableTrack,\n\t\tdisableTrack,\n\t\tsupportsPictureInPicture,\n\t\ttogglePictureInPicture,\n\t\tisPictureInPicture,\n\t\tonSourceError: sourceErrorEvent.on,\n\t\tonPlaybackError: playbackErrorEvent.on\n\t};\n}\n\n//#endregion\n//#region useMemoize/index.ts\n/**\n* Reactive function result cache based on arguments\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemoize(resolver, options) {\n\tconst initCache = () => {\n\t\tif (options === null || options === void 0 ? void 0 : options.cache) return shallowReactive(options.cache);\n\t\treturn shallowReactive(/* @__PURE__ */ new Map());\n\t};\n\tconst cache = initCache();\n\t/**\n\t* Generate key from args\n\t*/\n\tconst generateKey = (...args) => (options === null || options === void 0 ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n\t/**\n\t* Load data and save in cache\n\t*/\n\tconst _loadData = (key, ...args) => {\n\t\tcache.set(key, resolver(...args));\n\t\treturn cache.get(key);\n\t};\n\tconst loadData = (...args) => _loadData(generateKey(...args), ...args);\n\t/**\n\t* Delete key from cache\n\t*/\n\tconst deleteData = (...args) => {\n\t\tcache.delete(generateKey(...args));\n\t};\n\t/**\n\t* Clear cached data\n\t*/\n\tconst clearData = () => {\n\t\tcache.clear();\n\t};\n\tconst memoized = (...args) => {\n\t\tconst key = generateKey(...args);\n\t\tif (cache.has(key)) return cache.get(key);\n\t\treturn _loadData(key, ...args);\n\t};\n\tmemoized.load = loadData;\n\tmemoized.delete = deleteData;\n\tmemoized.clear = clearData;\n\tmemoized.generateKey = generateKey;\n\tmemoized.cache = cache;\n\treturn memoized;\n}\n\n//#endregion\n//#region useMemory/index.ts\n/**\n* Reactive Memory Info.\n*\n* @see https://vueuse.org/useMemory\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemory(options = {}) {\n\tconst memory = ref();\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n\tif (isSupported.value) {\n\t\tconst { interval = 1e3 } = options;\n\t\tuseIntervalFn(() => {\n\t\t\tmemory.value = performance.memory;\n\t\t}, interval, {\n\t\t\timmediate: options.immediate,\n\t\t\timmediateCallback: options.immediateCallback\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tmemory\n\t};\n}\n\n//#endregion\n//#region useMouse/index.ts\nconst UseMouseBuiltinExtractors = {\n\tpage: (event) => [event.pageX, event.pageY],\n\tclient: (event) => [event.clientX, event.clientY],\n\tscreen: (event) => [event.screenX, event.screenY],\n\tmovement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null\n};\n/**\n* Reactive mouse position.\n*\n* @see https://vueuse.org/useMouse\n* @param options\n*/\nfunction useMouse(options = {}) {\n\tconst { type = \"page\", touch = true, resetOnTouchEnds = false, initialValue = {\n\t\tx: 0,\n\t\ty: 0\n\t}, window: window$1 = defaultWindow, target = window$1, scroll = true, eventFilter } = options;\n\tlet _prevMouseEvent = null;\n\tlet _prevScrollX = 0;\n\tlet _prevScrollY = 0;\n\tconst x = shallowRef(initialValue.x);\n\tconst y = shallowRef(initialValue.y);\n\tconst sourceType = shallowRef(null);\n\tconst extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n\tconst mouseHandler = (event) => {\n\t\tconst result = extractor(event);\n\t\t_prevMouseEvent = event;\n\t\tif (result) {\n\t\t\t[x.value, y.value] = result;\n\t\t\tsourceType.value = \"mouse\";\n\t\t}\n\t\tif (window$1) {\n\t\t\t_prevScrollX = window$1.scrollX;\n\t\t\t_prevScrollY = window$1.scrollY;\n\t\t}\n\t};\n\tconst touchHandler = (event) => {\n\t\tif (event.touches.length > 0) {\n\t\t\tconst result = extractor(event.touches[0]);\n\t\t\tif (result) {\n\t\t\t\t[x.value, y.value] = result;\n\t\t\t\tsourceType.value = \"touch\";\n\t\t\t}\n\t\t}\n\t};\n\tconst scrollHandler = () => {\n\t\tif (!_prevMouseEvent || !window$1) return;\n\t\tconst pos = extractor(_prevMouseEvent);\n\t\tif (_prevMouseEvent instanceof MouseEvent && pos) {\n\t\t\tx.value = pos[0] + window$1.scrollX - _prevScrollX;\n\t\t\ty.value = pos[1] + window$1.scrollY - _prevScrollY;\n\t\t}\n\t};\n\tconst reset = () => {\n\t\tx.value = initialValue.x;\n\t\ty.value = initialValue.y;\n\t};\n\tconst mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n\tconst touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n\tconst scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n\t\tif (touch && type !== \"movement\") {\n\t\t\tuseEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n\t\t\tif (resetOnTouchEnds) useEventListener(target, \"touchend\", reset, listenerOptions);\n\t\t}\n\t\tif (scroll && type === \"page\") useEventListener(window$1, \"scroll\", scrollHandlerWrapper, listenerOptions);\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType\n\t};\n}\n\n//#endregion\n//#region useMouseInElement/index.ts\n/**\n* Reactive mouse position related to an element.\n*\n* @see https://vueuse.org/useMouseInElement\n* @param target\n* @param options\n*/\nfunction useMouseInElement(target, options = {}) {\n\tconst { windowResize = true, windowScroll = true, handleOutside = true, window: window$1 = defaultWindow } = options;\n\tconst type = options.type || \"page\";\n\tconst { x, y, sourceType } = useMouse(options);\n\tconst targetRef = shallowRef(target !== null && target !== void 0 ? target : window$1 === null || window$1 === void 0 ? void 0 : window$1.document.body);\n\tconst elementX = shallowRef(0);\n\tconst elementY = shallowRef(0);\n\tconst elementPositionX = shallowRef(0);\n\tconst elementPositionY = shallowRef(0);\n\tconst elementHeight = shallowRef(0);\n\tconst elementWidth = shallowRef(0);\n\tconst isOutside = shallowRef(true);\n\tfunction update() {\n\t\tif (!window$1) return;\n\t\tconst el = unrefElement(targetRef);\n\t\tif (!el || !(el instanceof Element)) return;\n\t\tconst { left, top, width, height } = el.getBoundingClientRect();\n\t\telementPositionX.value = left + (type === \"page\" ? window$1.pageXOffset : 0);\n\t\telementPositionY.value = top + (type === \"page\" ? window$1.pageYOffset : 0);\n\t\telementHeight.value = height;\n\t\telementWidth.value = width;\n\t\tconst elX = x.value - elementPositionX.value;\n\t\tconst elY = y.value - elementPositionY.value;\n\t\tisOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n\t\tif (handleOutside || !isOutside.value) {\n\t\t\telementX.value = elX;\n\t\t\telementY.value = elY;\n\t\t}\n\t}\n\tconst stopFnList = [];\n\tfunction stop() {\n\t\tstopFnList.forEach((fn) => fn());\n\t\tstopFnList.length = 0;\n\t}\n\ttryOnMounted(() => {\n\t\tupdate();\n\t});\n\tif (window$1) {\n\t\tconst { stop: stopResizeObserver } = useResizeObserver(targetRef, update);\n\t\tconst { stop: stopMutationObserver } = useMutationObserver(targetRef, update, { attributeFilter: [\"style\", \"class\"] });\n\t\tconst stopWatch = watch([\n\t\t\ttargetRef,\n\t\t\tx,\n\t\t\ty\n\t\t], update);\n\t\tstopFnList.push(stopResizeObserver, stopMutationObserver, stopWatch);\n\t\tuseEventListener(document, \"mouseleave\", () => isOutside.value = true, { passive: true });\n\t\tif (windowScroll) stopFnList.push(useEventListener(\"scroll\", update, {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t}));\n\t\tif (windowResize) stopFnList.push(useEventListener(\"resize\", update, { passive: true }));\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType,\n\t\telementX,\n\t\telementY,\n\t\telementPositionX,\n\t\telementPositionY,\n\t\telementHeight,\n\t\telementWidth,\n\t\tisOutside,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useMousePressed/index.ts\n/**\n* Reactive mouse pressing state.\n*\n* @see https://vueuse.org/useMousePressed\n* @param options\n*/\nfunction useMousePressed(options = {}) {\n\tconst { touch = true, drag = true, capture = false, initialValue = false, window: window$1 = defaultWindow } = options;\n\tconst pressed = shallowRef(initialValue);\n\tconst sourceType = shallowRef(null);\n\tif (!window$1) return {\n\t\tpressed,\n\t\tsourceType\n\t};\n\tconst onPressed = (srcType) => (event) => {\n\t\tvar _options$onPressed;\n\t\tpressed.value = true;\n\t\tsourceType.value = srcType;\n\t\t(_options$onPressed = options.onPressed) === null || _options$onPressed === void 0 || _options$onPressed.call(options, event);\n\t};\n\tconst onReleased = (event) => {\n\t\tvar _options$onReleased;\n\t\tpressed.value = false;\n\t\tsourceType.value = null;\n\t\t(_options$onReleased = options.onReleased) === null || _options$onReleased === void 0 || _options$onReleased.call(options, event);\n\t};\n\tconst target = computed(() => unrefElement(options.target) || window$1);\n\tconst listenerOptions = {\n\t\tpassive: true,\n\t\tcapture\n\t};\n\tuseEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n\tuseEventListener(window$1, \"mouseleave\", onReleased, listenerOptions);\n\tuseEventListener(window$1, \"mouseup\", onReleased, listenerOptions);\n\tif (drag) {\n\t\tuseEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n\t\tuseEventListener(window$1, \"drop\", onReleased, listenerOptions);\n\t\tuseEventListener(window$1, \"dragend\", onReleased, listenerOptions);\n\t}\n\tif (touch) {\n\t\tuseEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n\t\tuseEventListener(window$1, \"touchend\", onReleased, listenerOptions);\n\t\tuseEventListener(window$1, \"touchcancel\", onReleased, listenerOptions);\n\t}\n\treturn {\n\t\tpressed,\n\t\tsourceType\n\t};\n}\n\n//#endregion\n//#region useNavigatorLanguage/index.ts\n/**\n*\n* Reactive useNavigatorLanguage\n*\n* Detects the currently selected user language and returns a reactive language\n* @see https://vueuse.org/useNavigatorLanguage\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNavigatorLanguage(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst navigator$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"language\" in navigator$1);\n\tconst language = shallowRef(navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.language);\n\tuseEventListener(window$1, \"languagechange\", () => {\n\t\tif (navigator$1) language.value = navigator$1.language;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tlanguage\n\t};\n}\n\n//#endregion\n//#region useNetwork/index.ts\n/**\n* Reactive Network status.\n*\n* @see https://vueuse.org/useNetwork\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNetwork(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst navigator$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"connection\" in navigator$1);\n\tconst isOnline = shallowRef(true);\n\tconst saveData = shallowRef(false);\n\tconst offlineAt = shallowRef(void 0);\n\tconst onlineAt = shallowRef(void 0);\n\tconst downlink = shallowRef(void 0);\n\tconst downlinkMax = shallowRef(void 0);\n\tconst rtt = shallowRef(void 0);\n\tconst effectiveType = shallowRef(void 0);\n\tconst type = shallowRef(\"unknown\");\n\tconst connection = isSupported.value && navigator$1.connection;\n\tfunction updateNetworkInformation() {\n\t\tif (!navigator$1) return;\n\t\tisOnline.value = navigator$1.onLine;\n\t\tofflineAt.value = isOnline.value ? void 0 : Date.now();\n\t\tonlineAt.value = isOnline.value ? Date.now() : void 0;\n\t\tif (connection) {\n\t\t\tdownlink.value = connection.downlink;\n\t\t\tdownlinkMax.value = connection.downlinkMax;\n\t\t\teffectiveType.value = connection.effectiveType;\n\t\t\trtt.value = connection.rtt;\n\t\t\tsaveData.value = connection.saveData;\n\t\t\ttype.value = connection.type;\n\t\t}\n\t}\n\tconst listenerOptions = { passive: true };\n\tif (window$1) {\n\t\tuseEventListener(window$1, \"offline\", () => {\n\t\t\tisOnline.value = false;\n\t\t\tofflineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window$1, \"online\", () => {\n\t\t\tisOnline.value = true;\n\t\t\tonlineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t}\n\tif (connection) useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n\tupdateNetworkInformation();\n\treturn {\n\t\tisSupported,\n\t\tisOnline: readonly(isOnline),\n\t\tsaveData: readonly(saveData),\n\t\tofflineAt: readonly(offlineAt),\n\t\tonlineAt: readonly(onlineAt),\n\t\tdownlink: readonly(downlink),\n\t\tdownlinkMax: readonly(downlinkMax),\n\t\teffectiveType: readonly(effectiveType),\n\t\trtt: readonly(rtt),\n\t\ttype: readonly(type)\n\t};\n}\n\n//#endregion\n//#region useNow/index.ts\n/**\n* Reactive current Date instance.\n*\n* @see https://vueuse.org/useNow\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNow(options = {}) {\n\tconst { controls: exposeControls = false, interval = \"requestAnimationFrame\", immediate = true } = options;\n\tconst now = ref(/* @__PURE__ */ new Date());\n\tconst update = () => now.value = /* @__PURE__ */ new Date();\n\tconst controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate }) : useIntervalFn(update, interval, { immediate });\n\tif (exposeControls) return {\n\t\tnow,\n\t\t...controls\n\t};\n\telse return now;\n}\n\n//#endregion\n//#region useObjectUrl/index.ts\n/**\n* Reactive URL representing an object.\n*\n* @see https://vueuse.org/useObjectUrl\n* @param object\n*/\nfunction useObjectUrl(object) {\n\tconst url = shallowRef();\n\tconst release = () => {\n\t\tif (url.value) URL.revokeObjectURL(url.value);\n\t\turl.value = void 0;\n\t};\n\twatch(() => toValue(object), (newObject) => {\n\t\trelease();\n\t\tif (newObject) url.value = URL.createObjectURL(newObject);\n\t}, { immediate: true });\n\ttryOnScopeDispose(release);\n\treturn readonly(url);\n}\n\n//#endregion\n//#region ../math/useClamp/index.ts\n/**\n* Reactively clamp a value between two other values.\n*\n* @see https://vueuse.org/useClamp\n* @param value number\n* @param min\n* @param max\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useClamp(value, min, max) {\n\tif (typeof value === \"function\" || isReadonly(value)) return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n\tconst _value = ref(value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn _value.value = clamp(_value.value, toValue(min), toValue(max));\n\t\t},\n\t\tset(value$1) {\n\t\t\t_value.value = clamp(value$1, toValue(min), toValue(max));\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useOffsetPagination/index.ts\nfunction useOffsetPagination(options) {\n\tconst { total = Number.POSITIVE_INFINITY, pageSize = 10, page = 1, onPageChange = noop, onPageSizeChange = noop, onPageCountChange = noop } = options;\n\tconst currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n\tconst pageCount = computed(() => Math.max(1, Math.ceil(toValue(total) / toValue(currentPageSize))));\n\tconst currentPage = useClamp(page, 1, pageCount);\n\tconst isFirstPage = computed(() => currentPage.value === 1);\n\tconst isLastPage = computed(() => currentPage.value === pageCount.value);\n\tif (isRef(page)) syncRef(page, currentPage, { direction: isReadonly(page) ? \"ltr\" : \"both\" });\n\tif (isRef(pageSize)) syncRef(pageSize, currentPageSize, { direction: isReadonly(pageSize) ? \"ltr\" : \"both\" });\n\tfunction prev() {\n\t\tcurrentPage.value--;\n\t}\n\tfunction next() {\n\t\tcurrentPage.value++;\n\t}\n\tconst returnValue = {\n\t\tcurrentPage,\n\t\tcurrentPageSize,\n\t\tpageCount,\n\t\tisFirstPage,\n\t\tisLastPage,\n\t\tprev,\n\t\tnext\n\t};\n\twatch(currentPage, () => {\n\t\tonPageChange(reactive(returnValue));\n\t});\n\twatch(currentPageSize, () => {\n\t\tonPageSizeChange(reactive(returnValue));\n\t});\n\twatch(pageCount, () => {\n\t\tonPageCountChange(reactive(returnValue));\n\t});\n\treturn returnValue;\n}\n\n//#endregion\n//#region useOnline/index.ts\n/**\n* Reactive online state.\n*\n* @see https://vueuse.org/useOnline\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useOnline(options = {}) {\n\tconst { isOnline } = useNetwork(options);\n\treturn isOnline;\n}\n\n//#endregion\n//#region usePageLeave/index.ts\n/**\n* Reactive state to show whether mouse leaves the page.\n*\n* @see https://vueuse.org/usePageLeave\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePageLeave(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst isLeft = shallowRef(false);\n\tconst handler = (event) => {\n\t\tif (!window$1) return;\n\t\tevent = event || window$1.event;\n\t\tisLeft.value = !(event.relatedTarget || event.toElement);\n\t};\n\tif (window$1) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window$1, \"mouseout\", handler, listenerOptions);\n\t\tuseEventListener(window$1.document, \"mouseleave\", handler, listenerOptions);\n\t\tuseEventListener(window$1.document, \"mouseenter\", handler, listenerOptions);\n\t}\n\treturn isLeft;\n}\n\n//#endregion\n//#region useScreenOrientation/index.ts\n/**\n* Reactive screen orientation\n*\n* @see https://vueuse.org/useScreenOrientation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useScreenOrientation(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"screen\" in window$1 && \"orientation\" in window$1.screen);\n\tconst screenOrientation = isSupported.value ? window$1.screen.orientation : {};\n\tconst orientation = ref(screenOrientation.type);\n\tconst angle = shallowRef(screenOrientation.angle || 0);\n\tif (isSupported.value) useEventListener(window$1, \"orientationchange\", () => {\n\t\torientation.value = screenOrientation.type;\n\t\tangle.value = screenOrientation.angle;\n\t}, { passive: true });\n\tconst lockOrientation = (type) => {\n\t\tif (isSupported.value && typeof screenOrientation.lock === \"function\") return screenOrientation.lock(type);\n\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Not supported\"));\n\t};\n\tconst unlockOrientation = () => {\n\t\tif (isSupported.value && typeof screenOrientation.unlock === \"function\") screenOrientation.unlock();\n\t};\n\treturn {\n\t\tisSupported,\n\t\torientation,\n\t\tangle,\n\t\tlockOrientation,\n\t\tunlockOrientation\n\t};\n}\n\n//#endregion\n//#region useParallax/index.ts\n/**\n* Create parallax effect easily. It uses `useDeviceOrientation` and fallback to `useMouse`\n* if orientation is not supported.\n*\n* @param target\n* @param options\n*/\nfunction useParallax(target, options = {}) {\n\tconst { deviceOrientationTiltAdjust = (i) => i, deviceOrientationRollAdjust = (i) => i, mouseTiltAdjust = (i) => i, mouseRollAdjust = (i) => i, window: window$1 = defaultWindow } = options;\n\tconst orientation = reactive(useDeviceOrientation({ window: window$1 }));\n\tconst screenOrientation = reactive(useScreenOrientation({ window: window$1 }));\n\tconst { elementX: x, elementY: y, elementWidth: width, elementHeight: height } = useMouseInElement(target, {\n\t\thandleOutside: false,\n\t\twindow: window$1\n\t});\n\tconst source = computed(() => {\n\t\tif (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) return \"deviceOrientation\";\n\t\treturn \"mouse\";\n\t});\n\treturn {\n\t\troll: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = -orientation.beta / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationRollAdjust(value);\n\t\t\t} else return mouseRollAdjust(-(y.value - height.value / 2) / height.value);\n\t\t}),\n\t\ttilt: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = orientation.gamma / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationTiltAdjust(value);\n\t\t\t} else return mouseTiltAdjust((x.value - width.value / 2) / width.value);\n\t\t}),\n\t\tsource\n\t};\n}\n\n//#endregion\n//#region useParentElement/index.ts\nfunction useParentElement(element = useCurrentElement()) {\n\tconst parentElement = shallowRef();\n\tconst update = () => {\n\t\tconst el = unrefElement(element);\n\t\tif (el) parentElement.value = el.parentElement;\n\t};\n\ttryOnMounted(update);\n\twatch(() => toValue(element), update);\n\treturn parentElement;\n}\n\n//#endregion\n//#region usePerformanceObserver/index.ts\n/**\n* Observe performance metrics.\n*\n* @see https://vueuse.org/usePerformanceObserver\n* @param options\n*/\nfunction usePerformanceObserver(options, callback) {\n\tconst { window: window$1 = defaultWindow, immediate = true,...performanceOptions } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"PerformanceObserver\" in window$1);\n\tlet observer;\n\tconst stop = () => {\n\t\tobserver === null || observer === void 0 || observer.disconnect();\n\t};\n\tconst start = () => {\n\t\tif (isSupported.value) {\n\t\t\tstop();\n\t\t\tobserver = new PerformanceObserver(callback);\n\t\t\tobserver.observe(performanceOptions);\n\t\t}\n\t};\n\ttryOnScopeDispose(stop);\n\tif (immediate) start();\n\treturn {\n\t\tisSupported,\n\t\tstart,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region usePointer/index.ts\nconst defaultState = {\n\tx: 0,\n\ty: 0,\n\tpointerId: 0,\n\tpressure: 0,\n\ttiltX: 0,\n\ttiltY: 0,\n\twidth: 0,\n\theight: 0,\n\ttwist: 0,\n\tpointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\n/**\n* Reactive pointer state.\n*\n* @see https://vueuse.org/usePointer\n* @param options\n*/\nfunction usePointer(options = {}) {\n\tconst { target = defaultWindow } = options;\n\tconst isInside = shallowRef(false);\n\tconst state = shallowRef(options.initialValue || {});\n\tObject.assign(state.value, defaultState, state.value);\n\tconst handler = (event) => {\n\t\tisInside.value = true;\n\t\tif (options.pointerTypes && !options.pointerTypes.includes(event.pointerType)) return;\n\t\tstate.value = objectPick(event, keys, false);\n\t};\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\n\t\t\t\"pointerdown\",\n\t\t\t\"pointermove\",\n\t\t\t\"pointerup\"\n\t\t], handler, listenerOptions);\n\t\tuseEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n\t}\n\treturn {\n\t\t...toRefs(state),\n\t\tisInside\n\t};\n}\n\n//#endregion\n//#region usePointerLock/index.ts\n/**\n* Reactive pointer lock.\n*\n* @see https://vueuse.org/usePointerLock\n* @param target\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePointerLock(target, options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => document$1 && \"pointerLockElement\" in document$1);\n\tconst element = shallowRef();\n\tconst triggerElement = shallowRef();\n\tlet targetElement;\n\tif (isSupported.value) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(document$1, \"pointerlockchange\", () => {\n\t\t\tvar _pointerLockElement;\n\t\t\tconst currentElement = (_pointerLockElement = document$1.pointerLockElement) !== null && _pointerLockElement !== void 0 ? _pointerLockElement : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\telement.value = document$1.pointerLockElement;\n\t\t\t\tif (!element.value) targetElement = triggerElement.value = null;\n\t\t\t}\n\t\t}, listenerOptions);\n\t\tuseEventListener(document$1, \"pointerlockerror\", () => {\n\t\t\tvar _pointerLockElement2;\n\t\t\tconst currentElement = (_pointerLockElement2 = document$1.pointerLockElement) !== null && _pointerLockElement2 !== void 0 ? _pointerLockElement2 : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\tconst action = document$1.pointerLockElement ? \"release\" : \"acquire\";\n\t\t\t\tthrow new Error(`Failed to ${action} pointer lock.`);\n\t\t\t}\n\t\t}, listenerOptions);\n\t}\n\tasync function lock(e) {\n\t\tvar _unrefElement;\n\t\tif (!isSupported.value) throw new Error(\"Pointer Lock API is not supported by your browser.\");\n\t\ttriggerElement.value = e instanceof Event ? e.currentTarget : null;\n\t\ttargetElement = e instanceof Event ? (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : triggerElement.value : unrefElement(e);\n\t\tif (!targetElement) throw new Error(\"Target element undefined.\");\n\t\ttargetElement.requestPointerLock();\n\t\treturn await until(element).toBe(targetElement);\n\t}\n\tasync function unlock() {\n\t\tif (!element.value) return false;\n\t\tdocument$1.exitPointerLock();\n\t\tawait until(element).toBeNull();\n\t\treturn true;\n\t}\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\ttriggerElement,\n\t\tlock,\n\t\tunlock\n\t};\n}\n\n//#endregion\n//#region usePointerSwipe/index.ts\n/**\n* Reactive swipe detection based on PointerEvents.\n*\n* @see https://vueuse.org/usePointerSwipe\n* @param target\n* @param options\n*/\nfunction usePointerSwipe(target, options = {}) {\n\tconst targetRef = toRef(target);\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, disableTextSelect = false } = options;\n\tconst posStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosStart = (x, y) => {\n\t\tposStart.x = x;\n\t\tposStart.y = y;\n\t};\n\tconst posEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosEnd = (x, y) => {\n\t\tposEnd.x = x;\n\t\tposEnd.y = y;\n\t};\n\tconst distanceX = computed(() => posStart.x - posEnd.x);\n\tconst distanceY = computed(() => posStart.y - posEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst isPointerDown = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(distanceX.value) > abs(distanceY.value)) return distanceX.value > 0 ? \"left\" : \"right\";\n\t\telse return distanceY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst eventIsAllowed = (e) => {\n\t\tvar _ref, _options$pointerTypes, _options$pointerTypes2;\n\t\tconst isReleasingButton = e.buttons === 0;\n\t\tconst isPrimaryButton = e.buttons === 1;\n\t\treturn (_ref = (_options$pointerTypes = (_options$pointerTypes2 = options.pointerTypes) === null || _options$pointerTypes2 === void 0 ? void 0 : _options$pointerTypes2.includes(e.pointerType)) !== null && _options$pointerTypes !== void 0 ? _options$pointerTypes : isReleasingButton || isPrimaryButton) !== null && _ref !== void 0 ? _ref : true;\n\t};\n\tconst listenerOptions = { passive: true };\n\tconst stops = [\n\t\tuseEventListener(target, \"pointerdown\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tisPointerDown.value = true;\n\t\t\tconst eventTarget = e.target;\n\t\t\teventTarget === null || eventTarget === void 0 || eventTarget.setPointerCapture(e.pointerId);\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosStart(x, y);\n\t\t\tupdatePosEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"pointermove\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (!isPointerDown.value) return;\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosEnd(x, y);\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"pointerup\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\t\tisPointerDown.value = false;\n\t\t\tisSwiping.value = false;\n\t\t}, listenerOptions)\n\t];\n\ttryOnMounted(() => {\n\t\tvar _targetRef$value;\n\t\t(_targetRef$value = targetRef.value) === null || _targetRef$value === void 0 || (_targetRef$value = _targetRef$value.style) === null || _targetRef$value === void 0 || _targetRef$value.setProperty(\"touch-action\", \"pan-y\");\n\t\tif (disableTextSelect) {\n\t\t\tvar _targetRef$value2, _targetRef$value3, _targetRef$value4;\n\t\t\t(_targetRef$value2 = targetRef.value) === null || _targetRef$value2 === void 0 || (_targetRef$value2 = _targetRef$value2.style) === null || _targetRef$value2 === void 0 || _targetRef$value2.setProperty(\"-webkit-user-select\", \"none\");\n\t\t\t(_targetRef$value3 = targetRef.value) === null || _targetRef$value3 === void 0 || (_targetRef$value3 = _targetRef$value3.style) === null || _targetRef$value3 === void 0 || _targetRef$value3.setProperty(\"-ms-user-select\", \"none\");\n\t\t\t(_targetRef$value4 = targetRef.value) === null || _targetRef$value4 === void 0 || (_targetRef$value4 = _targetRef$value4.style) === null || _targetRef$value4 === void 0 || _targetRef$value4.setProperty(\"user-select\", \"none\");\n\t\t}\n\t});\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping: readonly(isSwiping),\n\t\tdirection: readonly(direction),\n\t\tposStart: readonly(posStart),\n\t\tposEnd: readonly(posEnd),\n\t\tdistanceX,\n\t\tdistanceY,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region usePreferredColorScheme/index.ts\n/**\n* Reactive prefers-color-scheme media query.\n*\n* @see https://vueuse.org/usePreferredColorScheme\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredColorScheme(options) {\n\tconst isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n\tconst isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n\treturn computed(() => {\n\t\tif (isDark.value) return \"dark\";\n\t\tif (isLight.value) return \"light\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePreferredContrast/index.ts\n/**\n* Reactive prefers-contrast media query.\n*\n* @see https://vueuse.org/usePreferredContrast\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredContrast(options) {\n\tconst isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n\tconst isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n\tconst isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n\treturn computed(() => {\n\t\tif (isMore.value) return \"more\";\n\t\tif (isLess.value) return \"less\";\n\t\tif (isCustom.value) return \"custom\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePreferredLanguages/index.ts\n/**\n* Reactive Navigator Languages.\n*\n* @see https://vueuse.org/usePreferredLanguages\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredLanguages(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tif (!window$1) return shallowRef([\"en\"]);\n\tconst navigator$1 = window$1.navigator;\n\tconst value = shallowRef(navigator$1.languages);\n\tuseEventListener(window$1, \"languagechange\", () => {\n\t\tvalue.value = navigator$1.languages;\n\t}, { passive: true });\n\treturn value;\n}\n\n//#endregion\n//#region usePreferredReducedMotion/index.ts\n/**\n* Reactive prefers-reduced-motion media query.\n*\n* @see https://vueuse.org/usePreferredReducedMotion\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedMotion(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePreferredReducedTransparency/index.ts\n/**\n* Reactive prefers-reduced-transparency media query.\n*\n* @see https://vueuse.org/usePreferredReducedTransparency\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedTransparency(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePrevious/index.ts\nfunction usePrevious(value, initialValue) {\n\tconst previous = shallowRef(initialValue);\n\twatch(toRef(value), (_, oldValue) => {\n\t\tprevious.value = oldValue;\n\t}, { flush: \"sync\" });\n\treturn readonly(previous);\n}\n\n//#endregion\n//#region useScreenSafeArea/index.ts\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\n/**\n* Reactive `env(safe-area-inset-*)`\n*\n* @see https://vueuse.org/useScreenSafeArea\n*/\nfunction useScreenSafeArea() {\n\tconst top = shallowRef(\"\");\n\tconst right = shallowRef(\"\");\n\tconst bottom = shallowRef(\"\");\n\tconst left = shallowRef(\"\");\n\tif (isClient) {\n\t\tconst topCssVar = useCssVar(topVarName);\n\t\tconst rightCssVar = useCssVar(rightVarName);\n\t\tconst bottomCssVar = useCssVar(bottomVarName);\n\t\tconst leftCssVar = useCssVar(leftVarName);\n\t\ttopCssVar.value = \"env(safe-area-inset-top, 0px)\";\n\t\trightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n\t\tbottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n\t\tleftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n\t\ttryOnMounted(update);\n\t\tuseEventListener(\"resize\", useDebounceFn(update), { passive: true });\n\t}\n\tfunction update() {\n\t\ttop.value = getValue(topVarName);\n\t\tright.value = getValue(rightVarName);\n\t\tbottom.value = getValue(bottomVarName);\n\t\tleft.value = getValue(leftVarName);\n\t}\n\treturn {\n\t\ttop,\n\t\tright,\n\t\tbottom,\n\t\tleft,\n\t\tupdate\n\t};\n}\nfunction getValue(position) {\n\treturn getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\n//#endregion\n//#region useScriptTag/index.ts\n/**\n* Async script tag loading.\n*\n* @see https://vueuse.org/useScriptTag\n* @param src\n* @param onLoaded\n* @param options\n*/\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n\tconst { immediate = true, manual = false, type = \"text/javascript\", async = true, crossOrigin, referrerPolicy, noModule, defer, document: document$1 = defaultDocument, attrs = {}, nonce = void 0 } = options;\n\tconst scriptTag = shallowRef(null);\n\tlet _promise = null;\n\t/**\n\t* Load the script specified via `src`.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n\t* @returns Promise<HTMLScriptElement>\n\t*/\n\tconst loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n\t\tconst resolveWithElement = (el$1) => {\n\t\t\tscriptTag.value = el$1;\n\t\t\tresolve(el$1);\n\t\t\treturn el$1;\n\t\t};\n\t\tif (!document$1) {\n\t\t\tresolve(false);\n\t\t\treturn;\n\t\t}\n\t\tlet shouldAppend = false;\n\t\tlet el = document$1.querySelector(`script[src=\"${toValue(src)}\"]`);\n\t\tif (!el) {\n\t\t\tel = document$1.createElement(\"script\");\n\t\t\tel.type = type;\n\t\t\tel.async = async;\n\t\t\tel.src = toValue(src);\n\t\t\tif (defer) el.defer = defer;\n\t\t\tif (crossOrigin) el.crossOrigin = crossOrigin;\n\t\t\tif (noModule) el.noModule = noModule;\n\t\t\tif (referrerPolicy) el.referrerPolicy = referrerPolicy;\n\t\t\tif (nonce) el.nonce = nonce;\n\t\t\tObject.entries(attrs).forEach(([name, value]) => el === null || el === void 0 ? void 0 : el.setAttribute(name, value));\n\t\t\tshouldAppend = true;\n\t\t} else if (el.hasAttribute(\"data-loaded\")) resolveWithElement(el);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(el, \"error\", (event) => reject(event), listenerOptions);\n\t\tuseEventListener(el, \"abort\", (event) => reject(event), listenerOptions);\n\t\tuseEventListener(el, \"load\", () => {\n\t\t\tel.setAttribute(\"data-loaded\", \"true\");\n\t\t\tonLoaded(el);\n\t\t\tresolveWithElement(el);\n\t\t}, listenerOptions);\n\t\tif (shouldAppend) el = document$1.head.appendChild(el);\n\t\tif (!waitForScriptLoad) resolveWithElement(el);\n\t});\n\t/**\n\t* Exposed singleton wrapper for `loadScript`, avoiding calling it twice.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n\t* @returns Promise<HTMLScriptElement>\n\t*/\n\tconst load = (waitForScriptLoad = true) => {\n\t\tif (!_promise) _promise = loadScript(waitForScriptLoad);\n\t\treturn _promise;\n\t};\n\t/**\n\t* Unload the script specified by `src`.\n\t*/\n\tconst unload = () => {\n\t\tif (!document$1) return;\n\t\t_promise = null;\n\t\tif (scriptTag.value) scriptTag.value = null;\n\t\tconst el = document$1.querySelector(`script[src=\"${toValue(src)}\"]`);\n\t\tif (el) document$1.head.removeChild(el);\n\t};\n\tif (immediate && !manual) tryOnMounted(load);\n\tif (!manual) tryOnUnmounted(unload);\n\treturn {\n\t\tscriptTag,\n\t\tload,\n\t\tunload\n\t};\n}\n\n//#endregion\n//#region useScrollLock/index.ts\nfunction checkOverflowScroll(ele) {\n\tconst style = window.getComputedStyle(ele);\n\tif (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) return true;\n\telse {\n\t\tconst parent = ele.parentNode;\n\t\tif (!parent || parent.tagName === \"BODY\") return false;\n\t\treturn checkOverflowScroll(parent);\n\t}\n}\nfunction preventDefault(rawEvent) {\n\tconst e = rawEvent || window.event;\n\tconst _target = e.target;\n\tif (checkOverflowScroll(_target)) return false;\n\tif (e.touches.length > 1) return true;\n\tif (e.preventDefault) e.preventDefault();\n\treturn false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\n/**\n* Lock scrolling of the element.\n*\n* @see https://vueuse.org/useScrollLock\n* @param element\n*/\nfunction useScrollLock(element, initialState = false) {\n\tconst isLocked = shallowRef(initialState);\n\tlet stopTouchMoveListener = null;\n\tlet initialOverflow = \"\";\n\twatch(toRef(element), (el) => {\n\t\tconst target = resolveElement(toValue(el));\n\t\tif (target) {\n\t\t\tconst ele = target;\n\t\t\tif (!elInitialOverflow.get(ele)) elInitialOverflow.set(ele, ele.style.overflow);\n\t\t\tif (ele.style.overflow !== \"hidden\") initialOverflow = ele.style.overflow;\n\t\t\tif (ele.style.overflow === \"hidden\") return isLocked.value = true;\n\t\t\tif (isLocked.value) return ele.style.overflow = \"hidden\";\n\t\t}\n\t}, { immediate: true });\n\tconst lock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener = useEventListener(el, \"touchmove\", (e) => {\n\t\t\tpreventDefault(e);\n\t\t}, { passive: false });\n\t\tel.style.overflow = \"hidden\";\n\t\tisLocked.value = true;\n\t};\n\tconst unlock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || !isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener === null || stopTouchMoveListener === void 0 || stopTouchMoveListener();\n\t\tel.style.overflow = initialOverflow;\n\t\telInitialOverflow.delete(el);\n\t\tisLocked.value = false;\n\t};\n\ttryOnScopeDispose(unlock);\n\treturn computed({\n\t\tget() {\n\t\t\treturn isLocked.value;\n\t\t},\n\t\tset(v) {\n\t\t\tif (v) lock();\n\t\t\telse unlock();\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useSessionStorage/index.ts\n/**\n* Reactive SessionStorage.\n*\n* @see https://vueuse.org/useSessionStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useSessionStorage(key, initialValue, options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window$1 === null || window$1 === void 0 ? void 0 : window$1.sessionStorage, options);\n}\n\n//#endregion\n//#region useShare/index.ts\n/**\n* Reactive Web Share API.\n*\n* @see https://vueuse.org/useShare\n* @param shareOptions\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useShare(shareOptions = {}, options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst _navigator = navigator$1;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => _navigator && \"canShare\" in _navigator);\n\tconst share = async (overrideOptions = {}) => {\n\t\tif (isSupported.value) {\n\t\t\tconst data = {\n\t\t\t\t...toValue(shareOptions),\n\t\t\t\t...toValue(overrideOptions)\n\t\t\t};\n\t\t\tlet granted = false;\n\t\t\tif (_navigator.canShare) granted = _navigator.canShare(data);\n\t\t\tif (granted) return _navigator.share(data);\n\t\t}\n\t};\n\treturn {\n\t\tisSupported,\n\t\tshare\n\t};\n}\n\n//#endregion\n//#region useSorted/index.ts\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n\tconst [source] = args;\n\tlet compareFn = defaultCompare;\n\tlet options = {};\n\tif (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tvar _options$compareFn;\n\t\toptions = args[1];\n\t\tcompareFn = (_options$compareFn = options.compareFn) !== null && _options$compareFn !== void 0 ? _options$compareFn : defaultCompare;\n\t} else {\n\t\tvar _args$;\n\t\tcompareFn = (_args$ = args[1]) !== null && _args$ !== void 0 ? _args$ : defaultCompare;\n\t}\n\telse if (args.length > 2) {\n\t\tvar _args$2, _args$3;\n\t\tcompareFn = (_args$2 = args[1]) !== null && _args$2 !== void 0 ? _args$2 : defaultCompare;\n\t\toptions = (_args$3 = args[2]) !== null && _args$3 !== void 0 ? _args$3 : {};\n\t}\n\tconst { dirty = false, sortFn = defaultSortFn } = options;\n\tif (!dirty) return computed(() => sortFn([...toValue(source)], compareFn));\n\twatchEffect(() => {\n\t\tconst result = sortFn(toValue(source), compareFn);\n\t\tif (isRef(source)) source.value = result;\n\t\telse source.splice(0, source.length, ...result);\n\t});\n\treturn source;\n}\n\n//#endregion\n//#region useSpeechRecognition/index.ts\n/**\n* Reactive SpeechRecognition.\n*\n* @see https://vueuse.org/useSpeechRecognition\n* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition SpeechRecognition\n* @param options\n*/\nfunction useSpeechRecognition(options = {}) {\n\tconst { interimResults = true, continuous = true, maxAlternatives = 1, window: window$1 = defaultWindow } = options;\n\tconst lang = toRef(options.lang || \"en-US\");\n\tconst isListening = shallowRef(false);\n\tconst isFinal = shallowRef(false);\n\tconst result = shallowRef(\"\");\n\tconst error = shallowRef(void 0);\n\tlet recognition;\n\tconst start = () => {\n\t\tisListening.value = true;\n\t};\n\tconst stop = () => {\n\t\tisListening.value = false;\n\t};\n\tconst toggle = (value = !isListening.value) => {\n\t\tif (value) start();\n\t\telse stop();\n\t};\n\tconst SpeechRecognition = window$1 && (window$1.SpeechRecognition || window$1.webkitSpeechRecognition);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => SpeechRecognition);\n\tif (isSupported.value) {\n\t\trecognition = new SpeechRecognition();\n\t\trecognition.continuous = continuous;\n\t\trecognition.interimResults = interimResults;\n\t\trecognition.lang = toValue(lang);\n\t\trecognition.maxAlternatives = maxAlternatives;\n\t\trecognition.onstart = () => {\n\t\t\tisListening.value = true;\n\t\t\tisFinal.value = false;\n\t\t};\n\t\twatch(lang, (lang$1) => {\n\t\t\tif (recognition && !isListening.value) recognition.lang = lang$1;\n\t\t});\n\t\trecognition.onresult = (event) => {\n\t\t\tconst currentResult = event.results[event.resultIndex];\n\t\t\tconst { transcript } = currentResult[0];\n\t\t\tisFinal.value = currentResult.isFinal;\n\t\t\tresult.value = transcript;\n\t\t\terror.value = void 0;\n\t\t};\n\t\trecognition.onerror = (event) => {\n\t\t\terror.value = event;\n\t\t};\n\t\trecognition.onend = () => {\n\t\t\tisListening.value = false;\n\t\t\trecognition.lang = toValue(lang);\n\t\t};\n\t\twatch(isListening, (newValue, oldValue) => {\n\t\t\tif (newValue === oldValue) return;\n\t\t\tif (newValue) recognition.start();\n\t\t\telse recognition.stop();\n\t\t});\n\t}\n\ttryOnScopeDispose(() => {\n\t\tstop();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisListening,\n\t\tisFinal,\n\t\trecognition,\n\t\tresult,\n\t\terror,\n\t\ttoggle,\n\t\tstart,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useSpeechSynthesis/index.ts\n/**\n* Reactive SpeechSynthesis.\n*\n* @see https://vueuse.org/useSpeechSynthesis\n* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis SpeechSynthesis\n*/\nfunction useSpeechSynthesis(text, options = {}) {\n\tconst { pitch = 1, rate = 1, volume = 1, window: window$1 = defaultWindow, onBoundary } = options;\n\tconst synth = window$1 && window$1.speechSynthesis;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => synth);\n\tconst isPlaying = shallowRef(false);\n\tconst status = shallowRef(\"init\");\n\tconst spokenText = toRef(text || \"\");\n\tconst lang = toRef(options.lang || \"en-US\");\n\tconst error = shallowRef(void 0);\n\tconst toggle = (value = !isPlaying.value) => {\n\t\tisPlaying.value = value;\n\t};\n\tconst bindEventsForUtterance = (utterance$1) => {\n\t\tutterance$1.lang = toValue(lang);\n\t\tutterance$1.voice = toValue(options.voice) || null;\n\t\tutterance$1.pitch = toValue(pitch);\n\t\tutterance$1.rate = toValue(rate);\n\t\tutterance$1.volume = toValue(volume);\n\t\tutterance$1.onstart = () => {\n\t\t\tisPlaying.value = true;\n\t\t\tstatus.value = \"play\";\n\t\t};\n\t\tutterance$1.onpause = () => {\n\t\t\tisPlaying.value = false;\n\t\t\tstatus.value = \"pause\";\n\t\t};\n\t\tutterance$1.onresume = () => {\n\t\t\tisPlaying.value = true;\n\t\t\tstatus.value = \"play\";\n\t\t};\n\t\tutterance$1.onend = () => {\n\t\t\tisPlaying.value = false;\n\t\t\tstatus.value = \"end\";\n\t\t};\n\t\tutterance$1.onerror = (event) => {\n\t\t\terror.value = event;\n\t\t};\n\t\tutterance$1.onboundary = (event) => {\n\t\t\tonBoundary === null || onBoundary === void 0 || onBoundary(event);\n\t\t};\n\t};\n\tconst utterance = computed(() => {\n\t\tisPlaying.value = false;\n\t\tstatus.value = \"init\";\n\t\tconst newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n\t\tbindEventsForUtterance(newUtterance);\n\t\treturn newUtterance;\n\t});\n\tconst speak = () => {\n\t\tsynth.cancel();\n\t\tif (utterance) synth.speak(utterance.value);\n\t};\n\tconst stop = () => {\n\t\tsynth.cancel();\n\t\tisPlaying.value = false;\n\t};\n\tif (isSupported.value) {\n\t\tbindEventsForUtterance(utterance.value);\n\t\twatch(lang, (lang$1) => {\n\t\t\tif (utterance.value && !isPlaying.value) utterance.value.lang = lang$1;\n\t\t});\n\t\tif (options.voice) watch(options.voice, () => {\n\t\t\tsynth.cancel();\n\t\t});\n\t\twatch(isPlaying, () => {\n\t\t\tif (isPlaying.value) synth.resume();\n\t\t\telse synth.pause();\n\t\t});\n\t}\n\ttryOnScopeDispose(() => {\n\t\tisPlaying.value = false;\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisPlaying,\n\t\tstatus,\n\t\tutterance,\n\t\terror,\n\t\tstop,\n\t\ttoggle,\n\t\tspeak\n\t};\n}\n\n//#endregion\n//#region useStepper/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useStepper(steps, initialStep) {\n\tconst stepsRef = ref(steps);\n\tconst stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n\tconst index = ref(stepNames.value.indexOf(initialStep !== null && initialStep !== void 0 ? initialStep : stepNames.value[0]));\n\tconst current = computed(() => at(index.value));\n\tconst isFirst = computed(() => index.value === 0);\n\tconst isLast = computed(() => index.value === stepNames.value.length - 1);\n\tconst next = computed(() => stepNames.value[index.value + 1]);\n\tconst previous = computed(() => stepNames.value[index.value - 1]);\n\tfunction at(index$1) {\n\t\tif (Array.isArray(stepsRef.value)) return stepsRef.value[index$1];\n\t\treturn stepsRef.value[stepNames.value[index$1]];\n\t}\n\tfunction get(step) {\n\t\tif (!stepNames.value.includes(step)) return;\n\t\treturn at(stepNames.value.indexOf(step));\n\t}\n\tfunction goTo(step) {\n\t\tif (stepNames.value.includes(step)) index.value = stepNames.value.indexOf(step);\n\t}\n\tfunction goToNext() {\n\t\tif (isLast.value) return;\n\t\tindex.value++;\n\t}\n\tfunction goToPrevious() {\n\t\tif (isFirst.value) return;\n\t\tindex.value--;\n\t}\n\tfunction goBackTo(step) {\n\t\tif (isAfter(step)) goTo(step);\n\t}\n\tfunction isNext(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value + 1;\n\t}\n\tfunction isPrevious(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value - 1;\n\t}\n\tfunction isCurrent(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value;\n\t}\n\tfunction isBefore(step) {\n\t\treturn index.value < stepNames.value.indexOf(step);\n\t}\n\tfunction isAfter(step) {\n\t\treturn index.value > stepNames.value.indexOf(step);\n\t}\n\treturn {\n\t\tsteps: stepsRef,\n\t\tstepNames,\n\t\tindex,\n\t\tcurrent,\n\t\tnext,\n\t\tprevious,\n\t\tisFirst,\n\t\tisLast,\n\t\tat,\n\t\tget,\n\t\tgoTo,\n\t\tgoToNext,\n\t\tgoToPrevious,\n\t\tgoBackTo,\n\t\tisNext,\n\t\tisPrevious,\n\t\tisCurrent,\n\t\tisBefore,\n\t\tisAfter\n\t};\n}\n\n//#endregion\n//#region useStorageAsync/index.ts\n/**\n* Reactive Storage in with async support.\n*\n* @see https://vueuse.org/useStorageAsync\n* @param key\n* @param initialValue\n* @param storage\n* @param options\n*/\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window: window$1 = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, onReady } = options;\n\tconst rawInit = toValue(initialValue);\n\tconst type = guessSerializerType(rawInit);\n\tconst data = (shallow ? shallowRef : ref)(toValue(initialValue));\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorageAsync\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tasync function read(event) {\n\t\tif (!storage || event && event.key !== key) return;\n\t\ttry {\n\t\t\tconst rawValue = event ? event.newValue : await storage.getItem(key);\n\t\t\tif (rawValue == null) {\n\t\t\t\tdata.value = rawInit;\n\t\t\t\tif (writeDefaults && rawInit !== null) await storage.setItem(key, await serializer.write(rawInit));\n\t\t\t} else if (mergeDefaults) {\n\t\t\t\tconst value = await serializer.read(rawValue);\n\t\t\t\tif (typeof mergeDefaults === \"function\") data.value = mergeDefaults(value, rawInit);\n\t\t\t\telse if (type === \"object\" && !Array.isArray(value)) data.value = {\n\t\t\t\t\t...rawInit,\n\t\t\t\t\t...value\n\t\t\t\t};\n\t\t\t\telse data.value = value;\n\t\t\t} else data.value = await serializer.read(rawValue);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tconst promise = new Promise((resolve) => {\n\t\tread().then(() => {\n\t\t\tonReady === null || onReady === void 0 || onReady(data.value);\n\t\t\tresolve(data);\n\t\t});\n\t});\n\tif (window$1 && listenToStorageChanges) useEventListener(window$1, \"storage\", (e) => Promise.resolve().then(() => read(e)), { passive: true });\n\tif (storage) watchWithFilter(data, async () => {\n\t\ttry {\n\t\t\tif (data.value == null) await storage.removeItem(key);\n\t\t\telse await storage.setItem(key, await serializer.write(data.value));\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\tObject.assign(data, {\n\t\tthen: promise.then.bind(promise),\n\t\tcatch: promise.catch.bind(promise)\n\t});\n\treturn data;\n}\n\n//#endregion\n//#region useStyleTag/index.ts\nlet _id = 0;\n/**\n* Inject <style> element in head.\n*\n* Overload: Omitted id\n*\n* @see https://vueuse.org/useStyleTag\n* @param css\n* @param options\n*/\nfunction useStyleTag(css, options = {}) {\n\tconst isLoaded = shallowRef(false);\n\tconst { document: document$1 = defaultDocument, immediate = true, manual = false, id = `vueuse_styletag_${++_id}` } = options;\n\tconst cssRef = shallowRef(css);\n\tlet stop = () => {};\n\tconst load = () => {\n\t\tif (!document$1) return;\n\t\tconst el = document$1.getElementById(id) || document$1.createElement(\"style\");\n\t\tif (!el.isConnected) {\n\t\t\tel.id = id;\n\t\t\tif (options.nonce) el.nonce = options.nonce;\n\t\t\tif (options.media) el.media = options.media;\n\t\t\tdocument$1.head.appendChild(el);\n\t\t}\n\t\tif (isLoaded.value) return;\n\t\tstop = watch(cssRef, (value) => {\n\t\t\tel.textContent = value;\n\t\t}, { immediate: true });\n\t\tisLoaded.value = true;\n\t};\n\tconst unload = () => {\n\t\tif (!document$1 || !isLoaded.value) return;\n\t\tstop();\n\t\tdocument$1.head.removeChild(document$1.getElementById(id));\n\t\tisLoaded.value = false;\n\t};\n\tif (immediate && !manual) tryOnMounted(load);\n\tif (!manual) tryOnScopeDispose(unload);\n\treturn {\n\t\tid,\n\t\tcss: cssRef,\n\t\tunload,\n\t\tload,\n\t\tisLoaded: readonly(isLoaded)\n\t};\n}\n\n//#endregion\n//#region useSwipe/index.ts\n/**\n* Reactive swipe detection.\n*\n* @see https://vueuse.org/useSwipe\n* @param target\n* @param options\n*/\nfunction useSwipe(target, options = {}) {\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, passive = true } = options;\n\tconst coordsStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst coordsEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst diffX = computed(() => coordsStart.x - coordsEnd.x);\n\tconst diffY = computed(() => coordsStart.y - coordsEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(diffX.value) > abs(diffY.value)) return diffX.value > 0 ? \"left\" : \"right\";\n\t\telse return diffY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n\tconst updateCoordsStart = (x, y) => {\n\t\tcoordsStart.x = x;\n\t\tcoordsStart.y = y;\n\t};\n\tconst updateCoordsEnd = (x, y) => {\n\t\tcoordsEnd.x = x;\n\t\tcoordsEnd.y = y;\n\t};\n\tconst listenerOptions = {\n\t\tpassive,\n\t\tcapture: !passive\n\t};\n\tconst onTouchEnd = (e) => {\n\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\tisSwiping.value = false;\n\t};\n\tconst stops = [\n\t\tuseEventListener(target, \"touchstart\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsStart(x, y);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"touchmove\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tif (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value)) e.preventDefault();\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n\t];\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping,\n\t\tdirection,\n\t\tcoordsStart,\n\t\tcoordsEnd,\n\t\tlengthX: diffX,\n\t\tlengthY: diffY,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useTemplateRefsList/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useTemplateRefsList() {\n\tconst refs = ref([]);\n\trefs.value.set = (el) => {\n\t\tif (el) refs.value.push(el);\n\t};\n\tonBeforeUpdate(() => {\n\t\trefs.value.length = 0;\n\t});\n\treturn refs;\n}\n\n//#endregion\n//#region useTextDirection/index.ts\n/**\n* Reactive dir of the element's text.\n*\n* @see https://vueuse.org/useTextDirection\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTextDirection(options = {}) {\n\tconst { document: document$1 = defaultDocument, selector = \"html\", observe = false, initialValue = \"ltr\" } = options;\n\tfunction getValue$1() {\n\t\tvar _ref, _document$querySelect;\n\t\treturn (_ref = document$1 === null || document$1 === void 0 || (_document$querySelect = document$1.querySelector(selector)) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.getAttribute(\"dir\")) !== null && _ref !== void 0 ? _ref : initialValue;\n\t}\n\tconst dir = ref(getValue$1());\n\ttryOnMounted(() => dir.value = getValue$1());\n\tif (observe && document$1) useMutationObserver(document$1.querySelector(selector), () => dir.value = getValue$1(), { attributes: true });\n\treturn computed({\n\t\tget() {\n\t\t\treturn dir.value;\n\t\t},\n\t\tset(v) {\n\t\t\tvar _document$querySelect2, _document$querySelect3;\n\t\t\tdir.value = v;\n\t\t\tif (!document$1) return;\n\t\t\tif (dir.value) (_document$querySelect2 = document$1.querySelector(selector)) === null || _document$querySelect2 === void 0 || _document$querySelect2.setAttribute(\"dir\", dir.value);\n\t\t\telse (_document$querySelect3 = document$1.querySelector(selector)) === null || _document$querySelect3 === void 0 || _document$querySelect3.removeAttribute(\"dir\");\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useTextSelection/index.ts\nfunction getRangesFromSelection(selection) {\n\tvar _selection$rangeCount;\n\tconst rangeCount = (_selection$rangeCount = selection.rangeCount) !== null && _selection$rangeCount !== void 0 ? _selection$rangeCount : 0;\n\treturn Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\n/**\n* Reactively track user text selection based on [`Window.getSelection`](https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection).\n*\n* @see https://vueuse.org/useTextSelection\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTextSelection(options = {}) {\n\tvar _window$getSelection;\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst selection = shallowRef((_window$getSelection = window$1 === null || window$1 === void 0 ? void 0 : window$1.getSelection()) !== null && _window$getSelection !== void 0 ? _window$getSelection : null);\n\tconst text = computed(() => {\n\t\tvar _selection$value$toSt, _selection$value;\n\t\treturn (_selection$value$toSt = (_selection$value = selection.value) === null || _selection$value === void 0 ? void 0 : _selection$value.toString()) !== null && _selection$value$toSt !== void 0 ? _selection$value$toSt : \"\";\n\t});\n\tconst ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n\tconst rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n\tfunction onSelectionChange() {\n\t\tselection.value = null;\n\t\tif (window$1) selection.value = window$1.getSelection();\n\t}\n\tif (window$1) useEventListener(window$1.document, \"selectionchange\", onSelectionChange, { passive: true });\n\treturn {\n\t\ttext,\n\t\trects,\n\t\tranges,\n\t\tselection\n\t};\n}\n\n//#endregion\n//#region useTextareaAutosize/index.ts\n/**\n* Call window.requestAnimationFrame(), if not available, just call the function\n*\n* @param window\n* @param fn\n*/\nfunction tryRequestAnimationFrame(window$1 = defaultWindow, fn) {\n\tif (window$1 && typeof window$1.requestAnimationFrame === \"function\") window$1.requestAnimationFrame(fn);\n\telse fn();\n}\nfunction useTextareaAutosize(options = {}) {\n\tvar _options$input, _options$styleProp;\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst textarea = toRef(options === null || options === void 0 ? void 0 : options.element);\n\tconst input = toRef((_options$input = options === null || options === void 0 ? void 0 : options.input) !== null && _options$input !== void 0 ? _options$input : \"\");\n\tconst styleProp = (_options$styleProp = options === null || options === void 0 ? void 0 : options.styleProp) !== null && _options$styleProp !== void 0 ? _options$styleProp : \"height\";\n\tconst textareaScrollHeight = shallowRef(1);\n\tconst textareaOldWidth = shallowRef(0);\n\tfunction triggerResize() {\n\t\tvar _textarea$value;\n\t\tif (!textarea.value) return;\n\t\tlet height = \"\";\n\t\ttextarea.value.style[styleProp] = \"1px\";\n\t\ttextareaScrollHeight.value = (_textarea$value = textarea.value) === null || _textarea$value === void 0 ? void 0 : _textarea$value.scrollHeight;\n\t\tconst _styleTarget = toValue(options === null || options === void 0 ? void 0 : options.styleTarget);\n\t\tif (_styleTarget) _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`;\n\t\telse height = `${textareaScrollHeight.value}px`;\n\t\ttextarea.value.style[styleProp] = height;\n\t}\n\twatch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n\twatch(textareaScrollHeight, () => {\n\t\tvar _options$onResize;\n\t\treturn options === null || options === void 0 || (_options$onResize = options.onResize) === null || _options$onResize === void 0 ? void 0 : _options$onResize.call(options);\n\t});\n\tuseResizeObserver(textarea, ([{ contentRect }]) => {\n\t\tif (textareaOldWidth.value === contentRect.width) return;\n\t\ttryRequestAnimationFrame(window$1, () => {\n\t\t\ttextareaOldWidth.value = contentRect.width;\n\t\t\ttriggerResize();\n\t\t});\n\t});\n\tif (options === null || options === void 0 ? void 0 : options.watch) watch(options.watch, triggerResize, {\n\t\timmediate: true,\n\t\tdeep: true\n\t});\n\treturn {\n\t\ttextarea,\n\t\tinput,\n\t\ttriggerResize\n\t};\n}\n\n//#endregion\n//#region useThrottledRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with throttled filter.\n*\n* @see https://vueuse.org/useThrottledRefHistory\n* @param source\n* @param options\n*/\nfunction useThrottledRefHistory(source, options = {}) {\n\tconst { throttle = 200, trailing = true } = options;\n\tconst filter = throttleFilter(throttle, trailing);\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n\n//#endregion\n//#region useTimeAgo/index.ts\nconst DEFAULT_UNITS = [\n\t{\n\t\tmax: 6e4,\n\t\tvalue: 1e3,\n\t\tname: \"second\"\n\t},\n\t{\n\t\tmax: 276e4,\n\t\tvalue: 6e4,\n\t\tname: \"minute\"\n\t},\n\t{\n\t\tmax: 72e6,\n\t\tvalue: 36e5,\n\t\tname: \"hour\"\n\t},\n\t{\n\t\tmax: 5184e5,\n\t\tvalue: 864e5,\n\t\tname: \"day\"\n\t},\n\t{\n\t\tmax: 24192e5,\n\t\tvalue: 6048e5,\n\t\tname: \"week\"\n\t},\n\t{\n\t\tmax: 28512e6,\n\t\tvalue: 2592e6,\n\t\tname: \"month\"\n\t},\n\t{\n\t\tmax: Number.POSITIVE_INFINITY,\n\t\tvalue: 31536e6,\n\t\tname: \"year\"\n\t}\n];\nconst DEFAULT_MESSAGES = {\n\tjustNow: \"just now\",\n\tpast: (n) => n.match(/\\d/) ? `${n} ago` : n,\n\tfuture: (n) => n.match(/\\d/) ? `in ${n}` : n,\n\tmonth: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n\tyear: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n\tday: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n\tweek: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n\thour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n\tminute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n\tsecond: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n\tinvalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n\treturn date.toISOString().slice(0, 10);\n}\n/**\n* Reactive time ago formatter.\n*\n* @see https://vueuse.org/useTimeAgo\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTimeAgo(time, options = {}) {\n\tconst { controls: exposeControls = false, updateInterval = 3e4 } = options;\n\tconst { now,...controls } = useNow({\n\t\tinterval: updateInterval,\n\t\tcontrols: true\n\t});\n\tconst timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n\tif (exposeControls) return {\n\t\ttimeAgo,\n\t\t...controls\n\t};\n\telse return timeAgo;\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n\tconst { max, messages = DEFAULT_MESSAGES, fullDateFormatter = DEFAULT_FORMATTER, units = DEFAULT_UNITS, showSecond = false, rounding = \"round\" } = options;\n\tconst roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n\tconst diff = +now - +from;\n\tconst absDiff = Math.abs(diff);\n\tfunction getValue$1(diff$1, unit) {\n\t\treturn roundFn(Math.abs(diff$1) / unit.value);\n\t}\n\tfunction format(diff$1, unit) {\n\t\tconst val = getValue$1(diff$1, unit);\n\t\tconst past = diff$1 > 0;\n\t\tconst str = applyFormat(unit.name, val, past);\n\t\treturn applyFormat(past ? \"past\" : \"future\", str, past);\n\t}\n\tfunction applyFormat(name, val, isPast) {\n\t\tconst formatter = messages[name];\n\t\tif (typeof formatter === \"function\") return formatter(val, isPast);\n\t\treturn formatter.replace(\"{0}\", val.toString());\n\t}\n\tif (absDiff < 6e4 && !showSecond) return messages.justNow;\n\tif (typeof max === \"number\" && absDiff > max) return fullDateFormatter(new Date(from));\n\tif (typeof max === \"string\") {\n\t\tvar _units$find;\n\t\tconst unitMax = (_units$find = units.find((i) => i.name === max)) === null || _units$find === void 0 ? void 0 : _units$find.max;\n\t\tif (unitMax && absDiff > unitMax) return fullDateFormatter(new Date(from));\n\t}\n\tfor (const [idx, unit] of units.entries()) {\n\t\tif (getValue$1(diff, unit) <= 0 && units[idx - 1]) return format(diff, units[idx - 1]);\n\t\tif (absDiff < unit.max) return format(diff, unit);\n\t}\n\treturn messages.invalid;\n}\n\n//#endregion\n//#region useTimeAgoIntl/index.ts\nconst UNITS = [\n\t{\n\t\tname: \"year\",\n\t\tms: 31536e6\n\t},\n\t{\n\t\tname: \"month\",\n\t\tms: 2592e6\n\t},\n\t{\n\t\tname: \"week\",\n\t\tms: 6048e5\n\t},\n\t{\n\t\tname: \"day\",\n\t\tms: 864e5\n\t},\n\t{\n\t\tname: \"hour\",\n\t\tms: 36e5\n\t},\n\t{\n\t\tname: \"minute\",\n\t\tms: 6e4\n\t},\n\t{\n\t\tname: \"second\",\n\t\tms: 1e3\n\t}\n];\nfunction useTimeAgoIntl(time, options = {}) {\n\tconst { controls: exposeControls = false, updateInterval = 3e4 } = options;\n\tconst { now,...controls } = useNow({\n\t\tinterval: updateInterval,\n\t\tcontrols: true\n\t});\n\tconst result = computed(() => getTimeAgoIntlResult(new Date(toValue(time)), options, toValue(now)));\n\tconst parts = computed(() => result.value.parts);\n\tconst timeAgoIntl = computed(() => formatTimeAgoIntlParts(parts.value, {\n\t\t...options,\n\t\tlocale: result.value.resolvedLocale\n\t}));\n\treturn exposeControls ? {\n\t\ttimeAgoIntl,\n\t\tparts,\n\t\t...controls\n\t} : timeAgoIntl;\n}\n/**\n* Non-reactive version of useTimeAgoIntl\n*/\nfunction formatTimeAgoIntl(from, options = {}, now = Date.now()) {\n\tconst { parts, resolvedLocale } = getTimeAgoIntlResult(from, options, now);\n\treturn formatTimeAgoIntlParts(parts, {\n\t\t...options,\n\t\tlocale: resolvedLocale\n\t});\n}\n/**\n* Get parts from `Intl.RelativeTimeFormat.formatToParts`.\n*/\nfunction getTimeAgoIntlResult(from, options = {}, now = Date.now()) {\n\tconst { locale, relativeTimeFormatOptions = { numeric: \"auto\" } } = options;\n\tconst rtf = new Intl.RelativeTimeFormat(locale, relativeTimeFormatOptions);\n\tconst { locale: resolvedLocale } = rtf.resolvedOptions();\n\tconst diff = +from - +now;\n\tconst absDiff = Math.abs(diff);\n\tfor (const { name, ms } of UNITS) if (absDiff >= ms) return {\n\t\tresolvedLocale,\n\t\tparts: rtf.formatToParts(Math.round(diff / ms), name)\n\t};\n\treturn {\n\t\tresolvedLocale,\n\t\tparts: rtf.formatToParts(0, \"second\")\n\t};\n}\n/**\n* Format parts into a string\n*/\nfunction formatTimeAgoIntlParts(parts, options = {}) {\n\tconst { insertSpace = true, joinParts, locale } = options;\n\tif (typeof joinParts === \"function\") return joinParts(parts, locale);\n\tif (!insertSpace) return parts.map((part) => part.value).join(\"\");\n\treturn parts.map((part) => part.value.trim()).join(\" \");\n}\n\n//#endregion\n//#region useTimeoutPoll/index.ts\nfunction useTimeoutPoll(fn, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst { start } = useTimeoutFn(loop, interval, { immediate });\n\tconst isActive = shallowRef(false);\n\tasync function loop() {\n\t\tif (!isActive.value) return;\n\t\tawait fn();\n\t\tstart();\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value) {\n\t\t\tisActive.value = true;\n\t\t\tif (immediateCallback) fn();\n\t\t\tstart();\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tif (immediate && isClient) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive,\n\t\tpause,\n\t\tresume\n\t};\n}\n\n//#endregion\n//#region useTimestamp/index.ts\nfunction useTimestamp(options = {}) {\n\tconst { controls: exposeControls = false, offset = 0, immediate = true, interval = \"requestAnimationFrame\", callback } = options;\n\tconst ts = shallowRef(timestamp() + offset);\n\tconst update = () => ts.value = timestamp() + offset;\n\tconst cb = callback ? () => {\n\t\tupdate();\n\t\tcallback(ts.value);\n\t} : update;\n\tconst controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n\tif (exposeControls) return {\n\t\ttimestamp: ts,\n\t\t...controls\n\t};\n\telse return ts;\n}\n\n//#endregion\n//#region useTitle/index.ts\nfunction useTitle(newTitle = null, options = {}) {\n\tvar _document$title, _ref;\n\tconst { document: document$1 = defaultDocument, restoreOnUnmount = (t) => t } = options;\n\tconst originalTitle = (_document$title = document$1 === null || document$1 === void 0 ? void 0 : document$1.title) !== null && _document$title !== void 0 ? _document$title : \"\";\n\tconst title = toRef((_ref = newTitle !== null && newTitle !== void 0 ? newTitle : document$1 === null || document$1 === void 0 ? void 0 : document$1.title) !== null && _ref !== void 0 ? _ref : null);\n\tconst isReadonly$1 = !!(newTitle && typeof newTitle === \"function\");\n\tfunction format(t) {\n\t\tif (!(\"titleTemplate\" in options)) return t;\n\t\tconst template = options.titleTemplate || \"%s\";\n\t\treturn typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n\t}\n\twatch(title, (newValue, oldValue) => {\n\t\tif (newValue !== oldValue && document$1) document$1.title = format(newValue !== null && newValue !== void 0 ? newValue : \"\");\n\t}, { immediate: true });\n\tif (options.observe && !options.titleTemplate && document$1 && !isReadonly$1) {\n\t\tvar _document$head;\n\t\tuseMutationObserver((_document$head = document$1.head) === null || _document$head === void 0 ? void 0 : _document$head.querySelector(\"title\"), () => {\n\t\t\tif (document$1 && document$1.title !== title.value) title.value = format(document$1.title);\n\t\t}, { childList: true });\n\t}\n\ttryOnScopeDispose(() => {\n\t\tif (restoreOnUnmount) {\n\t\t\tconst restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n\t\t\tif (restoredTitle != null && document$1) document$1.title = restoredTitle;\n\t\t}\n\t});\n\treturn title;\n}\n\n//#endregion\n//#region useTransition/index.ts\nconst _TransitionPresets = {\n\teaseInSine: [\n\t\t.12,\n\t\t0,\n\t\t.39,\n\t\t0\n\t],\n\teaseOutSine: [\n\t\t.61,\n\t\t1,\n\t\t.88,\n\t\t1\n\t],\n\teaseInOutSine: [\n\t\t.37,\n\t\t0,\n\t\t.63,\n\t\t1\n\t],\n\teaseInQuad: [\n\t\t.11,\n\t\t0,\n\t\t.5,\n\t\t0\n\t],\n\teaseOutQuad: [\n\t\t.5,\n\t\t1,\n\t\t.89,\n\t\t1\n\t],\n\teaseInOutQuad: [\n\t\t.45,\n\t\t0,\n\t\t.55,\n\t\t1\n\t],\n\teaseInCubic: [\n\t\t.32,\n\t\t0,\n\t\t.67,\n\t\t0\n\t],\n\teaseOutCubic: [\n\t\t.33,\n\t\t1,\n\t\t.68,\n\t\t1\n\t],\n\teaseInOutCubic: [\n\t\t.65,\n\t\t0,\n\t\t.35,\n\t\t1\n\t],\n\teaseInQuart: [\n\t\t.5,\n\t\t0,\n\t\t.75,\n\t\t0\n\t],\n\teaseOutQuart: [\n\t\t.25,\n\t\t1,\n\t\t.5,\n\t\t1\n\t],\n\teaseInOutQuart: [\n\t\t.76,\n\t\t0,\n\t\t.24,\n\t\t1\n\t],\n\teaseInQuint: [\n\t\t.64,\n\t\t0,\n\t\t.78,\n\t\t0\n\t],\n\teaseOutQuint: [\n\t\t.22,\n\t\t1,\n\t\t.36,\n\t\t1\n\t],\n\teaseInOutQuint: [\n\t\t.83,\n\t\t0,\n\t\t.17,\n\t\t1\n\t],\n\teaseInExpo: [\n\t\t.7,\n\t\t0,\n\t\t.84,\n\t\t0\n\t],\n\teaseOutExpo: [\n\t\t.16,\n\t\t1,\n\t\t.3,\n\t\t1\n\t],\n\teaseInOutExpo: [\n\t\t.87,\n\t\t0,\n\t\t.13,\n\t\t1\n\t],\n\teaseInCirc: [\n\t\t.55,\n\t\t0,\n\t\t1,\n\t\t.45\n\t],\n\teaseOutCirc: [\n\t\t0,\n\t\t.55,\n\t\t.45,\n\t\t1\n\t],\n\teaseInOutCirc: [\n\t\t.85,\n\t\t0,\n\t\t.15,\n\t\t1\n\t],\n\teaseInBack: [\n\t\t.36,\n\t\t0,\n\t\t.66,\n\t\t-.56\n\t],\n\teaseOutBack: [\n\t\t.34,\n\t\t1.56,\n\t\t.64,\n\t\t1\n\t],\n\teaseInOutBack: [\n\t\t.68,\n\t\t-.6,\n\t\t.32,\n\t\t1.6\n\t]\n};\n/**\n* Common transitions\n*\n* @see https://easings.net\n*/\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\n/**\n* Create an easing function from cubic bezier points.\n*/\nfunction createEasingFunction([p0, p1, p2, p3]) {\n\tconst a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n\tconst b = (a1, a2) => 3 * a2 - 6 * a1;\n\tconst c = (a1) => 3 * a1;\n\tconst calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n\tconst getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n\tconst getTforX = (x) => {\n\t\tlet aGuessT = x;\n\t\tfor (let i = 0; i < 4; ++i) {\n\t\t\tconst currentSlope = getSlope(aGuessT, p0, p2);\n\t\t\tif (currentSlope === 0) return aGuessT;\n\t\t\tconst currentX = calcBezier(aGuessT, p0, p2) - x;\n\t\t\taGuessT -= currentX / currentSlope;\n\t\t}\n\t\treturn aGuessT;\n\t};\n\treturn (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n\treturn a + alpha * (b - a);\n}\nfunction defaultInterpolation(a, b, t) {\n\tconst aVal = toValue(a);\n\tconst bVal = toValue(b);\n\tif (typeof aVal === \"number\" && typeof bVal === \"number\") return lerp(aVal, bVal, t);\n\tif (Array.isArray(aVal) && Array.isArray(bVal)) return aVal.map((v, i) => lerp(v, toValue(bVal[i]), t));\n\tthrow new TypeError(\"Unknown transition type, specify an interpolation function.\");\n}\nfunction normalizeEasing(easing) {\n\tvar _toValue;\n\treturn typeof easing === \"function\" ? easing : (_toValue = toValue(easing)) !== null && _toValue !== void 0 ? _toValue : identity;\n}\n/**\n* Transition from one value to another.\n*\n* @param source\n* @param from\n* @param to\n* @param options\n*/\nfunction transition(source, from, to, options = {}) {\n\tvar _toValue2;\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst fromVal = toValue(from);\n\tconst toVal = toValue(to);\n\tconst duration = (_toValue2 = toValue(options.duration)) !== null && _toValue2 !== void 0 ? _toValue2 : 1e3;\n\tconst startedAt = Date.now();\n\tconst endAt = Date.now() + duration;\n\tconst interpolation = typeof options.interpolation === \"function\" ? options.interpolation : defaultInterpolation;\n\tconst trans = typeof options.easing !== \"undefined\" ? normalizeEasing(options.easing) : normalizeEasing(options.transition);\n\tconst ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n\treturn new Promise((resolve) => {\n\t\tsource.value = fromVal;\n\t\tconst tick = () => {\n\t\t\tvar _options$abort;\n\t\t\tif ((_options$abort = options.abort) === null || _options$abort === void 0 ? void 0 : _options$abort.call(options)) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tsource.value = interpolation(fromVal, toVal, ease((now - startedAt) / duration));\n\t\t\tif (now < endAt) window$1 === null || window$1 === void 0 || window$1.requestAnimationFrame(tick);\n\t\t\telse {\n\t\t\t\tsource.value = toVal;\n\t\t\t\tresolve();\n\t\t\t}\n\t\t};\n\t\ttick();\n\t});\n}\n/**\n* Transition from one value to another.\n* @deprecated The `executeTransition` function is deprecated, use `transition` instead.\n*\n* @param source\n* @param from\n* @param to\n* @param options\n*/\nfunction executeTransition(source, from, to, options = {}) {\n\treturn transition(source, from, to, options);\n}\n/**\n* Follow value with a transition.\n*\n* @see https://vueuse.org/useTransition\n* @param source\n* @param options\n*/\nfunction useTransition(source, options = {}) {\n\tlet currentId = 0;\n\tconst sourceVal = () => {\n\t\tconst v = toValue(source);\n\t\treturn typeof options.interpolation === \"undefined\" && Array.isArray(v) ? v.map(toValue) : v;\n\t};\n\tconst outputRef = shallowRef(sourceVal());\n\twatch(sourceVal, async (to) => {\n\t\tvar _options$onStarted, _options$onFinished;\n\t\tif (toValue(options.disabled)) return;\n\t\tconst id = ++currentId;\n\t\tif (options.delay) await promiseTimeout(toValue(options.delay));\n\t\tif (id !== currentId) return;\n\t\t(_options$onStarted = options.onStarted) === null || _options$onStarted === void 0 || _options$onStarted.call(options);\n\t\tawait transition(outputRef, outputRef.value, to, {\n\t\t\t...options,\n\t\t\tabort: () => {\n\t\t\t\tvar _options$abort2;\n\t\t\t\treturn id !== currentId || ((_options$abort2 = options.abort) === null || _options$abort2 === void 0 ? void 0 : _options$abort2.call(options));\n\t\t\t}\n\t\t});\n\t\t(_options$onFinished = options.onFinished) === null || _options$onFinished === void 0 || _options$onFinished.call(options);\n\t}, { deep: true });\n\twatch(() => toValue(options.disabled), (disabled) => {\n\t\tif (disabled) {\n\t\t\tcurrentId++;\n\t\t\toutputRef.value = sourceVal();\n\t\t}\n\t});\n\ttryOnScopeDispose(() => {\n\t\tcurrentId++;\n\t});\n\treturn computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\n//#endregion\n//#region useUrlSearchParams/index.ts\n/**\n* Reactive URLSearchParams\n*\n* @see https://vueuse.org/useUrlSearchParams\n* @param mode\n* @param options\n*/\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n\tconst { initialValue = {}, removeNullishValues = true, removeFalsyValues = false, write: enableWrite = true, writeMode = \"replace\", window: window$1 = defaultWindow, stringify = (params) => params.toString() } = options;\n\tif (!window$1) return reactive(initialValue);\n\tconst state = reactive({});\n\tfunction getRawParams() {\n\t\tif (mode === \"history\") return window$1.location.search || \"\";\n\t\telse if (mode === \"hash\") {\n\t\t\tconst hash = window$1.location.hash || \"\";\n\t\t\tconst index = hash.indexOf(\"?\");\n\t\t\treturn index > 0 ? hash.slice(index) : \"\";\n\t\t} else return (window$1.location.hash || \"\").replace(/^#/, \"\");\n\t}\n\tfunction constructQuery(params) {\n\t\tconst stringified = stringify(params);\n\t\tif (mode === \"history\") return `${stringified ? `?${stringified}` : \"\"}${window$1.location.hash || \"\"}`;\n\t\tif (mode === \"hash-params\") return `${window$1.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n\t\tconst hash = window$1.location.hash || \"#\";\n\t\tconst index = hash.indexOf(\"?\");\n\t\tif (index > 0) return `${window$1.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n\t\treturn `${window$1.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n\t}\n\tfunction read() {\n\t\treturn new URLSearchParams(getRawParams());\n\t}\n\tfunction updateState(params) {\n\t\tconst unusedKeys = new Set(Object.keys(state));\n\t\tfor (const key of params.keys()) {\n\t\t\tconst paramsForKey = params.getAll(key);\n\t\t\tstate[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n\t\t\tunusedKeys.delete(key);\n\t\t}\n\t\tArray.from(unusedKeys).forEach((key) => delete state[key]);\n\t}\n\tconst { pause, resume } = pausableWatch(state, () => {\n\t\tconst params = new URLSearchParams(\"\");\n\t\tObject.keys(state).forEach((key) => {\n\t\t\tconst mapEntry = state[key];\n\t\t\tif (Array.isArray(mapEntry)) mapEntry.forEach((value) => params.append(key, value));\n\t\t\telse if (removeNullishValues && mapEntry == null) params.delete(key);\n\t\t\telse if (removeFalsyValues && !mapEntry) params.delete(key);\n\t\t\telse params.set(key, mapEntry);\n\t\t});\n\t\twrite(params, false);\n\t}, { deep: true });\n\tfunction write(params, shouldUpdate, shouldWriteHistory = true) {\n\t\tpause();\n\t\tif (shouldUpdate) updateState(params);\n\t\tif (writeMode === \"replace\") window$1.history.replaceState(window$1.history.state, window$1.document.title, window$1.location.pathname + constructQuery(params));\n\t\telse if (shouldWriteHistory) window$1.history.pushState(window$1.history.state, window$1.document.title, window$1.location.pathname + constructQuery(params));\n\t\tnextTick(() => resume());\n\t}\n\tfunction onChanged() {\n\t\tif (!enableWrite) return;\n\t\twrite(read(), true, false);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(window$1, \"popstate\", onChanged, listenerOptions);\n\tif (mode !== \"history\") useEventListener(window$1, \"hashchange\", onChanged, listenerOptions);\n\tconst initial = read();\n\tif (initial.keys().next().value) updateState(initial);\n\telse Object.assign(state, initialValue);\n\treturn state;\n}\n\n//#endregion\n//#region useUserMedia/index.ts\n/**\n* Reactive `mediaDevices.getUserMedia` streaming\n*\n* @see https://vueuse.org/useUserMedia\n* @param options\n*/\nfunction useUserMedia(options = {}) {\n\tvar _options$enabled, _options$autoSwitch;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst autoSwitch = shallowRef((_options$autoSwitch = options.autoSwitch) !== null && _options$autoSwitch !== void 0 ? _options$autoSwitch : true);\n\tconst constraints = ref(options.constraints);\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator$1 === null || navigator$1 === void 0 || (_navigator$mediaDevic = navigator$1.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getUserMedia;\n\t});\n\tconst stream = shallowRef();\n\tfunction getDeviceOptions(type) {\n\t\tswitch (type) {\n\t\t\tcase \"video\":\n\t\t\t\tif (constraints.value) return constraints.value.video || false;\n\t\t\t\tbreak;\n\t\t\tcase \"audio\":\n\t\t\t\tif (constraints.value) return constraints.value.audio || false;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tasync function _start() {\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator$1.mediaDevices.getUserMedia({\n\t\t\tvideo: getDeviceOptions(\"video\"),\n\t\t\taudio: getDeviceOptions(\"audio\")\n\t\t});\n\t\treturn stream.value;\n\t}\n\tfunction _stop() {\n\t\tvar _stream$value;\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\tasync function restart() {\n\t\t_stop();\n\t\treturn await start();\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\twatch(constraints, () => {\n\t\tif (autoSwitch.value && stream.value) restart();\n\t}, {\n\t\timmediate: true,\n\t\tdeep: true\n\t});\n\ttryOnScopeDispose(() => {\n\t\tstop();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\trestart,\n\t\tconstraints,\n\t\tenabled,\n\t\tautoSwitch\n\t};\n}\n\n//#endregion\n//#region useVModel/index.ts\n/**\n* Shorthand for v-model binding, props + emit -> ref\n*\n* @see https://vueuse.org/useVModel\n* @param props\n* @param key (default 'modelValue')\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModel(props, key, emit, options = {}) {\n\tvar _vm$$emit, _vm$proxy;\n\tconst { clone = false, passive = false, eventName, deep = false, defaultValue, shouldEmit } = options;\n\tconst vm = getCurrentInstance();\n\tconst _emit = emit || (vm === null || vm === void 0 ? void 0 : vm.emit) || (vm === null || vm === void 0 || (_vm$$emit = vm.$emit) === null || _vm$$emit === void 0 ? void 0 : _vm$$emit.bind(vm)) || (vm === null || vm === void 0 || (_vm$proxy = vm.proxy) === null || _vm$proxy === void 0 || (_vm$proxy = _vm$proxy.$emit) === null || _vm$proxy === void 0 ? void 0 : _vm$proxy.bind(vm === null || vm === void 0 ? void 0 : vm.proxy));\n\tlet event = eventName;\n\tif (!key) key = \"modelValue\";\n\tevent = event || `update:${key.toString()}`;\n\tconst cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n\tconst getValue$1 = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n\tconst triggerEmit = (value) => {\n\t\tif (shouldEmit) {\n\t\t\tif (shouldEmit(value)) _emit(event, value);\n\t\t} else _emit(event, value);\n\t};\n\tif (passive) {\n\t\tconst proxy = ref(getValue$1());\n\t\tlet isUpdating = false;\n\t\twatch(() => props[key], (v) => {\n\t\t\tif (!isUpdating) {\n\t\t\t\tisUpdating = true;\n\t\t\t\tproxy.value = cloneFn(v);\n\t\t\t\tnextTick(() => isUpdating = false);\n\t\t\t}\n\t\t});\n\t\twatch(proxy, (v) => {\n\t\t\tif (!isUpdating && (v !== props[key] || deep)) triggerEmit(v);\n\t\t}, { deep });\n\t\treturn proxy;\n\t} else return computed({\n\t\tget() {\n\t\t\treturn getValue$1();\n\t\t},\n\t\tset(value) {\n\t\t\ttriggerEmit(value);\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useVModels/index.ts\n/**\n* Shorthand for props v-model binding. Think like `toRefs(props)` but changes will also emit out.\n*\n* @see https://vueuse.org/useVModels\n* @param props\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModels(props, emit, options = {}) {\n\tconst ret = {};\n\tfor (const key in props) ret[key] = useVModel(props, key, emit, options);\n\treturn ret;\n}\n\n//#endregion\n//#region useVibrate/index.ts\n/**\n* Reactive vibrate\n*\n* @see https://vueuse.org/useVibrate\n* @see https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVibrate(options) {\n\tconst { pattern = [], interval = 0, navigator: navigator$1 = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof navigator$1 !== \"undefined\" && \"vibrate\" in navigator$1);\n\tconst patternRef = toRef(pattern);\n\tlet intervalControls;\n\tconst vibrate = (pattern$1 = patternRef.value) => {\n\t\tif (isSupported.value) navigator$1.vibrate(pattern$1);\n\t};\n\tconst stop = () => {\n\t\tif (isSupported.value) navigator$1.vibrate(0);\n\t\tintervalControls === null || intervalControls === void 0 || intervalControls.pause();\n\t};\n\tif (interval > 0) intervalControls = useIntervalFn(vibrate, interval, {\n\t\timmediate: false,\n\t\timmediateCallback: false\n\t});\n\treturn {\n\t\tisSupported,\n\t\tpattern,\n\t\tintervalControls,\n\t\tvibrate,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useVirtualList/index.ts\n/**\n* Please consider using [`vue-virtual-scroller`](https://github.com/Akryum/vue-virtual-scroller) if you are looking for more features.\n*/\nfunction useVirtualList(list, options) {\n\tconst { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n\treturn {\n\t\tlist: currentList,\n\t\tscrollTo,\n\t\tcontainerProps: {\n\t\t\tref: containerRef,\n\t\t\tonScroll: () => {\n\t\t\t\tcalculateRange();\n\t\t\t},\n\t\t\tstyle: containerStyle\n\t\t},\n\t\twrapperProps\n\t};\n}\nfunction useVirtualListResources(list) {\n\tconst containerRef = shallowRef(null);\n\tconst size = useElementSize(containerRef);\n\tconst currentList = ref([]);\n\tconst source = shallowRef(list);\n\treturn {\n\t\tstate: ref({\n\t\t\tstart: 0,\n\t\t\tend: 10\n\t\t}),\n\t\tsource,\n\t\tcurrentList,\n\t\tsize,\n\t\tcontainerRef\n\t};\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n\treturn (containerSize) => {\n\t\tif (typeof itemSize === \"number\") return Math.ceil(containerSize / itemSize);\n\t\tconst { start = 0 } = state.value;\n\t\tlet sum = 0;\n\t\tlet capacity = 0;\n\t\tfor (let i = start; i < source.value.length; i++) {\n\t\t\tconst size = itemSize(i);\n\t\t\tsum += size;\n\t\t\tcapacity = i;\n\t\t\tif (sum > containerSize) break;\n\t\t}\n\t\treturn capacity - start;\n\t};\n}\nfunction createGetOffset(source, itemSize) {\n\treturn (scrollDirection) => {\n\t\tif (typeof itemSize === \"number\") return Math.floor(scrollDirection / itemSize) + 1;\n\t\tlet sum = 0;\n\t\tlet offset = 0;\n\t\tfor (let i = 0; i < source.value.length; i++) {\n\t\t\tconst size = itemSize(i);\n\t\t\tsum += size;\n\t\t\tif (sum >= scrollDirection) {\n\t\t\t\toffset = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn offset + 1;\n\t};\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n\treturn () => {\n\t\tconst element = containerRef.value;\n\t\tif (element) {\n\t\t\tconst offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n\t\t\tconst viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n\t\t\tconst from = offset - overscan;\n\t\t\tconst to = offset + viewCapacity + overscan;\n\t\t\tstate.value = {\n\t\t\t\tstart: from < 0 ? 0 : from,\n\t\t\t\tend: to > source.value.length ? source.value.length : to\n\t\t\t};\n\t\t\tcurrentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n\t\t\t\tdata: ele,\n\t\t\t\tindex: index + state.value.start\n\t\t\t}));\n\t\t}\n\t};\n}\nfunction createGetDistance(itemSize, source) {\n\treturn (index) => {\n\t\tif (typeof itemSize === \"number\") return index * itemSize;\n\t\treturn source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n\t};\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n\twatch([\n\t\tsize.width,\n\t\tsize.height,\n\t\t() => toValue(list),\n\t\tcontainerRef\n\t], () => {\n\t\tcalculateRange();\n\t});\n}\nfunction createComputedTotalSize(itemSize, source) {\n\treturn computed(() => {\n\t\tif (typeof itemSize === \"number\") return source.value.length * itemSize;\n\t\treturn source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n\t});\n}\nconst scrollToDictionaryForElementScrollKey = {\n\thorizontal: \"scrollLeft\",\n\tvertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n\treturn (index) => {\n\t\tif (containerRef.value) {\n\t\t\tcontainerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n\t\t\tcalculateRange();\n\t\t}\n\t};\n}\nfunction useHorizontalVirtualList(options, list) {\n\tconst resources = useVirtualListResources(list);\n\tconst { state, source, currentList, size, containerRef } = resources;\n\tconst containerStyle = { overflowX: \"auto\" };\n\tconst { itemWidth, overscan = 5 } = options;\n\tconst getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n\tconst calculateRange = createCalculateRange(\"horizontal\", overscan, createGetOffset(source, itemWidth), getViewCapacity, resources);\n\tconst getDistanceLeft = createGetDistance(itemWidth, source);\n\tconst offsetLeft = computed(() => getDistanceLeft(state.value.start));\n\tconst totalWidth = createComputedTotalSize(itemWidth, source);\n\tuseWatchForSizes(size, list, containerRef, calculateRange);\n\treturn {\n\t\tscrollTo: createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef),\n\t\tcalculateRange,\n\t\twrapperProps: computed(() => {\n\t\t\treturn { style: {\n\t\t\t\theight: \"100%\",\n\t\t\t\twidth: `${totalWidth.value - offsetLeft.value}px`,\n\t\t\t\tmarginLeft: `${offsetLeft.value}px`,\n\t\t\t\tdisplay: \"flex\"\n\t\t\t} };\n\t\t}),\n\t\tcontainerStyle,\n\t\tcurrentList,\n\t\tcontainerRef\n\t};\n}\nfunction useVerticalVirtualList(options, list) {\n\tconst resources = useVirtualListResources(list);\n\tconst { state, source, currentList, size, containerRef } = resources;\n\tconst containerStyle = { overflowY: \"auto\" };\n\tconst { itemHeight, overscan = 5 } = options;\n\tconst getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n\tconst calculateRange = createCalculateRange(\"vertical\", overscan, createGetOffset(source, itemHeight), getViewCapacity, resources);\n\tconst getDistanceTop = createGetDistance(itemHeight, source);\n\tconst offsetTop = computed(() => getDistanceTop(state.value.start));\n\tconst totalHeight = createComputedTotalSize(itemHeight, source);\n\tuseWatchForSizes(size, list, containerRef, calculateRange);\n\treturn {\n\t\tcalculateRange,\n\t\tscrollTo: createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef),\n\t\tcontainerStyle,\n\t\twrapperProps: computed(() => {\n\t\t\treturn { style: {\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: `${totalHeight.value - offsetTop.value}px`,\n\t\t\t\tmarginTop: `${offsetTop.value}px`\n\t\t\t} };\n\t\t}),\n\t\tcurrentList,\n\t\tcontainerRef\n\t};\n}\n\n//#endregion\n//#region useWakeLock/index.ts\n/**\n* Reactive Screen Wake Lock API.\n*\n* @see https://vueuse.org/useWakeLock\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWakeLock(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, document: document$1 = defaultDocument } = options;\n\tconst requestedType = shallowRef(false);\n\tconst sentinel = shallowRef(null);\n\tconst documentVisibility = useDocumentVisibility({ document: document$1 });\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"wakeLock\" in navigator$1);\n\tconst isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n\tif (isSupported.value) {\n\t\tuseEventListener(sentinel, \"release\", () => {\n\t\t\tvar _sentinel$value$type, _sentinel$value;\n\t\t\trequestedType.value = (_sentinel$value$type = (_sentinel$value = sentinel.value) === null || _sentinel$value === void 0 ? void 0 : _sentinel$value.type) !== null && _sentinel$value$type !== void 0 ? _sentinel$value$type : false;\n\t\t}, { passive: true });\n\t\twhenever(() => documentVisibility.value === \"visible\" && (document$1 === null || document$1 === void 0 ? void 0 : document$1.visibilityState) === \"visible\" && requestedType.value, (type) => {\n\t\t\trequestedType.value = false;\n\t\t\tforceRequest(type);\n\t\t});\n\t}\n\tasync function forceRequest(type) {\n\t\tvar _sentinel$value2;\n\t\tawait ((_sentinel$value2 = sentinel.value) === null || _sentinel$value2 === void 0 ? void 0 : _sentinel$value2.release());\n\t\tsentinel.value = isSupported.value ? await navigator$1.wakeLock.request(type) : null;\n\t}\n\tasync function request(type) {\n\t\tif (documentVisibility.value === \"visible\") await forceRequest(type);\n\t\telse requestedType.value = type;\n\t}\n\tasync function release() {\n\t\trequestedType.value = false;\n\t\tconst s = sentinel.value;\n\t\tsentinel.value = null;\n\t\tawait (s === null || s === void 0 ? void 0 : s.release());\n\t}\n\treturn {\n\t\tsentinel,\n\t\tisSupported,\n\t\tisActive,\n\t\trequest,\n\t\tforceRequest,\n\t\trelease\n\t};\n}\n\n//#endregion\n//#region useWebNotification/index.ts\n/**\n* Reactive useWebNotification\n*\n* @see https://vueuse.org/useWebNotification\n* @see https://developer.mozilla.org/en-US/docs/Web/API/notification\n*/\nfunction useWebNotification(options = {}) {\n\tconst { window: window$1 = defaultWindow, requestPermissions: _requestForPermissions = true } = options;\n\tconst defaultWebNotificationOptions = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (!window$1 || !(\"Notification\" in window$1)) return false;\n\t\tif (Notification.permission === \"granted\") return true;\n\t\ttry {\n\t\t\tconst notification$1 = new Notification(\"\");\n\t\t\tnotification$1.onshow = () => {\n\t\t\t\tnotification$1.close();\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tif (e.name === \"TypeError\") return false;\n\t\t}\n\t\treturn true;\n\t});\n\tconst permissionGranted = shallowRef(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n\tconst notification = ref(null);\n\tconst ensurePermissions = async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionGranted.value && Notification.permission !== \"denied\") {\n\t\t\tif (await Notification.requestPermission() === \"granted\") permissionGranted.value = true;\n\t\t}\n\t\treturn permissionGranted.value;\n\t};\n\tconst { on: onClick, trigger: clickTrigger } = createEventHook();\n\tconst { on: onShow, trigger: showTrigger } = createEventHook();\n\tconst { on: onError, trigger: errorTrigger } = createEventHook();\n\tconst { on: onClose, trigger: closeTrigger } = createEventHook();\n\tconst show = async (overrides) => {\n\t\tif (!isSupported.value || !permissionGranted.value) return;\n\t\tconst options$1 = Object.assign({}, defaultWebNotificationOptions, overrides);\n\t\tnotification.value = new Notification(options$1.title || \"\", options$1);\n\t\tnotification.value.onclick = clickTrigger;\n\t\tnotification.value.onshow = showTrigger;\n\t\tnotification.value.onerror = errorTrigger;\n\t\tnotification.value.onclose = closeTrigger;\n\t\treturn notification.value;\n\t};\n\tconst close = () => {\n\t\tif (notification.value) notification.value.close();\n\t\tnotification.value = null;\n\t};\n\tif (_requestForPermissions) tryOnMounted(ensurePermissions);\n\ttryOnScopeDispose(close);\n\tif (isSupported.value && window$1) {\n\t\tconst document$1 = window$1.document;\n\t\tuseEventListener(document$1, \"visibilitychange\", (e) => {\n\t\t\te.preventDefault();\n\t\t\tif (document$1.visibilityState === \"visible\") close();\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tnotification,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tshow,\n\t\tclose,\n\t\tonClick,\n\t\tonShow,\n\t\tonError,\n\t\tonClose\n\t};\n}\n\n//#endregion\n//#region useWebSocket/index.ts\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n\tif (options === true) return {};\n\treturn options;\n}\n/**\n* Reactive WebSocket client.\n*\n* @see https://vueuse.org/useWebSocket\n* @param url\n*/\nfunction useWebSocket(url, options = {}) {\n\tconst { onConnected, onDisconnected, onError, onMessage, immediate = true, autoConnect = true, autoClose = true, protocols = [] } = options;\n\tconst data = ref(null);\n\tconst status = shallowRef(\"CLOSED\");\n\tconst wsRef = ref();\n\tconst urlRef = toRef(url);\n\tlet heartbeatPause;\n\tlet heartbeatResume;\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tlet bufferedData = [];\n\tlet retryTimeout;\n\tlet pongTimeoutWait;\n\tconst _sendBuffer = () => {\n\t\tif (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n\t\t\tfor (const buffer of bufferedData) wsRef.value.send(buffer);\n\t\t\tbufferedData = [];\n\t\t}\n\t};\n\tconst resetRetry = () => {\n\t\tif (retryTimeout != null) {\n\t\t\tclearTimeout(retryTimeout);\n\t\t\tretryTimeout = void 0;\n\t\t}\n\t};\n\tconst resetHeartbeat = () => {\n\t\tclearTimeout(pongTimeoutWait);\n\t\tpongTimeoutWait = void 0;\n\t};\n\tconst close = (code = 1e3, reason) => {\n\t\tresetRetry();\n\t\tif (!isClient && !isWorker || !wsRef.value) return;\n\t\texplicitlyClosed = true;\n\t\tresetHeartbeat();\n\t\theartbeatPause === null || heartbeatPause === void 0 || heartbeatPause();\n\t\twsRef.value.close(code, reason);\n\t\twsRef.value = void 0;\n\t};\n\tconst send = (data$1, useBuffer = true) => {\n\t\tif (!wsRef.value || status.value !== \"OPEN\") {\n\t\t\tif (useBuffer) bufferedData.push(data$1);\n\t\t\treturn false;\n\t\t}\n\t\t_sendBuffer();\n\t\twsRef.value.send(data$1);\n\t\treturn true;\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst ws = new WebSocket(urlRef.value, protocols);\n\t\twsRef.value = ws;\n\t\tstatus.value = \"CONNECTING\";\n\t\tws.onopen = () => {\n\t\t\tstatus.value = \"OPEN\";\n\t\t\tretried = 0;\n\t\t\tonConnected === null || onConnected === void 0 || onConnected(ws);\n\t\t\theartbeatResume === null || heartbeatResume === void 0 || heartbeatResume();\n\t\t\t_sendBuffer();\n\t\t};\n\t\tws.onclose = (ev) => {\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\tresetHeartbeat();\n\t\t\theartbeatPause === null || heartbeatPause === void 0 || heartbeatPause();\n\t\t\tonDisconnected === null || onDisconnected === void 0 || onDisconnected(ws, ev);\n\t\t\tif (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions(options.autoReconnect);\n\t\t\t\tif ((typeof retries === \"function\" ? retries : () => typeof retries === \"number\" && (retries < 0 || retried < retries))(retried)) {\n\t\t\t\t\tretried += 1;\n\t\t\t\t\tretryTimeout = setTimeout(_init, delay);\n\t\t\t\t} else onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tws.onerror = (e) => {\n\t\t\tonError === null || onError === void 0 || onError(ws, e);\n\t\t};\n\t\tws.onmessage = (e) => {\n\t\t\tif (options.heartbeat) {\n\t\t\t\tresetHeartbeat();\n\t\t\t\tconst { message = DEFAULT_PING_MESSAGE, responseMessage = message } = resolveNestedOptions(options.heartbeat);\n\t\t\t\tif (e.data === toValue(responseMessage)) return;\n\t\t\t}\n\t\t\tdata.value = e.data;\n\t\t\tonMessage === null || onMessage === void 0 || onMessage(ws, e);\n\t\t};\n\t};\n\tif (options.heartbeat) {\n\t\tconst { message = DEFAULT_PING_MESSAGE, interval = 1e3, pongTimeout = 1e3 } = resolveNestedOptions(options.heartbeat);\n\t\tconst { pause, resume } = useIntervalFn(() => {\n\t\t\tsend(toValue(message), false);\n\t\t\tif (pongTimeoutWait != null) return;\n\t\t\tpongTimeoutWait = setTimeout(() => {\n\t\t\t\tclose();\n\t\t\t\texplicitlyClosed = false;\n\t\t\t}, pongTimeout);\n\t\t}, interval, { immediate: false });\n\t\theartbeatPause = pause;\n\t\theartbeatResume = resume;\n\t}\n\tif (autoClose) {\n\t\tif (isClient) useEventListener(\"beforeunload\", () => close(), { passive: true });\n\t\ttryOnScopeDispose(close);\n\t}\n\tconst open = () => {\n\t\tif (!isClient && !isWorker) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\treturn {\n\t\tdata,\n\t\tstatus,\n\t\tclose,\n\t\tsend,\n\t\topen,\n\t\tws: wsRef\n\t};\n}\n\n//#endregion\n//#region useWebWorker/index.ts\nfunction useWebWorker(arg0, workerOptions, options) {\n\tconst { window: window$1 = defaultWindow } = options !== null && options !== void 0 ? options : {};\n\tconst data = ref(null);\n\tconst worker = shallowRef();\n\tconst post = (...args) => {\n\t\tif (!worker.value) return;\n\t\tworker.value.postMessage(...args);\n\t};\n\tconst terminate = function terminate$1() {\n\t\tif (!worker.value) return;\n\t\tworker.value.terminate();\n\t};\n\tif (window$1) {\n\t\tif (typeof arg0 === \"string\") worker.value = new Worker(arg0, workerOptions);\n\t\telse if (typeof arg0 === \"function\") worker.value = arg0();\n\t\telse worker.value = arg0;\n\t\tworker.value.onmessage = (e) => {\n\t\t\tdata.value = e.data;\n\t\t};\n\t\ttryOnScopeDispose(() => {\n\t\t\tif (worker.value) worker.value.terminate();\n\t\t});\n\t}\n\treturn {\n\t\tdata,\n\t\tpost,\n\t\tterminate,\n\t\tworker\n\t};\n}\n\n//#endregion\n//#region useWebWorkerFn/lib/depsParser.ts\n/**\n*\n* Concatenates the dependencies into a comma separated string.\n* this string will then be passed as an argument to the \"importScripts\" function\n*\n* @param deps array of string\n* @param localDeps array of function\n* @returns a string composed by the concatenation of the array\n* elements \"deps\" and \"importScripts\".\n*\n* @example\n* depsParser(['demo1', 'demo2']) // return importScripts('demo1', 'demo2')\n*/\nfunction depsParser(deps, localDeps) {\n\tif (deps.length === 0 && localDeps.length === 0) return \"\";\n\tconst depsString = deps.map((dep) => `'${dep}'`).toString();\n\tconst depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n\t\tconst str = fn.toString();\n\t\tif (str.trim().startsWith(\"function\")) return str;\n\t\telse return `const ${fn.name} = ${str}`;\n\t}).join(\";\");\n\tconst importString = `importScripts(${depsString});`;\n\treturn `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\nvar depsParser_default = depsParser;\n\n//#endregion\n//#region useWebWorkerFn/lib/jobRunner.ts\n/**\n* This function accepts as a parameter a function \"userFunc\"\n* And as a result returns an anonymous function.\n* This anonymous function, accepts as arguments,\n* the parameters to pass to the function \"useArgs\" and returns a Promise\n* This function can be used as a wrapper, only inside a Worker\n* because it depends by \"postMessage\".\n*\n* @param userFunc {Function} fn the function to run with web worker\n*\n* @returns returns a function that accepts the parameters\n* to be passed to the \"userFunc\" function\n*/\nfunction jobRunner(userFunc) {\n\treturn (e) => {\n\t\tconst userFuncArgs = e.data[0];\n\t\treturn Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n\t\t\tpostMessage([\"SUCCESS\", result]);\n\t\t}).catch((error) => {\n\t\t\tpostMessage([\"ERROR\", error]);\n\t\t});\n\t};\n}\nvar jobRunner_default = jobRunner;\n\n//#endregion\n//#region useWebWorkerFn/lib/createWorkerBlobUrl.ts\n/**\n* Converts the \"fn\" function into the syntax needed to be executed within a web worker\n*\n* @param fn the function to run with web worker\n* @param deps array of strings, imported into the worker through \"importScripts\"\n* @param localDeps array of function, local dependencies\n*\n* @returns a blob url, containing the code of \"fn\" as a string\n*\n* @example\n* createWorkerBlobUrl((a,b) => a+b, [])\n* // return \"onmessage=return Promise.resolve((a,b) => a + b)\n* .then(postMessage(['SUCCESS', result]))\n* .catch(postMessage(['ERROR', error])\"\n*/\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n\tconst blobCode = `${depsParser_default(deps, localDeps)}; onmessage=(${jobRunner_default})(${fn})`;\n\tconst blob = new Blob([blobCode], { type: \"text/javascript\" });\n\treturn URL.createObjectURL(blob);\n}\nvar createWorkerBlobUrl_default = createWorkerBlobUrl;\n\n//#endregion\n//#region useWebWorkerFn/index.ts\n/**\n* Run expensive function without blocking the UI, using a simple syntax that makes use of Promise.\n*\n* @see https://vueuse.org/useWebWorkerFn\n* @param fn\n* @param options\n*/\nfunction useWebWorkerFn(fn, options = {}) {\n\tconst { dependencies = [], localDependencies = [], timeout, window: window$1 = defaultWindow } = options;\n\tconst worker = ref();\n\tconst workerStatus = shallowRef(\"PENDING\");\n\tconst promise = ref({});\n\tconst timeoutId = shallowRef();\n\tconst workerTerminate = (status = \"PENDING\") => {\n\t\tif (worker.value && worker.value._url && window$1) {\n\t\t\tworker.value.terminate();\n\t\t\tURL.revokeObjectURL(worker.value._url);\n\t\t\tpromise.value = {};\n\t\t\tworker.value = void 0;\n\t\t\twindow$1.clearTimeout(timeoutId.value);\n\t\t\tworkerStatus.value = status;\n\t\t}\n\t};\n\tworkerTerminate();\n\ttryOnScopeDispose(workerTerminate);\n\tconst generateWorker = () => {\n\t\tconst blobUrl = createWorkerBlobUrl_default(fn, dependencies, localDependencies);\n\t\tconst newWorker = new Worker(blobUrl);\n\t\tnewWorker._url = blobUrl;\n\t\tnewWorker.onmessage = (e) => {\n\t\t\tconst { resolve = () => {}, reject = () => {} } = promise.value;\n\t\t\tconst [status, result] = e.data;\n\t\t\tswitch (status) {\n\t\t\t\tcase \"SUCCESS\":\n\t\t\t\t\tresolve(result);\n\t\t\t\t\tworkerTerminate(status);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treject(result);\n\t\t\t\t\tworkerTerminate(\"ERROR\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tnewWorker.onerror = (e) => {\n\t\t\tconst { reject = () => {} } = promise.value;\n\t\t\te.preventDefault();\n\t\t\treject(e);\n\t\t\tworkerTerminate(\"ERROR\");\n\t\t};\n\t\tif (timeout) timeoutId.value = setTimeout(() => workerTerminate(\"TIMEOUT_EXPIRED\"), timeout);\n\t\treturn newWorker;\n\t};\n\tconst callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n\t\tvar _worker$value;\n\t\tpromise.value = {\n\t\t\tresolve,\n\t\t\treject\n\t\t};\n\t\t(_worker$value = worker.value) === null || _worker$value === void 0 || _worker$value.postMessage([[...fnArgs]]);\n\t\tworkerStatus.value = \"RUNNING\";\n\t});\n\tconst workerFn = (...fnArgs) => {\n\t\tif (workerStatus.value === \"RUNNING\") {\n\t\t\tconsole.error(\"[useWebWorkerFn] You can only run one instance of the worker at a time.\");\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tworker.value = generateWorker();\n\t\treturn callWorker(...fnArgs);\n\t};\n\treturn {\n\t\tworkerFn,\n\t\tworkerStatus,\n\t\tworkerTerminate\n\t};\n}\n\n//#endregion\n//#region useWindowFocus/index.ts\n/**\n* Reactively track window focus with `window.onfocus` and `window.onblur`.\n*\n* @see https://vueuse.org/useWindowFocus\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWindowFocus(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tif (!window$1) return shallowRef(false);\n\tconst focused = shallowRef(window$1.document.hasFocus());\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(window$1, \"blur\", () => {\n\t\tfocused.value = false;\n\t}, listenerOptions);\n\tuseEventListener(window$1, \"focus\", () => {\n\t\tfocused.value = true;\n\t}, listenerOptions);\n\treturn focused;\n}\n\n//#endregion\n//#region useWindowScroll/index.ts\n/**\n* Reactive window scroll.\n*\n* @see https://vueuse.org/useWindowScroll\n* @param options\n*/\nfunction useWindowScroll(options = {}) {\n\tconst { window: window$1 = defaultWindow,...rest } = options;\n\treturn useScroll(window$1, rest);\n}\n\n//#endregion\n//#region useWindowSize/index.ts\n/**\n* Reactive window size.\n*\n* @see https://vueuse.org/useWindowSize\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWindowSize(options = {}) {\n\tconst { window: window$1 = defaultWindow, initialWidth = Number.POSITIVE_INFINITY, initialHeight = Number.POSITIVE_INFINITY, listenOrientation = true, includeScrollbar = true, type = \"inner\" } = options;\n\tconst width = shallowRef(initialWidth);\n\tconst height = shallowRef(initialHeight);\n\tconst update = () => {\n\t\tif (window$1) if (type === \"outer\") {\n\t\t\twidth.value = window$1.outerWidth;\n\t\t\theight.value = window$1.outerHeight;\n\t\t} else if (type === \"visual\" && window$1.visualViewport) {\n\t\t\tconst { width: visualViewportWidth, height: visualViewportHeight, scale } = window$1.visualViewport;\n\t\t\twidth.value = Math.round(visualViewportWidth * scale);\n\t\t\theight.value = Math.round(visualViewportHeight * scale);\n\t\t} else if (includeScrollbar) {\n\t\t\twidth.value = window$1.innerWidth;\n\t\t\theight.value = window$1.innerHeight;\n\t\t} else {\n\t\t\twidth.value = window$1.document.documentElement.clientWidth;\n\t\t\theight.value = window$1.document.documentElement.clientHeight;\n\t\t}\n\t};\n\tupdate();\n\ttryOnMounted(update);\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"resize\", update, listenerOptions);\n\tif (window$1 && type === \"visual\" && window$1.visualViewport) useEventListener(window$1.visualViewport, \"resize\", update, listenerOptions);\n\tif (listenOrientation) watch(useMediaQuery(\"(orientation: portrait)\"), () => update());\n\treturn {\n\t\twidth,\n\t\theight\n\t};\n}\n\n//#endregion\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, formatTimeAgoIntl, formatTimeAgoIntlParts, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onElementRemoval, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, provideSSRWidth, setSSRHandler, templateRef, transition, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCountdown, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePreferredReducedTransparency, usePrevious, useRafFn, useRefHistory, useResizeObserver, useSSRWidth, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeAgoIntl, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };","<script lang=\"ts\" setup>\nimport { computed, nextTick, ref, watch } from 'vue'\nimport { TransitionPresets, useTransition } from '@vueuse/core'\nimport { useNamespace } from '../../composable'\nimport type { BasicCountToProps } from './interface'\n\nconst props = withDefaults(defineProps<BasicCountToProps>(), {\n startValue: 0,\n endValue: 2021,\n duration: 1500,\n autoplay: true,\n decimals: 0,\n prefix: '',\n suffix: '',\n separator: ',',\n decimal: '.',\n useEasing: true,\n transition: 'linear'\n})\n\nconst { b } = useNamespace('basic-count-to')\n\nconst source = ref(props.startValue)\n\nconst transition = computed(() => (props.useEasing ? TransitionPresets[props.transition] : undefined))\n\nconst outputValue = useTransition(source, {\n disabled: false,\n duration: props.duration,\n transition: transition.value\n})\n\nconst value = computed(() => formatValue(outputValue.value))\n\nfunction formatValue(num: number) {\n const { decimals, decimal, separator, suffix, prefix } = props\n\n let number = num.toFixed(decimals)\n number = String(number)\n\n const x = number.split('.')\n let x1 = x[0]\n const x2 = x.length > 1 ? decimal + x[1] : ''\n const rgx = /(\\d+)(\\d{3})/\n if (separator) {\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, `$1${separator}$2`)\n }\n }\n\n return prefix + x1 + x2 + suffix\n}\n\nasync function start() {\n await nextTick()\n source.value = props.endValue\n}\n\nwatch(\n [() => props.startValue, () => props.endValue],\n () => {\n if (props.autoplay) {\n start()\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"b()\">{{ value }}</div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicCountTo from './BasicCountTo.vue'\n\nexport const XBasicCountTo: SFCWithInstall<typeof BasicCountTo> = withInstall(BasicCountTo)\nexport type BasicCountToInstance = InstanceType<typeof BasicCountTo>\n\nexport default XBasicCountTo\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { isArray, isNull, isUndefined } from '@maxax/utils'\nimport { format } from 'date-fns'\nimport { NDatePicker } from 'naive-ui'\nimport { useNamespace } from '../../composable'\nimport type { BasicDatePickerProps } from './interface'\n\ninterface Emits {\n (_e: 'update:value', _value: string | [string, string] | null): void\n (_e: 'change', _value: string | [string, string] | null): void\n (_e: 'input', _value: string | [string, string] | null): void\n}\n\nconst props = withDefaults(defineProps<BasicDatePickerProps>(), {\n disabled: false,\n defaultValue: null,\n value: null,\n valueFormat: 'yyyy-MM-dd HH:mm:ss',\n pickerProps: () => ({ type: 'date' })\n})\n\nconst emit = defineEmits<Emits>()\n\nconst { b } = useNamespace('basic-date-picker')\n\nconst $value = ref(getDateValue(props.defaultValue, props.valueFormat))\nconst computedValue = computed(() => getDateValue(props.value, props.valueFormat) ?? $value.value)\n\nwatch(\n () => props.value,\n value => {\n $value.value = getDateValue(value, props.valueFormat)\n },\n { immediate: true }\n)\n\nfunction isEmptyDate(value: string | null | undefined) {\n return isNull(value) || value === '' || isUndefined(value)\n}\n\nfunction formatDate(value: string | null | undefined, valueFormat: string) {\n if (isEmptyDate(value)) return null\n return format(value, valueFormat)\n}\n\nfunction getDateValue(value: string | [string, string] | null, valueFormat: string) {\n if (isArray(value)) {\n if (isEmptyDate(value[0]) || isEmptyDate(value[1])) {\n return null\n }\n return value.map(item => formatDate(item, valueFormat)) as [string, string]\n }\n return formatDate(value, valueFormat)\n}\n\nfunction handleInput(value: string) {\n emit('input', value)\n emit('update:value', value)\n emit('change', value)\n}\n</script>\n\n<template>\n <NDatePicker v-model:formatted-value=\"computedValue\" :class=\"b()\" v-bind=\"pickerProps\" :on-update:formatted-value=\"handleInput\" :disabled=\"disabled\" :value-format=\"valueFormat\" />\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicDatePicker from './BasicDatePicker.vue'\n\nexport const XBasicDatePicker: SFCWithInstall<typeof BasicDatePicker> = withInstall(BasicDatePicker)\nexport type BasicDatePickerInstance = InstanceType<typeof BasicDatePicker>\n\nexport default XBasicDatePicker\n\nexport * from './interface'\n","import type { ExtractPropTypes, PropType } from 'vue'\n\nexport const basicDragVerifyProps = {\n value: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n\n isSlot: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n\n text: {\n type: [String] as PropType<string>,\n default: ''\n },\n successText: {\n type: [String] as PropType<string>,\n default: ''\n },\n height: {\n type: Number as PropType<number>,\n default: 40\n },\n\n width: {\n type: Number as PropType<number>,\n default: 220\n },\n\n circle: {\n type: Boolean as PropType<boolean>,\n default: false\n },\n\n wrapStyle: {\n type: Object as PropType<any>,\n default: () => ({})\n },\n contentStyle: {\n type: Object as PropType<any>,\n default: () => ({})\n },\n barStyle: {\n type: Object as PropType<any>,\n default: () => ({})\n },\n actionStyle: {\n type: Object as PropType<any>,\n default: () => ({})\n }\n}\n\nexport type BasicDragVerifyProps = ExtractPropTypes<typeof basicDragVerifyProps>\n\nexport interface BasicDragVerifyContext {\n name: string\n}\n","<script lang=\"tsx\">\nimport type { Ref } from 'vue'\nimport { computed, defineComponent, reactive, ref, unref, watch, watchEffect } from 'vue'\nimport { useTimeoutFn } from '@vueuse/core'\nimport { useEventListener } from '@maxax/hooks'\nimport { getSlot } from '@maxax/utils'\nimport { useLocale, useNamespace } from '../../composable'\nimport XBasicSvgIcon from '../basic-svg-icon'\nimport { basicDragVerifyProps } from './interface'\n\nexport default defineComponent({\n name: 'BasicDragVerify',\n props: basicDragVerifyProps,\n emits: ['success', 'update:value', 'change', 'start', 'move', 'end'],\n setup(props, { emit, slots, expose }) {\n const { b, e } = useNamespace('basic-drag-verify')\n\n const { t } = useLocale()\n\n const state = reactive({\n isMoving: false,\n isPassing: false,\n moveDistance: 0,\n toLeft: false,\n startTime: 0,\n endTime: 0\n })\n\n const wrapElRef = ref<HTMLDivElement | null>(null)\n const barElRef = ref<HTMLDivElement | null>(null)\n const contentElRef = ref<HTMLDivElement | null>(null)\n const actionElRef = ref(null) as Ref<HTMLDivElement | null>\n\n useEventListener({\n el: document,\n name: 'mouseup',\n listener: () => {\n if (state.isMoving) {\n resume()\n }\n }\n })\n\n const getActionStyleRef = computed(() => {\n const { height, actionStyle } = props\n return {\n left: 0,\n width: `${height}px`,\n height: `${height}px`,\n ...actionStyle\n }\n })\n\n const getWrapStyleRef = computed(() => {\n const { height, width, circle, wrapStyle } = props\n return {\n width: `${width}px`,\n height: `${height}px`,\n lineHeight: `${height}px`,\n borderRadius: circle ? `${height / 2}px` : 0,\n ...wrapStyle\n }\n })\n\n const getBarStyleRef = computed(() => {\n const { height, circle, barStyle } = props\n return {\n height: `${height}px`,\n borderRadius: circle ? `${height / 2}px 0 0 ${height / 2}px` : 0,\n ...barStyle\n }\n })\n\n const getContentStyleRef = computed(() => {\n const { height, width, contentStyle } = props\n\n return {\n height: `${height}px`,\n width: `${width}px`,\n ...contentStyle\n }\n })\n\n const textRef = computed(() => {\n return props.text || t('max.dragVerify.text')\n })\n\n const successTextRef = computed(() => {\n return props.successText || t('max.dragVerify.successText')\n })\n\n watch(\n () => state.isPassing,\n isPassing => {\n if (isPassing) {\n const { startTime, endTime } = state\n const time = (endTime - startTime) / 1000\n emit('success', { isPassing, time: time.toFixed(1) })\n emit('update:value', isPassing)\n emit('change', isPassing)\n }\n }\n )\n\n watchEffect(() => {\n state.isPassing = Boolean(props.value)\n })\n\n function getEventPageX(event: MouseEvent | TouchEvent) {\n return (event as MouseEvent).pageX || (event as TouchEvent).touches[0].pageX\n }\n\n function handleDragStart(event: MouseEvent | TouchEvent) {\n if (state.isPassing) {\n return\n }\n const actionEl = unref(actionElRef)\n if (!actionEl) return\n emit('start', event)\n state.moveDistance = getEventPageX(event) - parseInt(actionEl.style.left.replace('px', ''), 10)\n state.startTime = new Date().getTime()\n state.isMoving = true\n }\n\n function getOffset(el: HTMLDivElement) {\n const actionWidth = parseInt(el.style.width, 10)\n const { width } = props\n const offset = width - actionWidth - 6\n return { offset, width, actionWidth }\n }\n\n function handleDragMoving(event: MouseEvent | TouchEvent) {\n const { isMoving, moveDistance } = state\n if (isMoving) {\n const actionEl = unref(actionElRef)\n const barEl = unref(barElRef)\n if (!actionEl || !barEl) return\n const { offset, width, actionWidth } = getOffset(actionEl)\n const moveX = getEventPageX(event) - moveDistance\n\n emit('move', {\n event,\n moveDistance,\n moveX\n })\n if (moveX > 0 && moveX <= offset) {\n actionEl.style.left = `${moveX}px`\n barEl.style.width = `${moveX + actionWidth / 2}px`\n } else if (moveX > offset) {\n actionEl.style.left = `${width - actionWidth}px`\n barEl.style.width = `${width - actionWidth / 2}px`\n if (!props.isSlot) {\n checkPass()\n }\n }\n }\n }\n\n function handleDragOver(event: MouseEvent | TouchEvent) {\n const { isMoving, isPassing, moveDistance } = state\n if (isMoving && !isPassing) {\n emit('end', event)\n const actionEl = unref(actionElRef)\n const barEl = unref(barElRef)\n if (!actionEl || !barEl) return\n const moveX = getEventPageX(event) - moveDistance\n const { offset, width, actionWidth } = getOffset(actionEl)\n if (moveX < offset) {\n if (!props.isSlot) {\n resume()\n } else {\n setTimeout(() => {\n if (!props.value) {\n resume()\n } else {\n const contentEl = unref(contentElRef)\n if (contentEl) {\n contentEl.style.width = `${parseInt(barEl.style.width, 10)}px`\n }\n }\n }, 0)\n }\n } else {\n actionEl.style.left = `${width - actionWidth}px`\n barEl.style.width = `${width - actionWidth / 2}px`\n checkPass()\n }\n state.isMoving = false\n }\n }\n\n function checkPass() {\n if (props.isSlot) {\n resume()\n return\n }\n state.endTime = new Date().getTime()\n state.isPassing = true\n state.isMoving = false\n }\n\n function resume() {\n state.isMoving = false\n state.isPassing = false\n state.moveDistance = 0\n state.toLeft = false\n state.startTime = 0\n state.endTime = 0\n const actionEl = unref(actionElRef)\n const barEl = unref(barElRef)\n const contentEl = unref(contentElRef)\n if (!actionEl || !barEl || !contentEl) return\n state.toLeft = true\n useTimeoutFn(() => {\n state.toLeft = false\n actionEl.style.left = '0'\n barEl.style.width = '0'\n // The time is consistent with the animation time\n }, 300)\n contentEl.style.width = unref(getContentStyleRef).width\n }\n\n expose({\n resume\n })\n\n return () => {\n const renderBar = () => {\n const cls = [`${e('bar')}`]\n if (state.toLeft) {\n cls.push('to-left')\n }\n return <div class={cls} ref={barElRef} style={unref(getBarStyleRef)} />\n }\n\n const renderContent = () => {\n const cls = [`${e('content')}`]\n const { isPassing } = state\n\n isPassing && cls.push('success')\n\n return (\n <div class={cls} ref={contentElRef} style={unref(getContentStyleRef)}>\n {getSlot(slots, 'text', isPassing) || (isPassing ? successTextRef.value : textRef.value)}\n </div>\n )\n }\n\n const renderAction = () => {\n const cls = [`${e('action')}`]\n const { toLeft, isPassing } = state\n if (toLeft) {\n cls.push('to-left')\n }\n return (\n <div class={cls} onMousedown={handleDragStart} onTouchstart={handleDragStart} style={unref(getActionStyleRef)} ref={actionElRef}>\n {getSlot(slots, 'actionIcon', isPassing) ||\n (isPassing ? (\n <span class={'darg-verify-action__icon'}>\n <XBasicSvgIcon icon='ri:check-line' />\n </span>\n ) : (\n <span class={'darg-verify-action__icon'}>\n <XBasicSvgIcon icon='ri:arrow-right-double-fill' />\n </span>\n ))}\n </div>\n )\n }\n\n return (\n <div class={b()} ref={wrapElRef} style={unref(getWrapStyleRef)} onMousemove={handleDragMoving} onTouchmove={handleDragMoving} onMouseleave={handleDragOver} onMouseup={handleDragOver} onTouchend={handleDragOver}>\n {renderBar()}\n {renderContent()}\n {renderAction()}\n </div>\n )\n }\n }\n})\n</script>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicDragVerify from './BasicDragVerify.vue'\n\nexport const XBasicDragVerify: SFCWithInstall<typeof BasicDragVerify> = withInstall(BasicDragVerify)\nexport type BasicDragVerifyInstance = InstanceType<typeof BasicDragVerify>\n\nexport default XBasicDragVerify\n\nexport * from './interface'\n","import type { ExtractPropTypes, PropType, VNodeChild } from 'vue'\n\nexport const basicHelpProps = {\n /**\n * Whether to display the serial number\n * @default: false\n */\n showIndex: { type: Boolean },\n /**\n * Text content\n * @default: ''\n */\n text: {\n type: [Array, String, Object] as PropType<string[] | string | VNodeChild>,\n default: ''\n }\n}\n\nexport type BasicHelpProps = ExtractPropTypes<typeof basicHelpProps>\n\nexport interface BasicHelpContext {\n name: string\n}\n","<!-- eslint-disable vue/no-undef-properties -->\n<script lang=\"tsx\">\nimport { defineComponent } from 'vue'\nimport { getSlot, isArray, isString } from '@maxax/utils'\nimport { NTooltip } from 'naive-ui'\nimport { useNamespace } from '../../composable'\nimport { XBasicSvgIcon } from '../basic-svg-icon'\nimport { basicHelpProps } from './interface'\n\nexport default defineComponent({\n name: 'BasicHelp',\n components: {\n XBasicSvgIcon\n },\n props: basicHelpProps,\n setup(props, { slots }) {\n const { b, e } = useNamespace('basic-help')\n\n const renderTrigger = () => {\n return <span class={b('trigger')}>{getSlot(slots, 'default') || <XBasicSvgIcon icon='ri:information-line'></XBasicSvgIcon>}</span>\n }\n\n const renderDefault = () => {\n const textList = props.text\n\n if (isString(textList)) {\n return <p class={e('tooltip-text')}>{textList}</p>\n }\n if (isArray(textList)) {\n return textList.map((text, index) => {\n return (\n <p class={e('tooltip-text-item')}>\n {props.showIndex ? `${index + 1}. ` : ''}\n {text}\n </p>\n )\n })\n }\n return <div class={e('tooltip-text')}>{textList}</div>\n }\n\n return () => <NTooltip class={b()}>{{ trigger: renderTrigger, default: renderDefault }}</NTooltip>\n }\n})\n</script>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicHelp from './BasicHelp.vue'\n\nexport const XBasicHelp: SFCWithInstall<typeof BasicHelp> = withInstall(BasicHelp)\nexport type BasicHelpInstance = InstanceType<typeof BasicHelp>\n\nexport default XBasicHelp\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { computed, useSlots } from 'vue'\nimport { useNamespace } from '../../composable'\nimport { XBasicHelp } from '../basic-help'\nimport type { BasicTitleProps } from './interface'\n\nconst props = defineProps<BasicTitleProps>()\n\nconst { b, e, m } = useNamespace('basic-title')\n\nconst slots = useSlots()\n\nconst getBasicTitleClass = computed(() => [\n b(),\n {\n [`${m('show-span')}`]: props.span && slots.default,\n [`${m('normal')}`]: props.normal,\n [`${m(`level-${props.level}`)}`]: props.level,\n [`${m(`${props.type}`)}`]: props.type,\n [`${m(`${props.size}`)}`]: props.size\n }\n])\n</script>\n\n<template>\n <span :class=\"getBasicTitleClass\">\n <span v-if=\"dot\" :class=\"e('dot')\" />\n <slot />\n <XBasicHelp v-if=\"helpMessage\" :class=\"e('help')\" :text=\"helpMessage\" />\n </span>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicTitle from './BasicTitle.vue'\n\nexport const XBasicTitle: SFCWithInstall<typeof BasicTitle> = withInstall(BasicTitle)\nexport type BasicTitleInstance = InstanceType<typeof BasicTitle>\n\nexport default XBasicTitle\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { computed, ref, unref, useAttrs, watch } from 'vue'\nimport { isFunction } from '@maxax/utils'\nimport { NDrawer, NDrawerContent } from 'naive-ui'\nimport { useLocale, useNamespace } from '../../composable'\nimport { XBasicButton } from '../basic-button'\nimport { XBasicTitle } from '../basic-title'\nimport type { BasicDrawerEmits, BasicDrawerProps } from './interface'\n\nconst props = withDefaults(defineProps<BasicDrawerProps>(), {\n show: false,\n autoFocus: true,\n blockScroll: true,\n closeOnEsc: true,\n defaultWidth: '300px',\n defaultHeight: '300px',\n displayDirective: 'if',\n maskClosable: true,\n showMask: true,\n nativeScrollbar: true,\n trapFocus: true,\n resizable: false,\n placement: 'right',\n showCancelBtn: true,\n showConfirmBtn: true,\n showFooter: true,\n loading: false,\n blurOnConfirm: false\n})\n\nconst emit = defineEmits<BasicDrawerEmits>()\n\nconst { b } = useNamespace('basic-drawer')\n\nconst { t } = useLocale()\n\nconst attrs = useAttrs()\n\nconst visibleRef = ref(false)\n\nconst getBindValues = computed(() => {\n return {\n ...attrs,\n ...unref(props)\n }\n})\n\nconst positiveText = computed(() => {\n return props.positiveText || t('max.button.confirm')\n})\n\nconst negativeText = computed(() => {\n return props.negativeText || t('max.button.cancel')\n})\n\nasync function onPositiveClickHandler() {\n if (props.blurOnConfirm) {\n const inputs = document.querySelectorAll('.n-input__input-el') as NodeListOf<HTMLInputElement>\n inputs.forEach(input => input && input.blur())\n }\n emit('positiveClick')\n}\n\nasync function onNegativeClickHandler() {\n emit('negativeClick')\n const { onNegativeClick } = unref(getBindValues)\n if (onNegativeClick && isFunction(onNegativeClick)) {\n const res = await onNegativeClick()\n visibleRef.value = !res\n return\n }\n visibleRef.value = false\n}\n\nwatch(\n () => props.show,\n (newVal, oldVal) => {\n if (newVal !== oldVal) visibleRef.value = newVal\n },\n { immediate: true }\n)\n\nwatch(\n () => visibleRef.value,\n newVal => {\n emit('update:show', newVal)\n }\n)\n</script>\n\n<template>\n <NDrawer v-bind=\"getBindValues\" v-model:show=\"visibleRef\" :class=\"b()\">\n <NDrawerContent>\n <template v-if=\"!$slots.header\" #header>\n <XBasicTitle>\n {{ title ? title : '' }}\n </XBasicTitle>\n </template>\n <template v-else #header>\n <slot name=\"header\" />\n </template>\n\n <slot />\n\n <template v-if=\"!$slots.footer\" #footer>\n <div v-if=\"showFooter\" class=\"footer-wrapper\">\n <slot name=\"before-footer\" />\n <XBasicButton v-if=\"showCancelBtn\" @click=\"onNegativeClickHandler\"> {{ negativeText }} </XBasicButton>\n <XBasicButton v-if=\"showConfirmBtn\" type=\"primary\" class=\"ml-4\" @click=\"onPositiveClickHandler\"> {{ positiveText }} </XBasicButton>\n <slot name=\"after-footer\" />\n </div>\n </template>\n <template v-else #footer>\n <slot name=\"footer\" />\n </template>\n </NDrawerContent>\n </NDrawer>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicDrawer from './BasicDrawer.vue'\n\nexport const XBasicDrawer: SFCWithInstall<typeof BasicDrawer> = withInstall(BasicDrawer)\nexport type BasicDrawerInstance = InstanceType<typeof BasicDrawer>\n\nexport default XBasicDrawer\n\nexport * from './interface'\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { BasicEditBatchContext } from './interface'\n\nexport const basicEditBatchKey: InjectionKey<BasicEditBatchContext> = Symbol('basic-edit-batch')\n\nexport const createBasicEditBatchContext = (props: BasicEditBatchContext) => {\n return provide(basicEditBatchKey, props)\n}\n\nexport const useBasicEditBatchContext = () => {\n return inject(basicEditBatchKey) as BasicEditBatchContext\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { ButtonProps } from 'naive-ui'\nimport { NButton } from 'naive-ui'\nimport { useLocale, useNamespace } from '../../../composable'\nimport { useBasicEditBatchContext } from '../context'\n\ninterface Props {\n disabled?: boolean\n showResetButton?: boolean\n showSubmitButton?: boolean\n resetButtonOptions?: ButtonProps\n submitButtonOptions?: ButtonProps\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n disabled: false,\n showResetButton: true,\n showSubmitButton: true,\n resetButtonOptions: () => ({}),\n submitButtonOptions: () => ({})\n})\n\nconst { b, e } = useNamespace('basic-edit-batch-action')\n\nconst { t } = useLocale()\n\nconst { resetAction, submitAction } = useBasicEditBatchContext()\n\nconst getResetBtnOptions = computed((): ButtonProps => {\n const { resetButtonOptions } = props\n return {\n secondary: true,\n ...resetButtonOptions\n }\n})\n\nconst getSubmitBtnOptions = computed((): ButtonProps => {\n const { submitButtonOptions } = props\n return {\n ...submitButtonOptions\n }\n})\n</script>\n\n<template>\n <div :class=\"b()\" :disabled=\"disabled\">\n <slot name=\"resetBefore\" />\n <NButton v-if=\"showResetButton\" v-bind=\"getResetBtnOptions\" :class=\"e('reset-btn')\" @click=\"resetAction\"> {{ getResetBtnOptions.text || t('max.basic.reset') }}</NButton>\n <slot name=\"submitBefore\" />\n <NButton v-if=\"showSubmitButton\" type=\"primary\" v-bind=\"getSubmitBtnOptions\" :class=\"e('submit-btn')\" @click=\"submitAction\"> {{ getSubmitBtnOptions.text || t('max.button.confirm') }}</NButton>\n <slot name=\"submitAfter\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, toRef, useAttrs } from 'vue'\nimport { useMergedState } from '@maxax/hooks'\nimport { useNamespace } from '../../composable'\nimport type { BasicHiddenProps } from './interface'\n\nconst props = defineProps<BasicHiddenProps>()\n\nconst { b } = useNamespace('basic-hidden')\n\nconst attrs = useAttrs()\n\nconst uncontrolledValueRef = ref(props.defaultValue)\nconst controlledValueRef = toRef(props, 'value')\nconst mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef)\n\nconst basicHiddenClass = computed(() => {\n return { [b()]: true, ...(attrs.class || {}) }\n})\n</script>\n\n<template>\n <input v-model=\"mergedValueRef\" type=\"hidden\" :class=\"basicHiddenClass\" />\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicHidden from './BasicHidden.vue'\n\nexport const XBasicHidden: SFCWithInstall<typeof BasicHidden> = withInstall(BasicHidden)\nexport type BasicHiddenInstance = InstanceType<typeof BasicHidden>\n\nexport default XBasicHidden\n\nexport * from './interface'\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { BasicRadioGroupContext } from './interface'\n\nexport const basicRadioGroupKey: InjectionKey<BasicRadioGroupContext> = Symbol('basic-radio-group')\n\nexport const createBasicRadioGroupContext = (props: BasicRadioGroupContext) => {\n return provide(basicRadioGroupKey, props)\n}\n\nexport const useBasicRadioGroupContext = () => {\n return inject(basicRadioGroupKey) as BasicRadioGroupContext\n}\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { Size } from '../../types'\n\nexport const basicRadioProps = {\n size: {\n type: String as PropType<Size>,\n default: 'medium'\n },\n /**\n * @zh 绑定值\n * @en Value\n * @vModel\n */\n modelValue: {\n type: [String, Number, Boolean] as PropType<string | number | boolean>,\n default: undefined\n },\n /**\n * @zh 默认是否选中(非受控状态)\n * @en Whether checked by default (uncontrolled state)\n */\n defaultChecked: {\n type: Boolean,\n default: false\n },\n /**\n * @zh 选项的 `value`\n * @en The `value` of the option\n */\n value: {\n type: [String, Number, Boolean] as PropType<string | number | boolean>,\n default: true\n },\n /**\n * @zh 是否禁用\n * @en Whether to disable\n */\n disabled: {\n type: Boolean,\n default: false\n },\n // private\n uninjectGroupContext: {\n type: Boolean,\n default: false\n }\n}\n\nexport type BasicRadioProps = ExtractPropTypes<typeof basicRadioProps>\n\nexport interface BasicRadioContext {\n name: string\n}\n","import { computed, defineComponent, inject, nextTick, ref, toRefs, watch } from 'vue'\nimport { isNull, isUndefined } from '@maxax/utils'\nimport { useNamespace } from '../../composable'\nimport { basicRadioGroupKey } from '../basic-radio-group/context'\nimport { basicRadioProps } from './interface'\n\nexport default defineComponent({\n name: 'XBasicRadio',\n props: basicRadioProps,\n emits: {\n 'update:modelValue': (_value: string | number | boolean) => true,\n /**\n * @zh 值改变时触发\n * @en Trigger when the value changes\n * @param { string | number | boolean } _value\n * @param {Event} _ev\n */\n change: (_value: string | number | boolean, _ev: Event) => true\n },\n setup(props, { slots, emit }) {\n const { b, is, e, m } = useNamespace('basic-radio')\n\n const { disabled, modelValue } = toRefs(props)\n\n const radioRef = ref<HTMLInputElement>()\n const radioGroupCtx = !props.uninjectGroupContext ? inject(basicRadioGroupKey, undefined) : undefined\n\n const $checked = ref(props.defaultChecked)\n\n const isGroup = computed(() => radioGroupCtx?.name === 'XBasicRadioGroup')\n\n const mergedDisabled = computed(() => radioGroupCtx?.disabled || disabled.value)\n\n const computedChecked = computed(() => {\n if (isGroup.value) {\n return radioGroupCtx?.mergedValueRef === (props.value ?? true)\n }\n\n if (!isUndefined(props.modelValue)) {\n return props.modelValue === (props.value ?? true)\n }\n return $checked.value\n })\n\n watch(modelValue, value => {\n if (isUndefined(value) || isNull(value)) {\n $checked.value = false\n }\n })\n\n watch(computedChecked, (curValue, preValue) => {\n if (curValue !== preValue) {\n $checked.value = curValue\n if (radioRef.value) {\n radioRef.value.checked = curValue\n }\n }\n })\n\n const handleClick = (ev: Event) => {\n ev.stopPropagation()\n }\n\n const handleChange = (ev: Event) => {\n $checked.value = true\n if (isGroup.value) {\n radioGroupCtx?.handleChange(props.value ?? true, ev)\n } else {\n emit('update:modelValue', props.value ?? true)\n emit('change', props.value ?? true, ev)\n }\n\n nextTick(() => {\n if (radioRef.value && radioRef.value.checked !== computedChecked.value) {\n radioRef.value.checked = computedChecked.value\n }\n })\n }\n\n const cls = computed(() => [\n b(),\n m(props.size),\n {\n [is('checked')]: computedChecked.value,\n [is('disabled')]: mergedDisabled.value\n }\n ])\n\n const labelHoverRender = () => {\n return (\n <span class={[e('icon-hover'), { [is('disabled')]: mergedDisabled.value || computedChecked.value }]}>\n <span class={e('icon')}></span>\n </span>\n )\n }\n\n return () => {\n return (\n <label aria-disabled={mergedDisabled.value} class={cls.value}>\n <input ref={radioRef} type='radio' checked={computedChecked.value} value={props.value} class={e('target')} disabled={mergedDisabled.value} onClick={handleClick} onChange={handleChange} />\n {(slots.radio ?? radioGroupCtx?.slots?.radio)?.({\n checked: computedChecked.value,\n disabled: mergedDisabled.value\n }) ?? labelHoverRender()}\n {slots.default && <span class={e('label')}>{slots.default()}</span>}\n </label>\n )\n }\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicRadio from './BasicRadio'\n\nexport const XBasicRadio: SFCWithInstall<typeof BasicRadio> = withInstall(BasicRadio)\nexport type BasicRadioInstance = InstanceType<typeof BasicRadio>\n\nexport default XBasicRadio\n\nexport * from './interface'\n","import type { ExtractPropTypes, PropType, Slots } from 'vue'\nimport type { MaybeArray, RenderContent, Size } from '../../types'\n\nexport interface BasicRadioOption {\n /**\n * @zh 文案\n * @en label content\n */\n label?: RenderContent\n /**\n * @zh 选项的 `value`\n * @en The `value` of the option\n */\n value: string | number | boolean\n /**\n * @zh 是否禁用\n * @en Whether to disable\n */\n disabled?: boolean\n /**\n * @zh 图标\n * @en Icon\n */\n extra?: any\n}\n\nexport type OnUpdateValue = (value: string & number & boolean) => void\n\nexport type OnUpdateValueImpl = (value: string | number | boolean) => void\n\nexport type OnEventValueImpl = MaybeArray<OnUpdateValue>\n\nexport const basicRadioGroupProps = {\n size: {\n type: String as PropType<Size>,\n default: 'small'\n },\n value: {\n type: [String, Number, Boolean] as PropType<string | number | boolean>,\n default: undefined\n },\n defaultValue: {\n type: [String, Number, Boolean] as PropType<string | number | boolean>,\n default: undefined\n },\n disabled: {\n type: Boolean,\n default: false\n },\n options: {\n type: Array as PropType<Array<string | number | BasicRadioOption>>,\n default: () => []\n },\n 'onUpdate:value': {\n type: Function as PropType<OnUpdateValue>,\n default: undefined\n },\n onUpdateValue: {\n type: Function as PropType<OnUpdateValue>,\n default: undefined\n },\n onChange: {\n type: Function as PropType<OnUpdateValue>,\n default: undefined\n }\n}\n\nexport type BasicRadioGroupProps = Partial<ExtractPropTypes<typeof basicRadioGroupProps>>\n\nexport interface BasicRadioGroupContext {\n name: string\n mergedValueRef: string | number | boolean | undefined\n disabled: boolean\n slots: Slots\n handleChange: (value: string | number | boolean, e: Event) => void\n}\n","import { computed, defineComponent, reactive, ref, toRef, toRefs } from 'vue'\nimport { useMergedState } from '@maxax/hooks'\nimport { call, isFunction, isNumber, isString } from '@maxax/utils'\nimport { useNamespace } from '../../composable'\nimport { XBasicRadio } from '../basic-radio'\nimport { createBasicRadioGroupContext } from './context'\nimport type { BasicRadioOption, OnUpdateValueImpl } from './interface'\nimport { basicRadioGroupProps } from './interface'\n\nexport default defineComponent({\n name: 'XBasicRadioGroup',\n props: basicRadioGroupProps,\n setup(props, { slots }) {\n const { b, m } = useNamespace('basic-radio-group')\n\n const uncontrolledValueRef = ref(props.defaultValue)\n const controlledValueRef = toRef(props, 'value')\n const mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef)\n\n const { disabled } = toRefs(props)\n\n const options = computed(() => {\n return (props.options ?? []).map(option => {\n if (isString(option) || isNumber(option)) {\n return {\n label: option,\n value: option\n } as BasicRadioOption\n }\n return option\n })\n })\n\n const cls = computed(() => [\n `${b()}`,\n {\n [`${m(props.size)}`]: props.size,\n [`${m('disabled')}`]: disabled.value\n }\n ])\n\n const handleChange = (value: string | number | boolean) => {\n if (props.disabled) return\n const { onChange, onUpdateValue, 'onUpdate:value': _onUpdateValue } = props\n if (onChange) call(onChange as OnUpdateValueImpl, value)\n if (onUpdateValue) call(onUpdateValue as OnUpdateValueImpl, value)\n if (_onUpdateValue) call(_onUpdateValue as OnUpdateValueImpl, value)\n uncontrolledValueRef.value = value\n }\n\n const renderOptions = () => {\n return options.value.map(option => {\n return (\n <XBasicRadio value={option.value} disabled={option.disabled} modelValue={mergedValueRef.value === option.value} size={props.size}>\n {slots.label ? slots.label({ option }) : isFunction(option.label) ? option.label() : option.label}\n </XBasicRadio>\n )\n })\n }\n\n const context = reactive({\n name: 'XBasicRadioGroup',\n mergedValueRef,\n disabled: disabled.value,\n slots,\n handleChange\n })\n\n createBasicRadioGroupContext(context)\n\n return () => <div class={cls.value}>{options.value.length > 0 ? renderOptions() : slots.default?.()}</div>\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicRadioGroup from './BasicRadioGroup'\n\nexport const XBasicRadioGroup: SFCWithInstall<typeof BasicRadioGroup> = withInstall(BasicRadioGroup)\nexport type BasicRadioGroupInstance = InstanceType<typeof BasicRadioGroup>\n\nexport default XBasicRadioGroup\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { computed, ref, toRef, unref, useAttrs, watch } from 'vue'\nimport { useMergedState } from '@maxax/hooks'\nimport type { Recordable } from '@maxax/types'\nimport { call, getValueKey, isFunction } from '@maxax/utils'\nimport { get, merge, omit } from 'lodash-es'\nimport type { SelectOption } from 'naive-ui'\nimport { NSelect } from 'naive-ui'\nimport { useNamespace } from '../../composable'\nimport type { BasicSelectOnUpdateValueImpl, BasicSelectProps, BasicSelectValue } from './interface'\n\ndefineOptions({\n inheritAttrs: false\n})\n\nconst props = withDefaults(defineProps<BasicSelectProps>(), {\n options: () => [],\n labelField: 'label',\n valueField: 'value',\n immediate: true,\n fetchSetting: () => ({ listField: 'resultList' })\n})\n\nconst { b } = useNamespace('basic-select')\n\nconst loading = ref(false)\nconst dataSourceRef = ref<SelectOption[]>([])\nconst rawDataSourceRef = ref<Recordable>({})\nconst searchInfoRef = ref<Recordable>({})\n\nconst uncontrolledValueRef = ref(props.defaultValue)\nconst controlledValueRef = toRef(props, 'value')\nconst mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef)\n\nconst attrs = useAttrs()\n\nconst getOptions = computed(() => {\n const { labelField, valueField } = props\n\n const data = unref(dataSourceRef).reduce((prev, next: any) => {\n if (next) {\n prev.push({\n ...next,\n label: getValueKey(labelField, next),\n value: getValueKey(valueField, next)\n })\n }\n return prev\n }, [] as SelectOption[])\n return data.length > 0 ? data : props.options\n})\n\nconst computedProps = computed(() => {\n return {\n ...attrs,\n ...omit(props, ['options', 'labelField', 'valueField', 'value']),\n options: unref(getOptions),\n loading: loading.value\n }\n})\n\nwatch(\n () => props.searchInfo,\n () => {\n fetch()\n },\n { deep: true, immediate: props.immediate }\n)\n\nasync function fetch(opt?: Recordable) {\n const { api, dynamicApi, searchInfo, fetchSetting, beforeFetch, afterFetch, handleSearchInfoFn } = props\n if ((!api && !dynamicApi) || loading.value) return\n\n try {\n loading.value = true\n const { listField } = { listField: 'resultList', ...fetchSetting }\n\n const searchInfoParams = handleSearchInfoFn ? handleSearchInfoFn() : {}\n\n let params = merge(searchInfoParams, searchInfo, opt ?? {})\n\n if (beforeFetch && isFunction(beforeFetch)) {\n params = (await beforeFetch(params)) || params\n }\n\n searchInfoRef.value = params\n\n const apiFn = api || dynamicApi?.(params)\n\n const res = await apiFn?.(params)\n\n rawDataSourceRef.value = res.data\n\n const isArrayResult = Array.isArray(res.data)\n\n let resultItems: Recordable[] = isArrayResult ? res.data : get(res.data, listField)\n\n if (afterFetch && isFunction(afterFetch)) {\n resultItems = (await afterFetch(resultItems)) || resultItems\n }\n\n dataSourceRef.value = resultItems\n } catch (error) {\n console.error(error)\n } finally {\n loading.value = false\n }\n}\n\nconst handleChange = (value: BasicSelectValue, option: SelectOption | null | SelectOption[]) => {\n if (props.disabled) return\n const { onChange, onUpdateValue, 'onUpdate:value': _onUpdateValue } = props\n if (onChange) call(onChange as BasicSelectOnUpdateValueImpl, value, option)\n if (onUpdateValue) call(onUpdateValue as BasicSelectOnUpdateValueImpl, value, option)\n if (_onUpdateValue) call(_onUpdateValue as BasicSelectOnUpdateValueImpl, value, option)\n uncontrolledValueRef.value = value\n}\n\nfunction handleUpdateValue(value: BasicSelectValue, option: SelectOption | null | SelectOption[]) {\n handleChange(value, option)\n}\n\nasync function reload(opt?: Recordable) {\n return await fetch(opt)\n}\n\nfunction getSearchInfo<T = Recordable>() {\n return searchInfoRef.value as T\n}\n\ndefineExpose({\n reload,\n getSearchInfo\n})\n</script>\n\n<template>\n <NSelect v-bind=\"computedProps\" :value=\"mergedValueRef\" :class=\"b()\" @update:value=\"handleUpdateValue\" />\n</template>\n","import type { Fn, KeyValueType, Recordable } from '@maxax/types'\nimport type { SelectOption, SelectProps } from 'naive-ui'\n\nexport const basicSelectProps = {} as const\n\ntype ValueAtom = string | number\nexport type BasicSelectValue = ValueAtom | string[] | number[] | ValueAtom[]\nexport type BasicSelectOnUpdateValue = (value: string & number & ValueAtom & string[] & number[] & ValueAtom[] & (ValueAtom | null) & (string[] | null) & (number[] | null) & (ValueAtom[] | null), option: SelectOption & null & SelectOption[]) => void\nexport type BasicSelectOnUpdateValueImpl = (value: ValueAtom | string[] | number[] | ValueAtom[] | (ValueAtom | null) | (string[] | null) | (number[] | null) | (ValueAtom[] | null), option: SelectOption | null | SelectOption[]) => void\n\nexport interface BasicSelectFetchSetting {\n // 请求结果列表字段 支持 a.b.c\n listField: string\n}\n\nexport interface BasicSelectProps extends /* @vue-ignore */ Omit<SelectProps, 'options' | 'labelField' | 'valueField' | 'value' | 'defaultValue'> {\n defaultValue?: BasicSelectValue | null\n value?: BasicSelectValue | null\n options?: SelectOption[]\n labelField?: KeyValueType\n valueField?: KeyValueType\n disabled?: boolean\n // 立即请求接口\n immediate?: boolean\n // 接口请求对象\n api?: (...arg: any) => Promise<any>\n // 动态请求\n dynamicApi?: (params?: Recordable) => (...arg: any) => Promise<any>\n // 请求之前处理参数\n beforeFetch?: Fn\n // 自定义处理接口返回参数\n afterFetch?: Fn\n // 查询条件请求之前处理\n handleSearchInfoFn?: Fn\n // 额外的请求参数\n searchInfo?: Recordable\n // 请求接口配置\n fetchSetting?: Partial<BasicSelectFetchSetting>\n}\n\nexport interface BasicSelectContext {\n name: string\n}\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicSelect from './BasicSelect.vue'\n\nexport const XBasicSelect: SFCWithInstall<typeof BasicSelect> = withInstall(BasicSelect)\nexport type BasicSelectInstance = InstanceType<typeof BasicSelect>\n\nexport default XBasicSelect\n\nexport * from './interface'\n","import type { Component } from 'vue'\nimport { NAutoComplete, NCascader, NCheckbox, NCheckboxGroup, NColorPicker, NDatePicker, NDivider, NDynamicTags, NInput, NInputNumber, NRadio, NRadioButton, NRadioGroup, NRate, NSelect, NSlider, NSwitch, NTimePicker, NTransfer, NTreeSelect, NUpload } from 'naive-ui'\nimport { XBasicCascader } from '../basic-cascader'\nimport { XBasicCheckboxGroup } from '../basic-checkbox-group'\nimport { XBasicDatePicker } from '../basic-date-picker'\nimport { XBasicHidden } from '../basic-hidden'\nimport { XBasicRadioGroup } from '../basic-radio-group'\nimport { XBasicSelect } from '../basic-select'\nimport { XBasicText } from '../basic-text'\nimport type { BasicEditBatchComponentType } from './types'\n\nconst componentMap = new Map<BasicEditBatchComponentType | string, Component>()\n\ncomponentMap.set('Input', NInput)\ncomponentMap.set('InputNumber', NInputNumber)\ncomponentMap.set('Select', NSelect)\ncomponentMap.set('Upload', NUpload)\ncomponentMap.set('AutoComplete', NAutoComplete)\ncomponentMap.set('DynamicTags', NDynamicTags)\ncomponentMap.set('TreeSelect', NTreeSelect)\ncomponentMap.set('Cascader', NCascader)\ncomponentMap.set('DatePicker', NDatePicker)\ncomponentMap.set('TimePicker', NTimePicker)\ncomponentMap.set('Switch', NSwitch)\ncomponentMap.set('Checkbox', NCheckbox)\ncomponentMap.set('CheckboxGroup', NCheckboxGroup)\ncomponentMap.set('Radio', NRadio)\ncomponentMap.set('RadioButton', NRadioButton)\ncomponentMap.set('RadioGroup', NRadioGroup)\ncomponentMap.set('Slider', NSlider)\ncomponentMap.set('Transfer', NTransfer)\ncomponentMap.set('Divider', NDivider)\ncomponentMap.set('ColorPicker', NColorPicker)\ncomponentMap.set('Rate', NRate)\ncomponentMap.set('BasicHidden', XBasicHidden)\ncomponentMap.set('BasicText', XBasicText)\ncomponentMap.set('BasicDatePicker', XBasicDatePicker)\ncomponentMap.set('BasicCheckboxGroup', XBasicCheckboxGroup)\ncomponentMap.set('BasicSelect', XBasicSelect)\ncomponentMap.set('BasicRadioGroup', XBasicRadioGroup)\ncomponentMap.set('BasicCascader', XBasicCascader)\n\nexport { componentMap }\n","import type { Recordable } from '@maxax/types'\nimport { isObject } from '@maxax/utils'\nimport dayjs from 'dayjs'\nimport type { FormItemRule } from 'naive-ui'\nimport type { BasicEditBatchComponentType, BasicEditBatchSchema, ComponentEditBatchSchema, SlotEditBatchSchema } from './types'\n\nexport const DEFAULT_VALUE_COMPONENTS = ['Input', 'InputPassword', 'InputNumber', 'InputSearch', 'InputTextArea']\n\nexport const DEFAULT_VALUE_ARRAY = ['CheckboxGroup', 'XCheckboxGroup', 'Upload', 'DynamicTags']\n\nconst DATE_TYPE = ['DatePicker', 'TimePicker']\n\nconst CHECK_VALUE_EVENT_COMPONENTS = ['Checkbox']\nconst CHANGE_VALUE_EVENT_COMPONENTS = ['XRadioGroup', 'XRadioButtonGroup', 'XButtonGroup', 'XCheckboxGroup']\n\nconst DATE_RANGE_TYPE = ['daterange', 'datetimerange', 'monthrange', 'yearrange', 'quarterrange']\n\n// 自定义组件 不自动添加 blur 事件\nexport const NO_AUTO_LINK_COMPONENTS: BasicEditBatchComponentType[] = []\n\nexport const getComponentsEventTrigger = (component: BasicEditBatchComponentType) => {\n if (CHECK_VALUE_EVENT_COMPONENTS.includes(component)) {\n return 'onUpdate:checked'\n }\n if (CHANGE_VALUE_EVENT_COMPONENTS.includes(component)) {\n return 'onChange'\n }\n return 'onUpdate:value'\n}\n\nexport function processDateValue(attr: Recordable, component: string) {\n const { valueFormat, value } = attr\n if (valueFormat) {\n attr.value = isObject(value) ? dayjs(value as unknown as Date).format(valueFormat) : value\n } else if (DATE_TYPE.includes(component) && value) {\n attr.value = dayjs(attr.value)\n }\n}\n\nexport function getComponentDefaultValue(component: BasicEditBatchComponentType) {\n if (DEFAULT_VALUE_ARRAY.includes(component)) {\n return []\n }\n return null\n}\n\nexport function setComponentRuleType(rule: FormItemRule, component: BasicEditBatchComponentType) {\n if (Reflect.has(rule, 'type')) {\n return\n }\n if (['InputNumber'].includes(component)) {\n rule.type = 'number'\n } else if (DEFAULT_VALUE_ARRAY.includes(component)) {\n rule.type = 'array'\n }\n rule.trigger = 'change'\n}\n\nexport function itemIsDateRangeComponent(componentProps: Recordable) {\n return componentProps?.type && DATE_RANGE_TYPE.includes(componentProps.type)\n}\n\nexport function itemIsDateComponent(key: BasicEditBatchComponentType) {\n return ['DatePicker', 'TimePicker'].includes(key)\n}\n\nexport function itemIsUploadComponent(key: BasicEditBatchComponentType) {\n return ['Upload', 'ImageUpload'].includes(key)\n}\n\nexport function isIncludeSimpleComponents(component: BasicEditBatchComponentType) {\n return ['Divider', 'BasicTitle'].includes(component)\n}\n\nexport function checkIsRangeSlider(schema: BasicEditBatchSchema) {\n if (schema.component === 'Slider' && schema.componentProps && 'range' in schema.componentProps) {\n return true\n }\n}\n\nexport function checkIsInput(schema?: BasicEditBatchSchema) {\n return schema?.component && DEFAULT_VALUE_COMPONENTS.includes(schema.component)\n}\n\nexport function isSlotEditBatchSchema(schema: BasicEditBatchSchema): schema is SlotEditBatchSchema {\n return 'slot' in schema\n}\n\nexport function isComponentEditBatchSchema(schema: BasicEditBatchSchema): schema is ComponentEditBatchSchema {\n return !isSlotEditBatchSchema(schema)\n}\n","<script lang=\"tsx\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent, unref } from 'vue'\nimport type { Nullable, Recordable } from '@maxax/types'\nimport { getSlot, isArray, isBoolean, isFunction } from '@maxax/utils'\nimport dayjs from 'dayjs'\nimport { useLocale, useNamespace } from '../../../composable'\nimport { XBasicHelp } from '../../basic-help'\nimport { componentMap } from '../componentMap'\nimport { getComponentDefaultValue, getComponentsEventTrigger, isComponentEditBatchSchema, itemIsDateComponent, itemIsDateRangeComponent } from '../helper'\nimport type { BasicEditBatchComponentType, BasicEditBatchProps, BasicEditBatchSchema, EditBatchActionType } from '../types'\n\nexport default defineComponent({\n name: 'BasicEditBatchItem',\n components: { XBasicHelp },\n inheritAttrs: false,\n props: {\n schema: {\n type: Object as PropType<BasicEditBatchSchema>,\n default: () => ({})\n },\n editBatchProps: {\n type: Object as PropType<BasicEditBatchProps>,\n default: () => ({})\n },\n allDefaultValues: {\n type: Object as PropType<Recordable<any>>,\n default: () => ({})\n },\n formModel: {\n type: Object as PropType<Recordable<any>>,\n default: () => ({})\n },\n setFormModel: {\n type: Function as PropType<(_key: string, _value: any, _schema: BasicEditBatchSchema) => void>,\n default: null\n },\n editBatchActionType: {\n type: Object as PropType<EditBatchActionType>,\n default: () => ({})\n }\n },\n setup(props, { slots }) {\n const { b, e } = useNamespace('basic-edit-batch-item')\n\n const { t } = useLocale()\n\n const getValues = computed(() => {\n const { allDefaultValues, formModel, schema } = props\n const { mergeDynamicData } = props.editBatchProps\n return {\n field: schema.field,\n model: formModel,\n values: {\n ...mergeDynamicData,\n ...allDefaultValues,\n ...formModel\n } as Recordable<any>,\n schema\n }\n })\n\n const getComponentsProps = computed(() => {\n const { schema, formModel, editBatchActionType } = props\n let { componentProps = {} } = schema\n if (isFunction(componentProps)) {\n componentProps = componentProps({ schema, formModel, editBatchActionType, setFormModel: props.setFormModel }) ?? {}\n }\n return componentProps as Recordable<any>\n })\n\n const getDisable = computed(() => {\n const { disabled: globDisabled } = props.editBatchProps\n const { dynamicDisabled } = props.schema\n const { disabled: itemDisabled = false } = unref(getComponentsProps)\n let disabled = Boolean(globDisabled) || itemDisabled\n if (isBoolean(dynamicDisabled)) {\n disabled = dynamicDisabled\n }\n if (isFunction(dynamicDisabled)) {\n disabled = dynamicDisabled(unref(getValues))\n }\n return disabled\n })\n\n const getReadonly = computed(() => {\n const { readonly: globReadonly } = props.editBatchProps\n const { dynamicReadonly } = props.schema\n const { readonly: itemReadonly = false } = unref(getComponentsProps)\n\n let readonly = globReadonly || itemReadonly\n if (isBoolean(dynamicReadonly)) {\n readonly = dynamicReadonly\n }\n if (isFunction(dynamicReadonly)) {\n readonly = dynamicReadonly(unref(getValues))\n }\n return readonly\n })\n\n function getShow(): { isShow: boolean; isIfShow: boolean } {\n const { show, ifShow, component } = props.schema\n\n let isShow = true\n let isIfShow = true\n\n if (isBoolean(show)) {\n isShow = show\n }\n if (isBoolean(ifShow)) {\n isIfShow = ifShow\n }\n if (isFunction(show)) {\n isShow = show(unref(getValues))\n }\n if (isFunction(ifShow)) {\n isIfShow = ifShow(unref(getValues))\n }\n if (component === 'BasicHidden') {\n isShow = false\n }\n\n return { isShow, isIfShow }\n }\n\n function createPlaceholderMessage(component: BasicEditBatchComponentType) {\n if (component.includes('Input') || component.includes('Complete')) {\n return t('max.placeholder.input')\n }\n if (component.includes('Picker') || component.includes('Group')) {\n return t('max.placeholder.picker')\n }\n if (component.includes('Select') || component.includes('TreeSelect') || component.includes('Cascader')) {\n return t('max.placeholder.select')\n }\n return ''\n }\n\n function renderComponent() {\n if (!isComponentEditBatchSchema(props.schema)) {\n return null\n }\n\n const { renderComponentContent, customRenderComponent, component, field, changeEvent, valueField, valueFormat } = props.schema\n\n const { autoSetPlaceHolder, size } = props.editBatchProps\n\n const isCheck = component && ['Checkbox'].includes(component)\n\n const bindValueField = valueField || (isCheck ? 'checked' : 'value')\n\n const eventKey = changeEvent || getComponentsEventTrigger(component)\n\n const valueFormatted = valueField && valueField === 'formatted-value'\n\n const propsData: Recordable<any> = {\n clearable: true,\n filterable: true,\n size,\n ...unref(getComponentsProps),\n disabled: unref(getDisable),\n readonly: unref(getReadonly)\n }\n\n const on = {\n [eventKey]: (...args: Array<Nullable<Recordable<any>>>) => {\n const [ev] = args\n\n const target = ev ? ev.target : null\n let value = target ? (isCheck ? target.checked : target.value) : ev\n\n if (valueFormatted) {\n return\n }\n\n if (isFunction(valueFormat)) {\n value = valueFormat({ ...unref(getValues), value })\n }\n props.setFormModel(field, value, props.schema)\n\n if (propsData[eventKey]) {\n propsData[eventKey](...args)\n }\n }\n }\n\n if (valueFormatted) {\n on['onUpdate:formattedValue'] = (value: any) => {\n props.setFormModel(field, value, props.schema)\n if (propsData['onUpdate:formattedValue']) {\n propsData['onUpdate:formattedValue'](value)\n }\n }\n }\n\n const Comp = componentMap.get(component) as ReturnType<typeof defineComponent>\n\n const isCreatePlaceholder = !propsData.disabled && autoSetPlaceHolder\n\n const componentProps = unref(getComponentsProps)\n // RangePicker place is an array\n if (isCreatePlaceholder && !itemIsDateRangeComponent(componentProps)) {\n propsData.placeholder = componentProps?.placeholder || createPlaceholderMessage(component)\n }\n propsData.codeField = field\n propsData.formValues = unref(getValues)\n\n let bindValueValue = props.formModel[field] || props.formModel[field] === 0 ? props.formModel[field] : getComponentDefaultValue(component)\n\n if (itemIsDateComponent(component)) {\n if (!isArray(bindValueValue)) {\n bindValueValue = bindValueValue ? dayjs(bindValueValue).valueOf() : null\n } else {\n bindValueValue = bindValueValue.map(item => dayjs(item).valueOf())\n }\n }\n\n const bindValue: Recordable<any> = {\n [bindValueField]: bindValueValue\n }\n\n const compAttr: Recordable<any> = {\n ...propsData,\n ...on,\n ...bindValue\n }\n\n if (customRenderComponent && isFunction(customRenderComponent)) {\n return <customRenderComponent {...compAttr} />\n }\n\n if (!renderComponentContent) {\n return <Comp {...compAttr} />\n }\n\n const compSlot = isFunction(renderComponentContent)\n ? {\n ...renderComponentContent(unref(getValues), {\n disabled: unref(getDisable),\n readonly: unref(getReadonly)\n })\n }\n : {\n default: () => renderComponentContent\n }\n\n return <Comp {...compAttr}>{compSlot}</Comp>\n }\n\n function renderLabelHelpMessage() {\n const { helpMessage, helpComponentProps } = props.schema\n\n const getHelpMessage = isFunction(helpMessage) ? helpMessage(unref(getValues)) : helpMessage\n if (!getHelpMessage || (Array.isArray(getHelpMessage) && getHelpMessage.length === 0)) {\n return null\n }\n\n return (\n <span class={e('label-help-message')}>\n <XBasicHelp text={getHelpMessage} {...helpComponentProps} />\n </span>\n )\n }\n\n function renderItem() {\n const { slot, render, field, suffix, prefix } = props.schema\n const opts = { disabled: unref(getDisable), readonly: unref(getReadonly), formApi: props.editBatchActionType, componentProps: unref(getComponentsProps) }\n\n const showSuffix = Boolean(suffix)\n const getSuffix = isFunction(suffix) ? suffix(unref(getValues)) : suffix\n\n const showPrefix = Boolean(prefix)\n const getPrefix = isFunction(prefix) ? prefix(unref(getValues)) : prefix\n\n const editBatchItemProps = {\n 'data-name': field,\n class: { [e('item-suffix')]: showSuffix, [e('item-prefix')]: showPrefix, [e('item-container')]: true }\n }\n\n const getContent = () => {\n return (\n <div class={e('content')}>\n {showPrefix && <span class={e('content-prefix')}>{getPrefix}</span>}\n <div class={e('content-inner')}>{slot ? getSlot(slots, slot, unref(getValues), opts) : render ? render(unref(getValues), opts) : renderComponent()}</div>\n {showSuffix && <span class={e('content-suffix')}>{getSuffix}</span>}\n </div>\n )\n }\n\n return (\n <div {...editBatchItemProps}>\n {getContent()}\n {renderLabelHelpMessage()}\n </div>\n )\n }\n\n return () => {\n const { colSlot, renderColContent, component, slot } = props.schema\n\n if (!((component && componentMap.has(component)) || slot)) {\n return null\n }\n\n const { isIfShow, isShow } = getShow()\n const values = unref(getValues)\n const opts = { disabled: unref(getDisable), readonly: unref(getReadonly) }\n\n const getContent = () => {\n return colSlot ? getSlot(slots, colSlot, values, opts) : renderColContent ? renderColContent(values, opts) : renderItem()\n }\n return (\n isIfShow && (\n <div v-show={isShow} class={b()}>\n {getContent()}\n </div>\n )\n )\n }\n }\n})\n</script>\n","import type { Ref } from 'vue'\nimport { computed, unref } from 'vue'\nimport { isBoolean, isFunction } from '@maxax/utils'\nimport { useNamespace } from '../../../composable'\nimport type { BasicEditBatchProps } from '../types'\n\nexport function useEditBatchClass(propsRef: Ref<BasicEditBatchProps>) {\n const { b, e, is } = useNamespace('basic-edit-batch')\n\n const getWrapperClass = computed(() => {\n const { disabled: globDisabled, dynamicDisabled } = unref(propsRef)\n\n let disabled = Boolean(globDisabled)\n\n if (isBoolean(dynamicDisabled)) {\n disabled = dynamicDisabled\n }\n if (isFunction(dynamicDisabled)) {\n disabled = dynamicDisabled()\n }\n return [b(), { [is('disabled')]: disabled }]\n })\n\n const getEditBatchSelectClass = computed(() => {\n return [e('select')]\n })\n\n return { getWrapperClass, getEditBatchSelectClass }\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { toRaw, unref } from 'vue'\nimport type { Fn, Recordable } from '@maxax/types'\nimport { deepMerge, isArray, isFunction, isNil, isObject, isString, tryConstructArray } from '@maxax/utils'\nimport { cloneDeep, get, has, uniqBy } from 'lodash-es'\nimport { checkIsInput, checkIsRangeSlider, isIncludeSimpleComponents, itemIsDateComponent, itemIsUploadComponent } from '../helper'\nimport type { BasicEditBatchEmitType, BasicEditBatchProps, BasicEditBatchSchema, EditBatchActionType } from '../types'\n\ninterface UseEditBatchEventsContext {\n emit: BasicEditBatchEmitType\n getProps: ComputedRef<BasicEditBatchProps>\n getSchema: ComputedRef<BasicEditBatchSchema[]>\n formModel: Recordable\n defaultValueRef: Ref<Recordable>\n schemaRef: Ref<BasicEditBatchSchema[]>\n editBatchElRef: Ref<EditBatchActionType>\n handleFormValues: Fn\n fieldKey: Ref<string>\n schemaItemRef: Ref<BasicEditBatchSchema>\n}\n\nexport function useEditBatchEvents({ emit, getProps, getSchema, formModel, defaultValueRef, schemaRef, editBatchElRef, handleFormValues, fieldKey, schemaItemRef }: UseEditBatchEventsContext): EditBatchActionType {\n // 获取表单fields\n const getAllFields = () =>\n unref(getSchema)\n .map(item => [...(item.fields || []), item.field])\n .flat(1)\n .filter(Boolean)\n\n /**\n * @description: Delete based on field name\n */\n async function removeSchemaByField(fields: string | string[]): Promise<void> {\n const schemaList: BasicEditBatchSchema[] = cloneDeep(unref(getSchema))\n if (!fields) {\n return\n }\n\n let fieldList = (isString(fields) ? [fields] : fields) as string[]\n if (isString(fields)) {\n fieldList = [fields as string]\n }\n for (const field of fieldList) {\n $removeSchemaByField(field, schemaList)\n }\n schemaRef.value = schemaList\n }\n\n /**\n * @description: Delete based on field name\n */\n function $removeSchemaByField(field: string, schemaList: BasicEditBatchSchema[]): void {\n if (isString(field)) {\n const index = schemaList.findIndex(schema => schema.field === field)\n if (index !== -1) {\n Reflect.deleteProperty(formModel, field)\n schemaList.splice(index, 1)\n }\n }\n }\n\n /**\n * @description: Insert after a certain field, if not insert the last\n */\n async function appendSchemaByField(schema: BasicEditBatchSchema | BasicEditBatchSchema[], prefixField?: string, first = false) {\n const schemaList: BasicEditBatchSchema[] = cloneDeep(unref(getSchema))\n const addSchemaIds: string[] = Array.isArray(schema) ? schema.map(item => item.field) : [schema.field]\n if (schemaList.find(item => addSchemaIds.includes(item.field))) {\n throw new Error('[error]:There are schemas that have already been added')\n }\n const index = schemaList.findIndex(item => item.field === prefixField)\n const $schemaList = isObject(schema) ? [schema as BasicEditBatchSchema] : (schema as BasicEditBatchSchema[])\n if (!prefixField || index === -1 || first) {\n first ? schemaList.unshift(...$schemaList) : schemaList.push(...$schemaList)\n } else if (index !== -1) {\n schemaList.splice(index + 1, 0, ...$schemaList)\n }\n schemaRef.value = schemaList\n $setDefaultValue(schema)\n }\n\n async function resetSchema(data: Partial<BasicEditBatchSchema> | Array<Partial<BasicEditBatchSchema>>) {\n let updateData: Array<Partial<BasicEditBatchSchema>> = []\n if (isObject(data)) {\n updateData.push(data as BasicEditBatchSchema)\n }\n if (isArray(data)) {\n updateData = [...data]\n }\n\n const hasField = updateData.every(item => isIncludeSimpleComponents(item.component) || (Reflect.has(item, 'field') && item.field))\n\n if (!hasField) {\n throw new Error('[error]:All children of the form Schema array that need to be updated must contain the \"field\" field')\n }\n schemaRef.value = updateData as BasicEditBatchSchema[]\n }\n\n async function updateSchema(data: Partial<BasicEditBatchSchema> | Array<Partial<BasicEditBatchSchema>>) {\n let updateData: Array<Partial<BasicEditBatchSchema>> = []\n if (isObject(data)) {\n updateData.push(data as BasicEditBatchSchema)\n }\n if (isArray(data)) {\n updateData = [...data]\n }\n\n const hasField = updateData.every(item => isIncludeSimpleComponents(item.component) || (Reflect.has(item, 'field') && item.field))\n\n if (!hasField) {\n throw new Error('[error]:All children of the form Schema array that need to be updated must contain the \"field\" field')\n }\n const schema: BasicEditBatchSchema[] = []\n const updatedSchema: BasicEditBatchSchema[] = []\n unref(getSchema).forEach(val => {\n const updatedItem = updateData.find(item => val.field === item.field)\n\n if (updatedItem) {\n const newSchema = deepMerge(val, updatedItem)\n updatedSchema.push(newSchema as BasicEditBatchSchema)\n schema.push(newSchema as BasicEditBatchSchema)\n } else {\n schema.push(val)\n }\n })\n $setDefaultValue(updatedSchema)\n\n schemaRef.value = uniqBy(schema, 'field')\n }\n\n function getFieldsValue(): Recordable {\n return handleFormValues(toRaw(unref(formModel)))\n }\n\n async function setFieldsValue(values: Recordable): Promise<void> {\n const valuesKeys = Object.keys(values)\n if (valuesKeys.length === 0) {\n return\n }\n const fields = getAllFields()\n\n if (unref(getProps).above) {\n valuesKeys.forEach(key => {\n if (!fields.includes(key)) {\n const value = get(values, key)\n unref(formModel)[key] = value\n }\n })\n }\n\n fields.forEach(key => {\n const schema = unref(getSchema).find(item => item.field === key)\n const value = get(values, key)\n const hasKey = has(values, key)\n const { componentProps } = schema || {}\n let $props = componentProps as any\n if (isFunction(componentProps)) {\n $props = $props({\n formModel: unref(formModel),\n editBatchActionType: {}\n })\n }\n\n let constructValue\n const setDateFieldValue = (v: any) => {\n return v ? ($props?.valueFormat ? v : v) : null\n }\n\n // Adapt date component\n if (itemIsDateComponent(schema?.component)) {\n constructValue = tryConstructArray(key, values)\n if (constructValue) {\n const fieldValue = constructValue || value\n if (Array.isArray(fieldValue)) {\n const arr: any[] = []\n for (const ele of fieldValue) {\n arr.push(setDateFieldValue(ele))\n }\n unref(formModel)[key] = arr\n } else {\n unref(formModel)[key] = setDateFieldValue(fieldValue)\n }\n }\n }\n // Adapt upload component\n if (itemIsUploadComponent(schema?.component)) {\n constructValue = get(value, key)\n const fieldValue = constructValue || value\n if (fieldValue) {\n if (isArray(fieldValue)) {\n unref(formModel)[key] = fieldValue\n } else if (typeof fieldValue == 'string') {\n unref(formModel)[key] = [fieldValue]\n }\n }\n return\n }\n\n // Adapt common component\n if (hasKey) {\n constructValue = get(value, key)\n const fieldValue = constructValue || value\n unref(formModel)[key] = fieldValue\n if ($props?.onChange) {\n $props?.onChange(fieldValue)\n }\n } else {\n // Key not exist\n // Refer:https://github.com/vbenjs/vue-vben-admin/issues/3795\n }\n })\n }\n\n async function resetFields(): Promise<void> {\n const { resetFunc, submitOnReset } = unref(getProps)\n resetFunc && isFunction(resetFunc) && (await resetFunc())\n\n const editBatchEl = unref(editBatchElRef)\n if (!editBatchEl) return\n\n Object.keys(formModel).forEach(key => {\n const schema = unref(getSchema).find(item => item.field === key)\n const defaultValueObj = schema?.defaultValueObj\n const fieldKeys = Object.keys(defaultValueObj || {})\n if (fieldKeys.length) {\n fieldKeys.forEach(field => {\n formModel[field] = defaultValueObj![field]\n })\n }\n formModel[key] = getDefaultValue(schema, defaultValueRef, key)\n })\n emit('reset', toRaw(formModel))\n submitOnReset && handleSubmit()\n }\n\n function $setDefaultValue(data: BasicEditBatchSchema | BasicEditBatchSchema[]) {\n let schemas: BasicEditBatchSchema[] = []\n if (isObject(data)) {\n schemas.push(data as BasicEditBatchSchema)\n }\n if (isArray(data)) {\n schemas = [...data]\n }\n\n const obj: Recordable = {}\n const currentFieldsValue = getFieldsValue()\n\n schemas.forEach(item => {\n if (!isIncludeSimpleComponents(item.component) && Reflect.has(item, 'field') && item.field && !isNil(item.defaultValue) && (!(item.field in currentFieldsValue) || isNil(currentFieldsValue[item.field]))) {\n obj[item.field] = item.defaultValue\n }\n })\n setFieldsValue(obj)\n }\n\n async function setProps(editBatchProps: Partial<BasicEditBatchProps>): Promise<void> {\n await unref(editBatchElRef)?.setProps(editBatchProps)\n }\n\n async function handleSubmit(e?: Event): Promise<void> {\n e && e.preventDefault()\n const { submitFunc } = unref(getProps)\n if (submitFunc && isFunction(submitFunc)) {\n await submitFunc()\n return\n }\n const editBatchEl = unref(editBatchElRef)\n if (!editBatchEl) return\n try {\n emit('submit', getFieldsValue(), unref(fieldKey), unref(schemaItemRef))\n } catch (error: any) {\n if (error?.outOfDate === false && error?.errorFields) {\n return\n }\n throw new Error(error)\n }\n }\n\n return {\n updateSchema,\n resetSchema,\n removeSchemaByField,\n appendSchemaByField,\n setFieldsValue,\n getFieldsValue,\n resetFields,\n setProps,\n submit: handleSubmit\n }\n}\n\nfunction getDefaultValue(schema: BasicEditBatchSchema | undefined, defaultValueRef: UseEditBatchEventsContext['defaultValueRef'], key: string) {\n let defaultValue = cloneDeep(defaultValueRef.value[key])\n const isInput = checkIsInput(schema)\n if (isInput) {\n return !isNil(defaultValue) ? defaultValue : undefined\n }\n if (!defaultValue && schema && checkIsRangeSlider(schema)) {\n defaultValue = [0, 0]\n }\n if (!defaultValue && schema && schema.component === 'ApiTree') {\n defaultValue = []\n }\n return defaultValue\n}\n","import type { Ref } from 'vue'\nimport { computed, unref } from 'vue'\nimport type { Recordable } from '@maxax/types'\nimport { cloneDeep, isArray, isFunction } from '@maxax/utils'\nimport dayjs from 'dayjs'\nimport type { SelectGroupOption, SelectOption } from 'naive-ui'\nimport { itemIsDateComponent, itemIsUploadComponent } from '../helper'\nimport type { BasicEditBatchProps, BasicEditBatchSchema, EditBatchActionType } from '../types'\n\ninterface UseEditBatchSchemaContext {\n getProps: Ref<BasicEditBatchProps>\n schemaRef: Ref<BasicEditBatchSchema[] | null>\n formModel: Recordable\n}\n\nexport function useEditBatchSchema({ getProps, schemaRef, formModel }: UseEditBatchSchemaContext) {\n const getSchema = computed((): BasicEditBatchSchema[] => {\n const schemas: Array<BasicEditBatchSchema & { ifshow2?: boolean }> = cloneDeep(unref(schemaRef) || unref(getProps).schemas || [])\n for (const schema of schemas) {\n const { defaultValue, component, componentProps = {}, isHandleDateDefaultValue = true, field, isHandleDefaultValue = true, valueFormat } = schema\n\n // Handle date type\n if (isHandleDateDefaultValue && defaultValue && component && itemIsDateComponent(component)) {\n const opt = {\n schema,\n tableAction: {},\n formModel,\n editBatchActionType: {} as EditBatchActionType\n }\n const formattedValueFormat = componentProps ? (typeof componentProps === 'function' ? componentProps(opt).vFormat : componentProps.vFormat) : null\n if (!Array.isArray(defaultValue)) {\n schema.defaultValue = formattedValueFormat ? dayjs(defaultValue).format(formattedValueFormat) : defaultValue\n } else {\n const def: any[] = []\n defaultValue.forEach(item => {\n def.push(formattedValueFormat ? dayjs(item).format(formattedValueFormat) : item)\n })\n schema.defaultValue = def\n }\n }\n // Handle upload type\n if (defaultValue && itemIsUploadComponent(schema?.component)) {\n if (isArray(defaultValue)) {\n schema.defaultValue = defaultValue\n } else if (typeof defaultValue == 'string') {\n schema.defaultValue = [defaultValue]\n }\n }\n\n // Handle schema.valueFormat\n if (isHandleDefaultValue && defaultValue && component && isFunction(valueFormat)) {\n schema.defaultValue = valueFormat({\n value: defaultValue,\n schema,\n model: formModel,\n field\n })\n }\n }\n\n return schemas as BasicEditBatchSchema[]\n })\n\n const getOptions = computed(() => {\n return getSchema.value.map(schema => ({ label: schema.label, value: schema.field })) as Array<SelectOption | SelectGroupOption>\n })\n return { getSchema, getOptions }\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { unref } from 'vue'\nimport type { Recordable } from '@maxax/types'\nimport { isArray, isEmpty, isFunction, isNil, isObject, isString, tryDeconstructArray, tryDeconstructObject } from '@maxax/utils'\nimport dayjs from 'dayjs'\nimport { cloneDeep, get, isNumber, set, unset } from 'lodash-es'\nimport type { BasicEditBatchProps, BasicEditBatchSchema } from '../types'\n\ninterface UseEditBatchValuesContext {\n defaultValueRef: Ref<any>\n getSchema: ComputedRef<BasicEditBatchSchema[]>\n getProps: ComputedRef<BasicEditBatchProps>\n formModel: Recordable\n}\nexport function useEditBatchValues({ getProps, defaultValueRef, getSchema, formModel }: UseEditBatchValuesContext) {\n // Processing form values\n function handleFormValues(values: Recordable) {\n if (!isObject(values)) {\n return {}\n }\n const res: Recordable = {}\n for (const item of Object.entries(values)) {\n let [, value] = item\n const [key] = item\n if (!key || (isArray(value) && value.length === 0) || isFunction(value)) {\n continue\n }\n const transformDateFunc = unref(getProps).transformDateFunc\n if (isObject(value)) {\n value = transformDateFunc?.(value)\n }\n\n if (isArray(value) && value[0]?.format && value[1]?.format) {\n value = value.map(it => transformDateFunc?.(it))\n }\n // Remove spaces\n if (isString(value)) {\n value = value.trim()\n }\n if (!tryDeconstructArray(key, value, res) && !tryDeconstructObject(key, value, res)) {\n // 没有解构成功的,按原样赋值\n set(res, key, value)\n }\n }\n return handleRangeTimeValue(res)\n }\n\n /**\n * @description: Processing time interval parameters\n */\n function handleRangeTimeValue(values: Recordable) {\n const fieldMapToTime = unref(getProps).fieldMapToTime\n\n if (!fieldMapToTime || !Array.isArray(fieldMapToTime)) {\n return values\n }\n\n for (const [field, [startTimeKey, endTimeKey], format = 'YYYY-MM-DD'] of fieldMapToTime) {\n if (!field || !startTimeKey || !endTimeKey) {\n continue\n }\n // If the value to be converted is empty, remove the field\n if (!get(values, field)) {\n unset(values, field)\n continue\n }\n\n const [startTime, endTime]: string[] = get(values, field)\n\n const [startTimeFormat, endTimeFormat] = Array.isArray(format) ? format : [format, format]\n\n if ((!isNil(startTime) && !isEmpty(startTime) && !isNumber(startTime)) || (startTime && isNumber(startTime))) {\n set(values, startTimeKey, formatTime(startTime, startTimeFormat))\n }\n if ((!isNil(endTime) && !isEmpty(endTime) && !isNumber(endTime)) || (endTime && isNumber(endTime))) {\n set(values, endTimeKey, formatTime(endTime, endTimeFormat))\n }\n unset(values, field)\n }\n\n return values\n }\n\n function formatTime(time: string, format: string) {\n if (format === 'second') {\n return dayjs(time).unix()\n }\n if (format === 'timestamp') {\n return dayjs(time).valueOf()\n }\n if (format === 'timestampStartDay') {\n return dayjs(time).startOf('day').unix()\n }\n return dayjs(time).format(format)\n }\n\n function initDefault() {\n const schemas = unref(getSchema)\n const obj: Recordable = {}\n schemas.forEach(item => {\n const { defaultValue, defaultValueObj, componentProps = {} } = item\n const fieldKeys = Object.keys(defaultValueObj || {})\n if (fieldKeys.length) {\n fieldKeys.forEach(field => {\n obj[field] = defaultValueObj![field]\n if (formModel[field] === undefined) {\n formModel[field] = defaultValueObj![field]\n }\n })\n }\n if (!isNil(defaultValue)) {\n obj[item.field] = defaultValue\n\n if (formModel[item.field] === undefined) {\n formModel[item.field] = defaultValue\n }\n }\n if (!isNil(componentProps?.defaultValue)) {\n obj[item.field] = componentProps?.defaultValue\n if (formModel[item.field] === undefined) {\n formModel[item.field] = componentProps?.defaultValue\n }\n }\n })\n defaultValueRef.value = cloneDeep(obj)\n }\n\n return { handleFormValues, initDefault }\n}\n","<script setup lang=\"ts\">\nimport type { Ref } from 'vue'\nimport { computed, reactive, ref, unref, useSlots, watch } from 'vue'\nimport { deepMerge } from '@maxax/utils'\nimport { NSelect } from 'naive-ui'\nimport EditBatchAction from './components/EditBatchAction.vue'\nimport BatchEditItem from './components/EditBatchItem.vue'\nimport { createBasicEditBatchContext } from './context'\nimport { useEditBatchClass, useEditBatchEvents, useEditBatchSchema, useEditBatchValues } from './hooks'\nimport type { BasicEditBatchEmitType, BasicEditBatchProps, BasicEditBatchSchema, EditBatchActionType } from './types'\n\nconst props = withDefaults(defineProps<BasicEditBatchProps>(), {\n fieldMapToTime: () => [],\n schemas: () => [],\n autoSetPlaceHolder: true,\n transformDateFunc: (date: any) => date?.format?.('YYYY-MM-DD HH:mm:ss') ?? date\n})\n\nconst emit = defineEmits<BasicEditBatchEmitType>()\n\nconst slots = useSlots() as any\n\nconst formModel = reactive<Record<string, any>>({})\n\nconst fieldKey = ref('')\n\nconst defaultValueRef = ref({})\nconst isInitedDefaultRef = ref(false)\n\nconst propsRef = ref<Partial<BasicEditBatchProps>>()\nconst schemaRef = ref<BasicEditBatchSchema[] | null>(null)\nconst schemaItemRef = ref<BasicEditBatchSchema | null>(null)\n\nconst editBatchElRef = ref<EditBatchActionType | null>(null)\n\nconst getProps = computed(() => {\n return { ...props } as BasicEditBatchProps\n})\n\nconst getEditBatchActionBindProps = computed(() => ({ ...getProps.value }) as InstanceType<typeof EditBatchAction>['$props'])\n\nconst { getWrapperClass, getEditBatchSelectClass } = useEditBatchClass(getProps)\nconst { getSchema, getOptions } = useEditBatchSchema({ getProps, formModel, schemaRef: schemaRef as Ref<BasicEditBatchSchema[]> })\nconst { handleFormValues, initDefault } = useEditBatchValues({ getProps, defaultValueRef, getSchema, formModel })\nconst { submit, removeSchemaByField, appendSchemaByField, resetSchema, updateSchema, resetFields, setFieldsValue, getFieldsValue } = useEditBatchEvents({\n emit,\n getProps,\n formModel,\n getSchema,\n defaultValueRef,\n editBatchElRef: editBatchElRef as Ref<EditBatchActionType>,\n schemaRef: schemaRef as Ref<BasicEditBatchSchema[]>,\n handleFormValues,\n fieldKey,\n schemaItemRef: schemaItemRef as Ref<BasicEditBatchSchema>\n})\n\nasync function setProps(editBatchProps: Partial<BasicEditBatchProps>): Promise<void> {\n propsRef.value = deepMerge(unref(propsRef) || {}, editBatchProps)\n}\n\nwatch(\n () => props.schemas,\n schemas => {\n resetSchema(schemas ?? [])\n }\n)\n\nwatch(\n () => getSchema.value,\n schema => {\n if (unref(isInitedDefaultRef)) {\n return\n }\n if (schema?.length) {\n initDefault()\n isInitedDefaultRef.value = true\n fieldKey.value = schema[0].field\n schemaItemRef.value = schema[0]\n } else {\n console.error('basic-edit-batch component schema is empty')\n }\n },\n { deep: true, immediate: true }\n)\n\nfunction setFormModel(key: string, value: any, schema: BasicEditBatchSchema) {\n formModel[key] = value\n emit('fieldValueChange', key, value, schema)\n}\n\nfunction onFieldChangeHandler(value: string) {\n const schema = getSchema.value?.find($schema => $schema.field === value)\n if (schema) {\n schemaItemRef.value = schema\n }\n}\n\nconst editBatchActionType = {\n submit,\n removeSchemaByField,\n appendSchemaByField,\n resetSchema,\n updateSchema,\n resetFields,\n setFieldsValue,\n getFieldsValue,\n setProps\n}\n\ncreateBasicEditBatchContext({\n resetAction: resetFields,\n submitAction: submit\n})\n\ndefineExpose({\n ...editBatchActionType\n})\n</script>\n\n<template>\n <div ref=\"editBatchElRef\" :class=\"getWrapperClass\">\n <div :class=\"getEditBatchSelectClass\">\n <NSelect v-model:value=\"fieldKey\" placeholder=\"\" class=\"batch-select\" :options=\"getOptions\" @update:value=\"onFieldChangeHandler\" />\n </div>\n <BatchEditItem v-if=\"schemaItemRef\" :schema=\"schemaItemRef\" :edit-batch-props=\"getProps\" :all-default-values=\"defaultValueRef\" :form-model=\"formModel\" :set-form-model=\"setFormModel\">\n <template v-for=\"item in Object.keys(slots)\" #[item]=\"data\">\n <slot :name=\"item\" v-bind=\"data || {}\" />\n </template>\n </BatchEditItem>\n <EditBatchAction v-bind=\"getEditBatchActionBindProps\">\n <template v-for=\"item in ['resetBefore', 'submitBefore', 'submitAfter']\" #[item]=\"data\">\n <slot :name=\"item\" v-bind=\"data || {}\" />\n </template>\n </EditBatchAction>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicEditBatch from './BasicEditBatch.vue'\n\nexport const XBasicEditBatch: SFCWithInstall<typeof BasicEditBatch> = withInstall(BasicEditBatch)\nexport type BasicEditBatchInstance = InstanceType<typeof BasicEditBatch>\n\nexport default XBasicEditBatch\n\nexport * from './interface'\n","import type { ExtractPropTypes } from 'vue'\n\nexport const basicFontIconProps = {\n icon: {\n type: String,\n default: ''\n }\n} as const\n\nexport type BasicFontIconProps = ExtractPropTypes<typeof basicFontIconProps>\n\nexport interface BasicFontIconContext {\n name: string\n}\n","import { defineComponent } from 'vue'\nimport { useNamespace } from '../../composable'\nimport { basicFontIconProps } from './interface'\n\nexport default defineComponent({\n name: 'XBasicFontIcon',\n props: basicFontIconProps,\n setup(props, { slots, attrs }) {\n const { b } = useNamespace('basic-font-icon')\n\n if (Object.keys(attrs).includes('uni') || attrs?.iconType === 'uni') {\n return () => {\n return (\n <i class={[b(), 'iconfont']} {...attrs}>\n {props.icon}\n </i>\n )\n }\n }\n\n if (Object.keys(attrs).includes('svg') || attrs?.iconType === 'svg') {\n return () => {\n return (\n <svg class={[b(), 'icon-svg']} aria-hidden='true'>\n <use xlinkHref={`#${props.icon}`} fill='currentColor' />\n </svg>\n )\n }\n }\n return () => {\n return (\n <i class={[b(), 'iconfont']} {...attrs}>\n {slots.default?.()}\n </i>\n )\n }\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicFontIcon from './BasicFontIcon'\n\nexport const XBasicFontIcon: SFCWithInstall<typeof BasicFontIcon> = withInstall(BasicFontIcon)\nexport type BasicFontIconInstance = InstanceType<typeof BasicFontIcon>\n\nexport default XBasicFontIcon\n\nexport * from './interface'\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { BasicFormContext } from './interface'\n\nexport const basicFormKey: InjectionKey<BasicFormContext> = Symbol('basic-form')\n\nexport const createBasicFormContext = (props: BasicFormContext) => {\n return provide(basicFormKey, props)\n}\n\nexport const useBasicFormContext = () => {\n return inject(basicFormKey) as BasicFormContext\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { ButtonProps, FormItemProps } from 'naive-ui'\nimport { NButton, NCol, NFormItem } from 'naive-ui'\nimport { useLocale, useNamespace } from '../../../composable'\nimport { XBasicArrow } from '../../basic-arrow'\nimport { useBasicFormContext } from '../context'\nimport type { BasicFormColProps } from '../types'\n\ninterface Props {\n showActionButtonGroup?: boolean\n showResetButton?: boolean\n showSubmitButton?: boolean\n showAdvancedButton?: boolean\n resetButtonOptions?: ButtonProps\n submitButtonOptions?: ButtonProps\n toggleButtonOptions?: ButtonProps\n actionColOptions?: BasicFormColProps\n actionSpan?: number\n isAdvanced?: boolean\n hideAdvanceBtn?: boolean\n actionFormItemProps?: Partial<FormItemProps>\n}\n\ninterface Emits {\n (_e: 'toggleAdvanced'): void\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n showActionButtonGroup: true,\n showResetButton: true,\n showSubmitButton: true,\n showAdvancedButton: true,\n resetButtonOptions: () => ({}),\n submitButtonOptions: () => ({\n type: 'primary'\n }),\n toggleButtonOptions: () => ({\n type: 'primary'\n }),\n actionColOptions: () => ({}),\n actionSpan: 6,\n actionFormItemProps: () => ({})\n})\n\nconst emit = defineEmits<Emits>()\n\nconst { b, e } = useNamespace('basic-form-action')\n\nconst { t } = useLocale()\n\nconst { resetAction, submitAction } = useBasicFormContext()\n\nconst actionColOpt = computed(() => {\n const { showAdvancedButton, actionSpan: span, actionColOptions } = props\n const actionSpan = 24 - span\n const advancedSpanObj = showAdvancedButton ? { span: actionSpan < 6 ? 24 : actionSpan } : {}\n return {\n style: { textAlign: 'right' },\n span: showAdvancedButton ? '6' : '4',\n ...advancedSpanObj,\n ...actionColOptions\n } as BasicFormColProps\n})\n\nconst getResetBtnOptions = computed((): ButtonProps => {\n const { resetButtonOptions } = props\n return {\n secondary: true,\n ...resetButtonOptions\n }\n})\n\nconst getSubmitBtnOptions = computed((): ButtonProps => {\n const { submitButtonOptions } = props\n return {\n ...submitButtonOptions\n }\n})\n\nconst getToggleBtnOptions = computed((): ButtonProps => {\n const { toggleButtonOptions } = props\n return {\n ...toggleButtonOptions\n }\n})\n\nconst advanceButtonVisible = computed(() => {\n const { showAdvancedButton, hideAdvanceBtn } = props\n return showAdvancedButton && !hideAdvanceBtn\n})\n\nconst getFormItemProps = computed(() => {\n const { actionFormItemProps } = props\n return {\n ...actionFormItemProps,\n style: {\n '--n-feedback-height': '16px',\n '--n-label-padding': '0 12px 0 12px'\n }\n }\n})\n\nfunction toggleAdvanced() {\n emit('toggleAdvanced')\n}\n</script>\n\n<template>\n <NCol v-if=\"showActionButtonGroup\" v-bind=\"actionColOpt\">\n <div :class=\"b()\" :style=\"{ textAlign: actionColOpt.style?.textAlign }\">\n <NFormItem v-bind=\"getFormItemProps\">\n <slot name=\"resetBefore\" />\n <NButton v-if=\"showResetButton\" v-bind=\"getResetBtnOptions\" :class=\"e('reset-btn')\" @click=\"resetAction\"> {{ getResetBtnOptions.text || t('max.basic.reset') }}</NButton>\n <slot name=\"submitBefore\" />\n <NButton v-if=\"showSubmitButton\" v-bind=\"getSubmitBtnOptions\" :class=\"e('submit-btn')\" @click=\"submitAction\"> {{ getSubmitBtnOptions.text || t('max.basic.submit') }}</NButton>\n <slot name=\"advanceBefore\" />\n <NButton v-if=\"advanceButtonVisible\" v-bind=\"getToggleBtnOptions\" :class=\"e('advance-btn')\" @click=\"toggleAdvanced\">\n <span>{{ isAdvanced ? t('max.basic.collapse') : t('max.basic.open') }}</span>\n <XBasicArrow :expand=\"!isAdvanced\" />\n </NButton>\n <slot name=\"advanceAfter\" />\n </NFormItem>\n </div>\n </NCol>\n</template>\n","import type { ExtractPropTypes, PropType, VNodeChild } from 'vue'\n\nexport const basicScrollTextProps = {\n /**\n * Text content\n * @default: ''\n */\n text: {\n type: [String, Object] as PropType<string | VNodeChild>,\n default: ''\n }\n} as const\n\nexport type BasicScrollTextProps = ExtractPropTypes<typeof basicScrollTextProps>\n\nexport interface BasicScrollTextContext {\n name: string\n}\n","<script lang=\"tsx\">\nimport { defineComponent, nextTick, ref, watch } from 'vue'\nimport { useNamespace } from '../../composable'\nimport { basicScrollTextProps } from './interface'\n\nexport default defineComponent({\n name: 'BasicScrollText',\n props: basicScrollTextProps,\n setup(props, { slots, expose }) {\n const { b, e } = useNamespace('basic-scroll-text')\n\n const outer = ref()\n const inner = ref()\n\n const needToScroll = ref(false)\n\n function getWidth(el: Element) {\n const { width } = el.getBoundingClientRect()\n return width\n }\n\n function isScroll() {\n nextTick().then(() => {\n const outerWidth = getWidth(outer.value)\n const innerWidth = getWidth(inner.value)\n needToScroll.value = innerWidth > outerWidth\n })\n }\n\n const animation = () => {\n isScroll()\n }\n\n watch(\n () => props.text,\n () => {\n if (props.text) {\n isScroll()\n }\n },\n {\n flush: 'post'\n }\n )\n\n const content = () => {\n if (props.text) {\n return props.text\n }\n return <span class={e('section-text')}>{slots.default?.()}</span>\n }\n\n expose({ animation })\n\n return () => (\n <div class={b()} ref={outer}>\n <div class={[e('inner'), needToScroll.value ? e('scrolling') : '']}>\n <span ref={inner} class={e('section')}>\n {content()}\n </span>\n {needToScroll.value ? <span class={e('section')}>{content()}</span> : null}\n </div>\n </div>\n )\n }\n})\n</script>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicScrollText from './BasicScrollText.vue'\n\nexport const XBasicScrollText: SFCWithInstall<typeof BasicScrollText> = withInstall(BasicScrollText)\nexport type BasicScrollTextInstance = InstanceType<typeof BasicScrollText>\n\nexport default XBasicScrollText\n\nexport * from './interface'\n","import type { Component } from 'vue'\nimport { NAutoComplete, NCascader, NCheckbox, NCheckboxGroup, NColorPicker, NDatePicker, NDivider, NDynamicTags, NInput, NInputNumber, NRadio, NRadioButton, NRadioGroup, NRate, NSelect, NSlider, NSwitch, NTimePicker, NTransfer, NTreeSelect, NUpload } from 'naive-ui'\nimport { XBasicCascader } from '../basic-cascader'\nimport { XBasicCheckboxGroup } from '../basic-checkbox-group'\nimport { XBasicDatePicker } from '../basic-date-picker'\nimport { XBasicHidden } from '../basic-hidden'\nimport { XBasicRadioGroup } from '../basic-radio-group'\nimport { XBasicScrollText } from '../basic-scroll-text'\nimport { XBasicSelect } from '../basic-select'\nimport { XBasicText } from '../basic-text'\nimport { XBasicTitle } from '../basic-title'\nimport type { ComponentType } from './types'\n\nconst componentMap = new Map<ComponentType | string, Component>()\n\ncomponentMap.set('Input', NInput)\ncomponentMap.set('InputNumber', NInputNumber)\ncomponentMap.set('Select', NSelect)\ncomponentMap.set('Upload', NUpload)\ncomponentMap.set('AutoComplete', NAutoComplete)\ncomponentMap.set('DynamicTags', NDynamicTags)\ncomponentMap.set('TreeSelect', NTreeSelect)\ncomponentMap.set('Cascader', NCascader)\ncomponentMap.set('DatePicker', NDatePicker)\ncomponentMap.set('TimePicker', NTimePicker)\ncomponentMap.set('Switch', NSwitch)\ncomponentMap.set('Checkbox', NCheckbox)\ncomponentMap.set('CheckboxGroup', NCheckboxGroup)\ncomponentMap.set('Radio', NRadio)\ncomponentMap.set('RadioButton', NRadioButton)\ncomponentMap.set('RadioGroup', NRadioGroup)\ncomponentMap.set('Slider', NSlider)\ncomponentMap.set('Transfer', NTransfer)\ncomponentMap.set('Divider', NDivider)\ncomponentMap.set('ColorPicker', NColorPicker)\ncomponentMap.set('Rate', NRate)\ncomponentMap.set('BasicTitle', XBasicTitle)\ncomponentMap.set('BasicHidden', XBasicHidden)\ncomponentMap.set('BasicText', XBasicText)\ncomponentMap.set('BasicDatePicker', XBasicDatePicker)\ncomponentMap.set('BasicCheckboxGroup', XBasicCheckboxGroup)\ncomponentMap.set('BasicSelect', XBasicSelect)\ncomponentMap.set('BasicRadioGroup', XBasicRadioGroup)\ncomponentMap.set('BasicCascader', XBasicCascader)\ncomponentMap.set('BasicScrollText', XBasicScrollText)\n\nexport function basicFormAddComponent<T extends string, R extends Component>(compName: ComponentType | T, component: R) {\n componentMap.set(compName, component)\n}\n\nexport function basicFormDelComponent<T extends string>(compName: ComponentType | T) {\n componentMap.delete(compName)\n}\n\nexport { componentMap }\n","import type { Recordable } from '@maxax/types'\nimport { isObject } from '@maxax/utils'\nimport dayjs from 'dayjs'\nimport type { FormItemRule } from 'naive-ui'\nimport type { BasicFormSchema, ComponentFormSchema, ComponentType, SlotFormSchema } from './types'\n\nexport const DEFAULT_VALUE_COMPONENTS = ['Input', 'InputPassword', 'InputNumber', 'InputSearch', 'InputTextArea']\n\nexport const DEFAULT_VALUE_ARRAY = ['CheckboxGroup', 'XCheckboxGroup', 'Upload', 'DynamicTags']\n\nconst DATE_TYPE = ['DatePicker', 'TimePicker']\n\nconst CHECK_VALUE_EVENT_COMPONENTS = ['Checkbox']\nconst CHANGE_VALUE_EVENT_COMPONENTS = ['XRadioGroup', 'XRadioButtonGroup', 'XButtonGroup', 'XCheckboxGroup']\n\nconst DATE_RANGE_TYPE = ['daterange', 'datetimerange', 'monthrange', 'yearrange', 'quarterrange']\n\n// 自定义组件 不自动添加 blur 事件\nexport const NO_AUTO_LINK_COMPONENTS: ComponentType[] = []\n\nexport const getComponentsEventTrigger = (component: ComponentType) => {\n if (CHECK_VALUE_EVENT_COMPONENTS.includes(component)) {\n return 'onUpdate:checked'\n }\n if (CHANGE_VALUE_EVENT_COMPONENTS.includes(component)) {\n return 'onChange'\n }\n return 'onUpdate:value'\n}\n\nexport function processDateValue(attr: Recordable, component: string) {\n const { valueFormat, value } = attr\n if (valueFormat) {\n attr.value = isObject(value) ? dayjs(value as unknown as Date).format(valueFormat) : value\n } else if (DATE_TYPE.includes(component) && value) {\n attr.value = dayjs(attr.value)\n }\n}\n\nexport function getComponentDefaultValue(component: ComponentType) {\n if (DEFAULT_VALUE_ARRAY.includes(component)) {\n return []\n }\n return null\n}\n\nexport function setComponentRuleType(rule: FormItemRule, component: ComponentType) {\n if (Reflect.has(rule, 'type')) {\n return\n }\n if (['InputNumber'].includes(component)) {\n rule.type = 'number'\n } else if (DEFAULT_VALUE_ARRAY.includes(component)) {\n rule.type = 'array'\n }\n rule.trigger = 'change'\n}\n\nexport function itemIsDateRangeComponent(componentProps: Recordable) {\n return componentProps?.type && DATE_RANGE_TYPE.includes(componentProps.type)\n}\n\nexport function itemIsDateComponent(key: ComponentType) {\n return ['DatePicker', 'TimePicker'].includes(key)\n}\n\nexport function itemIsUploadComponent(key: ComponentType) {\n return ['Upload', 'ImageUpload'].includes(key)\n}\n\nexport function isIncludeSimpleComponents(component: ComponentType) {\n return ['Divider', 'BasicTitle'].includes(component)\n}\n\nexport function checkIsRangeSlider(schema: BasicFormSchema) {\n if (schema.component === 'Slider' && schema.componentProps && 'range' in schema.componentProps) {\n return true\n }\n}\n\nexport function checkIsInput(schema?: BasicFormSchema) {\n return schema?.component && DEFAULT_VALUE_COMPONENTS.includes(schema.component)\n}\n\nexport function isSlotFormSchema(schema: BasicFormSchema): schema is SlotFormSchema {\n return 'slot' in schema\n}\n\nexport function isComponentFormSchema(schema: BasicFormSchema): schema is ComponentFormSchema {\n return !isSlotFormSchema(schema)\n}\n","<script lang=\"tsx\">\nimport type { PropType } from 'vue'\nimport { computed, defineComponent, isVNode, unref } from 'vue'\nimport type { Nullable, Recordable } from '@maxax/types'\nimport { cloneDeep, getSlot, isArray, isBoolean, isFunction, isNull } from '@maxax/utils'\nimport dayjs from 'dayjs'\nimport type { FormItemRule } from 'naive-ui'\nimport { NCol, NFormItem } from 'naive-ui'\nimport { useLocale, useNamespace } from '../../../composable'\nimport { XBasicHelp } from '../../basic-help'\nimport type { BasicTitleProps } from '../../basic-title'\nimport { XBasicTitle } from '../../basic-title'\nimport { componentMap } from '../componentMap'\nimport { getComponentDefaultValue, getComponentsEventTrigger, isComponentFormSchema, itemIsDateComponent, itemIsDateRangeComponent, NO_AUTO_LINK_COMPONENTS, setComponentRuleType } from '../helper'\nimport type { BasicFormProps, BasicFormSchema, ComponentType, FormActionType } from '../types'\n\nexport default defineComponent({\n name: 'BasicFormItem',\n components: { XBasicHelp, XBasicTitle },\n inheritAttrs: false,\n props: {\n schema: {\n type: Object as PropType<BasicFormSchema>,\n default: () => ({})\n },\n formProps: {\n type: Object as PropType<BasicFormProps>,\n default: () => ({})\n },\n allDefaultValues: {\n type: Object as PropType<Recordable<any>>,\n default: () => ({})\n },\n formModel: {\n type: Object as PropType<Recordable<any>>,\n default: () => ({})\n },\n setFormModel: {\n type: Function as PropType<(_key: string, _value: any, _schema: BasicFormSchema) => void>,\n default: null\n },\n formActionType: {\n type: Object as PropType<FormActionType>,\n default: () => ({})\n },\n isAdvanced: {\n type: Boolean\n }\n },\n setup(props, { slots }) {\n const { b, e } = useNamespace('basic-form-item')\n\n const { t } = useLocale()\n\n const getValues = computed(() => {\n const { allDefaultValues, formModel, schema } = props\n const { mergeDynamicData } = props.formProps\n return {\n field: schema.field,\n model: formModel,\n values: {\n ...mergeDynamicData,\n ...allDefaultValues,\n ...formModel\n } as Recordable<any>,\n schema\n }\n })\n\n const getComponentsProps = computed(() => {\n const { schema, formModel, formActionType } = props\n let { componentProps = {} } = schema\n if (isFunction(componentProps)) {\n componentProps = componentProps({ schema, formModel, formActionType, setFormModel: props.setFormModel }) ?? {}\n }\n return componentProps as Recordable<any>\n })\n\n const getDisable = computed(() => {\n const { disabled: globDisabled } = props.formProps\n const { dynamicDisabled } = props.schema\n const { disabled: itemDisabled = false } = unref(getComponentsProps)\n let disabled = Boolean(globDisabled) || itemDisabled\n if (isBoolean(dynamicDisabled)) {\n disabled = dynamicDisabled\n }\n if (isFunction(dynamicDisabled)) {\n disabled = dynamicDisabled(unref(getValues))\n }\n return disabled\n })\n\n const getReadonly = computed(() => {\n const { readonly: globReadonly } = props.formProps\n const { dynamicReadonly } = props.schema\n const { readonly: itemReadonly = false } = unref(getComponentsProps)\n\n let readonly = globReadonly || itemReadonly\n if (isBoolean(dynamicReadonly)) {\n readonly = dynamicReadonly\n }\n if (isFunction(dynamicReadonly)) {\n readonly = dynamicReadonly(unref(getValues))\n }\n return readonly\n })\n\n function getShow(): { isShow: boolean; isIfShow: boolean } {\n const { show, ifShow, component } = props.schema\n const { showAdvancedButton } = props.formProps\n const itemIsAdvanced = showAdvancedButton ? (isBoolean(props.isAdvanced) ? props.isAdvanced : true) : true\n\n let isShow = true\n let isIfShow = true\n\n if (isBoolean(show)) {\n isShow = show\n }\n if (isBoolean(ifShow)) {\n isIfShow = ifShow\n }\n if (isFunction(show)) {\n isShow = show(unref(getValues))\n }\n if (isFunction(ifShow)) {\n isIfShow = ifShow(unref(getValues))\n }\n if (component === 'BasicHidden') {\n isShow = false\n }\n isShow &&= itemIsAdvanced\n return { isShow, isIfShow }\n }\n\n function createPlaceholderMessage(component: ComponentType) {\n if (component.includes('Input') || component.includes('Complete')) {\n return t('max.placeholder.input')\n }\n if (component.includes('Picker') || component.includes('Group')) {\n return t('max.placeholder.picker')\n }\n if (component.includes('Select') || component.includes('TreeSelect') || component.includes('Cascader')) {\n return t('max.placeholder.select')\n }\n return ''\n }\n\n function handleRules(): FormItemRule[] {\n const { rules: defRules = [], component, rulesMessageJoinLabel, label, dynamicRules, required } = props.schema\n if (isFunction(dynamicRules)) {\n return dynamicRules(unref(getValues))\n }\n let rules = cloneDeep(defRules) as FormItemRule[]\n const { rulesMessageJoinLabel: globalRulesMessageJoinLabel } = props.formProps\n const joinLabel = Reflect.has(props.schema, 'rulesMessageJoinLabel') ? rulesMessageJoinLabel : globalRulesMessageJoinLabel\n const assertLabel = joinLabel ? (isFunction(label) ? '' : label) : ''\n const defaultMsg = component ? createPlaceholderMessage(component) + assertLabel : assertLabel\n const getRequired = isFunction(required) ? required(unref(getValues)) : required\n // 若设置了required属性,又没有其他的rules,就创建一个验证规则;\n // 若设置了required属性,又存在其他的rules,则只rules中不存在required属性时,才添加验证required的规则\n\n function validator(rule: FormItemRule, value: any) {\n const msg = rule.message || defaultMsg\n if (value === undefined || isNull(value)) {\n // 空值\n return Promise.reject(msg)\n } else if (Array.isArray(value) && value.length === 0) {\n // 数组类型\n return Promise.reject(msg)\n } else if (typeof value === 'string' && value.trim() === '') {\n // 空字符串\n return Promise.reject(msg)\n } else if (typeof value === 'object' && Reflect.has(value, 'checked') && Reflect.has(value, 'halfChecked') && Array.isArray(value.checked) && Array.isArray(value.halfChecked) && value.checked.length === 0 && value.halfChecked.length === 0) {\n // 非关联选择的tree组件\n return Promise.reject(msg)\n }\n return Promise.resolve()\n }\n if (getRequired) {\n if (!rules || rules.length === 0) {\n const trigger = NO_AUTO_LINK_COMPONENTS.includes(component || 'Input') ? 'blur' : 'change'\n rules = [{ required: getRequired, validator, trigger }]\n } else {\n const requiredIndex: number = rules.findIndex(rule => Reflect.has(rule, 'required'))\n\n if (requiredIndex === -1) {\n rules.push({ required: getRequired, validator })\n }\n }\n }\n\n const requiredRuleIndex: number = rules.findIndex(rule => Reflect.has(rule, 'required') && !Reflect.has(rule, 'validator'))\n\n if (requiredRuleIndex !== -1) {\n const rule = rules[requiredRuleIndex]\n const { isShow } = getShow()\n if (!isShow) {\n rule.required = false\n }\n if (component) {\n const msg = rule.message || defaultMsg\n if (isVNode(msg)) {\n rule.renderMessage = () => msg\n } else {\n rule.message = msg\n }\n if (component.includes('Input')) {\n rule.whitespace = true\n }\n setComponentRuleType(rule, component)\n }\n }\n // Maximum input length rule check\n const characterInx = rules.findIndex(val => val.max)\n if (characterInx !== -1 && !rules[characterInx].validator) {\n rules[characterInx].message ||= t('max.form.max', { max: rules[characterInx].max || 0 })\n }\n return rules\n }\n\n function renderComponent() {\n if (!isComponentFormSchema(props.schema)) {\n return null\n }\n\n const { renderComponentContent, component, field, changeEvent, valueField, valueFormat, customRenderComponent } = props.schema\n\n const { autoSetPlaceHolder, size } = props.formProps\n\n const isCheck = component && ['Checkbox'].includes(component)\n\n const bindValueField = valueField || (isCheck ? 'checked' : 'value')\n\n const eventKey = changeEvent || getComponentsEventTrigger(component)\n\n const valueFormatted = valueField && valueField === 'formatted-value'\n\n const propsData: Recordable<any> = {\n clearable: true,\n filterable: true,\n size,\n ...unref(getComponentsProps),\n disabled: unref(getDisable),\n readonly: unref(getReadonly)\n }\n\n const on = {\n [eventKey]: (...args: Array<Nullable<Recordable<any>>>) => {\n const [ev] = args\n\n const target = ev ? ev.target : null\n let value = target ? (isCheck ? target.checked : target.value) : ev\n\n if (valueFormatted) {\n return\n }\n\n if (isFunction(valueFormat)) {\n value = valueFormat({ ...unref(getValues), value })\n }\n props.setFormModel(field, value, props.schema)\n\n if (propsData[eventKey]) {\n propsData[eventKey](...args)\n }\n }\n }\n\n if (valueFormatted) {\n on['onUpdate:formattedValue'] = (value: any) => {\n props.setFormModel(field, value, props.schema)\n if (propsData['onUpdate:formattedValue']) {\n propsData['onUpdate:formattedValue'](value)\n }\n }\n }\n\n const Comp = componentMap.get(component) as ReturnType<typeof defineComponent>\n\n const isCreatePlaceholder = !propsData.disabled && autoSetPlaceHolder\n\n const componentProps = unref(getComponentsProps)\n // RangePicker place is an array\n if (isCreatePlaceholder && !itemIsDateRangeComponent(componentProps)) {\n propsData.placeholder = componentProps?.placeholder || createPlaceholderMessage(component)\n }\n propsData.codeField = field\n propsData.formValues = unref(getValues)\n\n let bindValueValue = props.formModel[field] || props.formModel[field] === 0 ? props.formModel[field] : getComponentDefaultValue(component)\n\n if (itemIsDateComponent(component)) {\n if (!isArray(bindValueValue)) {\n bindValueValue = bindValueValue ? dayjs(bindValueValue).valueOf() : null\n } else {\n bindValueValue = bindValueValue.map(item => dayjs(item).valueOf())\n }\n }\n\n const bindValue: Recordable<any> = {\n [bindValueField]: bindValueValue\n }\n\n const compAttr: Recordable<any> = {\n ...propsData,\n ...on,\n ...bindValue,\n setFormModel: props.setFormModel,\n formActionType: props.formActionType\n }\n\n if (customRenderComponent && isFunction(customRenderComponent)) {\n return <customRenderComponent {...compAttr} />\n }\n\n if (!renderComponentContent) {\n return <Comp {...compAttr} />\n }\n\n const compSlot = isFunction(renderComponentContent)\n ? {\n ...renderComponentContent(unref(getValues), {\n disabled: unref(getDisable),\n readonly: unref(getReadonly)\n })\n }\n : {\n default: () => renderComponentContent\n }\n\n return <Comp {...compAttr}>{compSlot}</Comp>\n }\n\n function renderLabelHelpMessage() {\n const { label, helpMessage, helpComponentProps, subLabel } = props.schema\n const getLabel = isFunction(label) ? label(unref(getValues)) : label\n\n const renderLabel = subLabel ? (\n <span>\n {getLabel} <span class='text-secondary'>{subLabel}</span>\n </span>\n ) : (\n <span class={e('label')}>{getLabel}</span>\n )\n const getHelpMessage = isFunction(helpMessage) ? helpMessage(unref(getValues)) : helpMessage\n if (!getHelpMessage || (Array.isArray(getHelpMessage) && getHelpMessage.length === 0)) {\n return renderLabel\n }\n\n return (\n <span>\n <span class={e('label-help-message')}>\n {renderLabel}\n <XBasicHelp text={getHelpMessage} {...helpComponentProps} />\n </span>\n </span>\n )\n }\n\n function renderItem() {\n const { itemProps, slot, render, field, suffix, component, prefix } = props.schema\n const opts = { disabled: unref(getDisable), readonly: unref(getReadonly), formApi: props.formActionType, componentProps: unref(getComponentsProps) }\n\n if (component === 'BasicTitle') {\n const basicTitleProps = {\n level: 1,\n dot: true,\n type: 'primary',\n style: {\n margin: '8px 0 24px 0'\n },\n ...unref(getComponentsProps)\n } as BasicTitleProps\n\n return <XBasicTitle {...basicTitleProps}>{renderLabelHelpMessage()}</XBasicTitle>\n }\n\n const showSuffix = Boolean(suffix)\n const getSuffix = isFunction(suffix) ? suffix(unref(getValues)) : suffix\n\n const showPrefix = Boolean(prefix)\n const getPrefix = isFunction(prefix) ? prefix(unref(getValues)) : prefix\n\n const formItemProps = {\n path: field,\n 'data-name': field,\n class: { [b()]: true, [e('item-suffix')]: showSuffix, [e('item-prefix')]: showPrefix },\n rule: handleRules(),\n ...itemProps,\n style: {\n '--n-feedback-height': '16px',\n '--n-label-padding': '0 12px 0 12px'\n }\n }\n\n const getContent = () => {\n return (\n <div class={e('content')}>\n {showPrefix && <span class={e('content-prefix')}>{getPrefix}</span>}\n <div class={e('content-inner')}>{slot ? getSlot(slots, slot, unref(getValues), opts) : render ? render(unref(getValues), opts) : renderComponent()}</div>\n {showSuffix && <span class={e('content-suffix')}>{getSuffix}</span>}\n </div>\n )\n }\n\n return <NFormItem {...formItemProps}>{{ label: () => renderLabelHelpMessage(), default: () => getContent() }}</NFormItem>\n }\n\n return () => {\n const { colProps = {}, colSlot, renderColContent, component, slot } = props.schema\n\n if (!((component && componentMap.has(component)) || slot)) {\n return null\n }\n\n const { baseColProps = {} } = props.formProps\n const realColProps = { ...baseColProps, ...colProps }\n const { isIfShow, isShow } = getShow()\n const values = unref(getValues)\n const opts = { disabled: unref(getDisable), readonly: unref(getReadonly) }\n\n const getContent = () => {\n return colSlot ? getSlot(slots, colSlot, values, opts) : renderColContent ? renderColContent(values, opts) : renderItem()\n }\n return (\n isIfShow && (\n <NCol {...realColProps} v-show={isShow}>\n {getContent()}\n </NCol>\n )\n )\n }\n }\n})\n</script>\n","export const BASIC_COL_LEN = 24\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, getCurrentInstance, nextTick, unref, watch } from 'vue'\nimport { useBreakpoint } from '@maxax/hooks'\nimport type { Recordable } from '@maxax/types'\nimport { isBoolean, isFunction, isNumber, isObject } from '@maxax/utils'\nimport { BASIC_COL_LEN } from '../constants'\nimport type { AdvanceState, BasicFormColProps, BasicFormEmitType, BasicFormProps, BasicFormSchema } from '../types'\n\ninterface UseAdvancedContext {\n advanceState: AdvanceState\n emit: BasicFormEmitType\n getProps: ComputedRef<BasicFormProps>\n getSchema: ComputedRef<BasicFormSchema[]>\n formModel: Recordable\n defaultValueRef: Ref<Recordable>\n}\n\nexport function useAdvanced({ advanceState, emit, getProps, getSchema, formModel, defaultValueRef }: UseAdvancedContext) {\n const vm = getCurrentInstance()\n\n const { realWidthRef, screenEnum, screenRef } = useBreakpoint()\n\n const getEmptySpan = computed((): number => {\n if (!advanceState.isAdvanced) {\n return 0\n }\n // For some special cases, you need to manually specify additional blank lines\n const emptySpan = unref(getProps).emptySpan || 0\n\n if (isNumber(emptySpan)) {\n return emptySpan\n }\n if (isObject(emptySpan)) {\n const { span = 0 } = emptySpan\n const screen = unref(screenRef) as string\n\n const screenSpan = (emptySpan as any)[screen.toLowerCase()]\n return screenSpan || span || 0\n }\n return 0\n })\n\n watch(\n [() => unref(getSchema), () => advanceState.isAdvanced, () => unref(realWidthRef)],\n () => {\n const { showAdvancedButton } = unref(getProps)\n if (showAdvancedButton) {\n nextTick(() => {\n updateAdvanced()\n })\n }\n },\n { immediate: true }\n )\n\n function getAdvanced(itemCol: Partial<BasicFormColProps>, itemColSum = 0, isLastAction = false) {\n const width = unref(realWidthRef)\n\n const mdWidth = Number.parseInt(itemCol.md as string, 10) || Number.parseInt(itemCol.xs as string, 10) || Number.parseInt(itemCol.sm as string, 10) || (itemCol.span as number) || BASIC_COL_LEN\n const lgWidth = Number.parseInt(itemCol.lg as string, 10) || mdWidth\n const xlWidth = Number.parseInt(itemCol.xl as string, 10) || lgWidth\n const xxlWidth = Number.parseInt(itemCol.xxl as string, 10) || xlWidth\n\n let $itemColSum = itemColSum\n\n if (width <= screenEnum.LG) {\n $itemColSum += mdWidth\n } else if (width < screenEnum.XL) {\n $itemColSum += lgWidth\n } else if (width < screenEnum.XXL) {\n $itemColSum += xlWidth\n } else {\n $itemColSum += xxlWidth\n }\n\n if (isLastAction) {\n advanceState.hideAdvanceBtn = false\n if ($itemColSum <= BASIC_COL_LEN * 2) {\n // When less than or equal to 2 lines, the collapse and expand buttons are not displayed\n advanceState.hideAdvanceBtn = true\n advanceState.isAdvanced = true\n } else if ($itemColSum > BASIC_COL_LEN * 2 && $itemColSum <= BASIC_COL_LEN * (unref(getProps).autoAdvancedLine || 3)) {\n advanceState.hideAdvanceBtn = false\n\n // More than 3 lines collapsed by default\n } else if (!advanceState.isLoad) {\n advanceState.isLoad = true\n advanceState.isAdvanced = !advanceState.isAdvanced\n }\n return { isAdvanced: advanceState.isAdvanced, itemColSum: $itemColSum }\n }\n if ($itemColSum > BASIC_COL_LEN * (unref(getProps).alwaysShowLines || 1)) {\n return { isAdvanced: advanceState.isAdvanced, itemColSum: $itemColSum }\n }\n // The first line is always displayed\n return { isAdvanced: true, itemColSum: $itemColSum }\n }\n\n const fieldsIsAdvancedMap: Recordable = {}\n\n function updateAdvanced() {\n let itemColSum = 0\n let realItemColSum = 0\n const { baseColProps = {} } = unref(getProps)\n\n for (const schema of unref(getSchema)) {\n const { show, ifShow, colProps } = schema\n const renderCallbackParams = {\n schema,\n model: formModel,\n field: schema.field,\n values: { ...unref(defaultValueRef), ...formModel }\n }\n let isShow = true\n isShow && isBoolean(ifShow) && (isShow = ifShow)\n isShow && isFunction(ifShow) && (isShow = ifShow(renderCallbackParams))\n isShow && isBoolean(show) && (isShow = show)\n isShow && isFunction(show) && (isShow = show(renderCallbackParams))\n\n if (isShow && (colProps || baseColProps)) {\n const { itemColSum: sum, isAdvanced } = getAdvanced({ ...baseColProps, ...colProps }, itemColSum)\n\n itemColSum = sum || 0\n if (isAdvanced) {\n realItemColSum = itemColSum\n }\n fieldsIsAdvancedMap[schema.field] = isAdvanced\n }\n }\n\n // 确保页面发送更新\n vm?.proxy?.$forceUpdate()\n\n advanceState.actionSpan = (realItemColSum % BASIC_COL_LEN) + unref(getEmptySpan)\n\n getAdvanced(unref(getProps).actionColOptions || { span: BASIC_COL_LEN }, itemColSum, true)\n\n emit('advanced-change', advanceState.isAdvanced)\n }\n\n function handleToggleAdvanced() {\n advanceState.isAdvanced = !advanceState.isAdvanced\n }\n\n return { handleToggleAdvanced, fieldsIsAdvancedMap }\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { nextTick, unref, watchEffect } from 'vue'\nimport type { Nullable } from '@maxax/types'\nimport type { BasicFormProps, BasicFormSchema, FormActionType } from '../types'\n\ninterface UseAutoFocusContext {\n getSchema: ComputedRef<BasicFormSchema[]>\n getProps: ComputedRef<BasicFormProps>\n isInitedDefault: Ref<boolean>\n formElRef: Ref<FormActionType>\n}\n\nexport function useAutoFocus({ getSchema, getProps, formElRef, isInitedDefault }: UseAutoFocusContext) {\n watchEffect(async () => {\n if (unref(isInitedDefault) || !unref(getProps).autoFocusFirstItem) {\n return\n }\n await nextTick()\n const schemas = unref(getSchema)\n const formEl = unref(formElRef)\n const el = (formEl as any)?.$el as HTMLElement\n if (!formEl || !el || !schemas || schemas.length === 0) {\n return\n }\n\n const firstItem = schemas[0]\n // Only open when the first form item is input type\n if (!firstItem.component || !firstItem.component.includes('Input')) {\n return\n }\n\n const inputEl = el.querySelector('.m-row:first-child input') as Nullable<HTMLInputElement>\n if (!inputEl) return\n inputEl?.focus()\n })\n}\n","import type { Component } from 'vue'\nimport { tryOnUnmounted } from '@vueuse/core'\nimport { isPascalCase } from '@maxax/utils'\nimport { basicFormAddComponent, basicFormDelComponent } from '../componentMap'\nimport type { ComponentType } from '../types'\n\nexport function useComponentRegister<T extends string, R extends Component>(compName: ComponentType | T, comp: R) {\n if (!isPascalCase(compName)) {\n throw new Error('compName must be in PascalCase')\n }\n\n basicFormAddComponent(compName, comp)\n tryOnUnmounted(() => {\n basicFormDelComponent(compName)\n })\n}\n","import type { Ref } from 'vue'\nimport { computed, unref } from 'vue'\nimport { useNamespace } from '../../../composable'\nimport type { BasicFormProps } from '../types'\n\nexport function useFormClass(propsRef: Ref<BasicFormProps>) {\n const { b, is } = useNamespace('basic-form')\n\n const getWrapperClass = computed(() => {\n const { border, card } = unref(propsRef)\n return [b(), { [is('bordered')]: border, [is('card')]: card }]\n })\n\n const getFormClass = computed(() => {\n return { [is('compact')]: unref(propsRef).compact }\n })\n\n return { getWrapperClass, getFormClass }\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { nextTick, toRaw, unref } from 'vue'\nimport type { Fn, Recordable } from '@maxax/types'\nimport { deepMerge, isArray, isFunction, isNil, isString, tryConstructArray } from '@maxax/utils'\nimport { cloneDeep, get, has, isPlainObject, uniqBy } from 'lodash-es'\nimport type { FormValidateCallback, ShouldRuleBeApplied } from 'naive-ui/es/form/src/interface'\nimport { checkIsInput, checkIsRangeSlider, isIncludeSimpleComponents, itemIsDateComponent, itemIsUploadComponent } from '../helper'\nimport type { BasicFormEmitType, BasicFormProps, BasicFormSchema, FormActionType } from '../types'\n\ninterface UseFormEventsContext {\n emit: BasicFormEmitType\n getProps: ComputedRef<BasicFormProps>\n getSchema: ComputedRef<BasicFormSchema[]>\n formModel: Recordable\n defaultValueRef: Ref<Recordable>\n formElRef: Ref<FormActionType>\n schemaRef: Ref<BasicFormSchema[]>\n handleFormValues: Fn\n initDefault: Fn\n}\n\nexport function useFormEvents({ emit, getProps, getSchema, formModel, defaultValueRef, formElRef, schemaRef, handleFormValues, initDefault }: UseFormEventsContext): FormActionType {\n // 获取表单fields\n const getAllFields = () =>\n unref(getSchema)\n .map(item => [...(item.fields || []), item.field])\n .flat(1)\n .filter(Boolean)\n\n /**\n * @description: Delete based on field name\n */\n async function removeSchemaByField(fields: string | string[]): Promise<void> {\n const schemaList: BasicFormSchema[] = cloneDeep(unref(getSchema))\n if (!fields) {\n return\n }\n\n let fieldList = (isString(fields) ? [fields] : fields) as string[]\n if (isString(fields)) {\n fieldList = [fields as string]\n }\n for (const field of fieldList) {\n $removeSchemaByField(field, schemaList)\n }\n schemaRef.value = schemaList\n\n initDefault()\n }\n\n /**\n * @description: Delete based on field name\n */\n function $removeSchemaByField(field: string, schemaList: BasicFormSchema[]): void {\n if (isString(field)) {\n const index = schemaList.findIndex(schema => schema.field === field)\n if (index !== -1) {\n Reflect.deleteProperty(formModel, field)\n schemaList.splice(index, 1)\n }\n }\n }\n\n /**\n * @description: Insert after a certain field, if not insert the last\n */\n async function appendSchemaByField(schema: BasicFormSchema | BasicFormSchema[], prefixField?: string, first = false) {\n const schemaList: BasicFormSchema[] = cloneDeep(unref(getSchema))\n const addSchemaIds: string[] = Array.isArray(schema) ? schema.map(item => item.field) : [schema.field]\n if (schemaList.find(item => addSchemaIds.includes(item.field))) {\n throw new Error('[error]:There are schemas that have already been added')\n }\n const index = schemaList.findIndex(item => item.field === prefixField)\n const $schemaList = isArray(schema) ? (schema as BasicFormSchema[]) : [schema as BasicFormSchema]\n if (!prefixField || index === -1 || first) {\n first ? schemaList.unshift(...$schemaList) : schemaList.push(...$schemaList)\n } else if (index !== -1) {\n schemaList.splice(index + 1, 0, ...$schemaList)\n }\n schemaRef.value = schemaList\n $setDefaultValue(schema)\n\n initDefault()\n }\n\n async function resetSchema(data: Partial<BasicFormSchema> | Array<Partial<BasicFormSchema>>) {\n let updateData: Array<Partial<BasicFormSchema>> = []\n if (isPlainObject(data)) {\n updateData.push(data as BasicFormSchema)\n }\n if (isArray(data)) {\n updateData = [...data]\n }\n\n const hasField = updateData.every(item => isIncludeSimpleComponents(item.component) || (Reflect.has(item, 'field') && item.field))\n\n if (!hasField) {\n throw new Error('[error]:All children of the form Schema array that need to be updated must contain the \"field\" field')\n }\n schemaRef.value = updateData as BasicFormSchema[]\n\n initDefault()\n }\n\n async function updateSchema(data: Partial<BasicFormSchema> | Array<Partial<BasicFormSchema>>) {\n let updateData: Array<Partial<BasicFormSchema>> = []\n if (isPlainObject(data)) {\n updateData.push(data as BasicFormSchema)\n }\n if (isArray(data)) {\n updateData = [...data]\n }\n\n const hasField = updateData.every(item => isIncludeSimpleComponents(item.component) || (Reflect.has(item, 'field') && item.field))\n\n if (!hasField) {\n throw new Error('[error]:All children of the form Schema array that need to be updated must contain the \"field\" field')\n }\n const schema: BasicFormSchema[] = []\n const updatedSchema: BasicFormSchema[] = []\n unref(getSchema).forEach(val => {\n const updatedItem = updateData.find(item => val.field === item.field)\n\n if (updatedItem) {\n const newSchema = deepMerge(val, updatedItem)\n updatedSchema.push(newSchema as BasicFormSchema)\n schema.push(newSchema as BasicFormSchema)\n } else {\n schema.push(val)\n }\n })\n $setDefaultValue(updatedSchema)\n\n schemaRef.value = uniqBy(schema, 'field')\n\n initDefault()\n }\n\n function getFieldsValue(): Recordable {\n const formEl = unref(formElRef)\n if (!formEl) return {}\n return handleFormValues(toRaw(unref(formModel)))\n }\n\n async function setFieldsValue(values: Recordable): Promise<void> {\n const valuesKeys = Object.keys(values)\n if (valuesKeys.length === 0) {\n return\n }\n const fields = getAllFields()\n\n if (unref(getProps).above) {\n valuesKeys.forEach(key => {\n if (!fields.includes(key)) {\n const value = get(values, key)\n unref(formModel)[key] = value\n }\n })\n }\n\n const validKeys: string[] = []\n fields.forEach(key => {\n const schema = unref(getSchema).find(item => item.field === key)\n const value = get(values, key)\n const hasKey = has(values, key)\n const { componentProps } = schema || {}\n let $props = componentProps as any\n if (isFunction(componentProps)) {\n $props = $props({\n formModel: unref(formModel),\n formActionType: {}\n })\n }\n\n let constructValue\n const setDateFieldValue = (v: any) => {\n return v ? ($props?.valueFormat ? v : v) : null\n }\n\n // Adapt date component\n if (itemIsDateComponent(schema?.component)) {\n constructValue = tryConstructArray(key, values)\n if (constructValue) {\n const fieldValue = constructValue || value\n if (Array.isArray(fieldValue)) {\n const arr: any[] = []\n for (const ele of fieldValue) {\n arr.push(setDateFieldValue(ele))\n }\n unref(formModel)[key] = arr\n validKeys.push(key)\n } else {\n unref(formModel)[key] = setDateFieldValue(fieldValue)\n validKeys.push(key)\n }\n }\n }\n // Adapt upload component\n if (itemIsUploadComponent(schema?.component)) {\n constructValue = get(value, key)\n const fieldValue = constructValue || value\n if (fieldValue) {\n if (isArray(fieldValue)) {\n unref(formModel)[key] = fieldValue\n } else if (typeof fieldValue == 'string') {\n unref(formModel)[key] = [fieldValue]\n }\n }\n validKeys.push(key)\n return\n }\n\n // Adapt common component\n if (hasKey) {\n constructValue = get(value, key)\n const fieldValue = constructValue || value\n unref(formModel)[key] = fieldValue\n if ($props?.onChange) {\n $props?.onChange(fieldValue)\n }\n validKeys.push(key)\n } else {\n // Key not exist\n // Refer:https://github.com/vbenjs/vue-vben-admin/issues/3795\n }\n })\n validateFields(validKeys).catch(_ => {\n console.error(_)\n })\n }\n\n async function resetFields(): Promise<void> {\n const { resetFunc, submitOnReset } = unref(getProps)\n resetFunc && isFunction(resetFunc) && (await resetFunc())\n\n const formEl = unref(formElRef)\n if (!formEl) return\n\n Object.keys(formModel).forEach(key => {\n const schema = unref(getSchema).find(item => item.field === key)\n const defaultValueObj = schema?.defaultValueObj\n const fieldKeys = Object.keys(defaultValueObj || {})\n if (fieldKeys.length) {\n fieldKeys.forEach(field => {\n formModel[field] = defaultValueObj![field]\n })\n }\n formModel[key] = getDefaultValue(schema, defaultValueRef, key)\n })\n nextTick(() => restoreValidation())\n\n emit('reset', toRaw(formModel))\n submitOnReset && handleSubmit()\n }\n\n function $setDefaultValue(data: BasicFormSchema | BasicFormSchema[]) {\n let schemas: BasicFormSchema[] = []\n if (isPlainObject(data)) {\n schemas.push(data as BasicFormSchema)\n }\n if (isArray(data)) {\n schemas = [...data]\n }\n\n const obj: Recordable = {}\n const currentFieldsValue = getFieldsValue()\n\n schemas.forEach(item => {\n if (!isIncludeSimpleComponents(item.component) && Reflect.has(item, 'field') && item.field && !isNil(item.defaultValue) && (!(item.field in currentFieldsValue) || isNil(currentFieldsValue[item.field]))) {\n obj[item.field] = item.defaultValue\n }\n })\n setFieldsValue(obj)\n }\n\n function resetDefaultField(nameList?: string[]) {\n if (!Array.isArray(nameList)) {\n return\n }\n if (Array.isArray(nameList) && nameList.length === 0) {\n return\n }\n const validKeys: string[] = []\n const keys = Object.keys(unref(formModel))\n if (!keys) {\n return\n }\n nameList.forEach((key: any) => {\n if (keys.includes(key)) {\n validKeys.push(key)\n unref(formModel)[key] = cloneDeep(unref(get(defaultValueRef.value, key)))\n }\n })\n validateFields(validKeys).catch(_ => {\n console.error(_)\n })\n }\n\n function restoreValidation() {\n unref(formElRef)?.restoreValidation()\n }\n\n async function validateFields(nameList: string[]) {\n await unref(formElRef)?.validate(\n () => true,\n rule => nameList.includes(rule?.key || '')\n )\n return getFieldsValue()\n }\n\n async function validate(callback?: FormValidateCallback, shouldRuleBeApplied?: ShouldRuleBeApplied) {\n return await unref(formElRef)?.validate(callback, shouldRuleBeApplied)\n }\n\n async function validateForm(): Promise<Recordable> {\n return new Promise((resolve, reject) => {\n unref(formElRef)?.validate(errors => {\n if (errors) {\n reject(errors)\n } else {\n resolve(getFieldsValue())\n }\n })\n })\n }\n\n async function setProps(formProps: Partial<BasicFormProps>): Promise<void> {\n await unref(formElRef)?.setProps(formProps)\n }\n\n async function trigger(data: Recordable) {\n await unref(formElRef)?.trigger(data)\n }\n\n async function handleSubmit(e?: Event): Promise<void> {\n e && e.preventDefault()\n const { submitFunc } = unref(getProps)\n if (submitFunc && isFunction(submitFunc)) {\n await submitFunc()\n return\n }\n const formEl = unref(formElRef)\n if (!formEl) return\n try {\n await validate()\n emit('submit', getFieldsValue())\n } catch (error: any) {\n if (error?.outOfDate === false && error?.errorFields) {\n return\n }\n throw new Error(error)\n }\n }\n\n async function getFieldsValueAsync() {\n try {\n await validate()\n return getFieldsValue()\n } catch (error: any) {\n throw new Error(error)\n }\n }\n\n return {\n submit: handleSubmit,\n updateSchema,\n resetSchema,\n removeSchemaByField,\n appendSchemaByField,\n setFieldsValue,\n getFieldsValue,\n validate,\n validateForm,\n resetFields,\n validateFields,\n restoreValidation,\n setProps,\n resetDefaultField,\n getFieldsValueAsync,\n trigger\n }\n}\n\nfunction getDefaultValue(schema: BasicFormSchema | undefined, defaultValueRef: UseFormEventsContext['defaultValueRef'], key: string) {\n let defaultValue = cloneDeep(defaultValueRef.value[key])\n const isInput = checkIsInput(schema)\n if (isInput) {\n return !isNil(defaultValue) ? defaultValue : undefined\n }\n if (!defaultValue && schema && checkIsRangeSlider(schema)) {\n defaultValue = [0, 0]\n }\n if (!defaultValue && schema && schema.component === 'ApiTree') {\n defaultValue = []\n }\n return defaultValue\n}\n","import type { Ref } from 'vue'\nimport { computed, unref } from 'vue'\nimport type { BasicFormProps } from '../types'\n\nexport function useFormGrid(propsRef: Ref<BasicFormProps>) {\n const getRow = computed(() => {\n const { baseRowStyle = {}, rowProps } = unref(propsRef)\n return {\n style: baseRowStyle,\n ...rowProps\n }\n })\n\n return { getRow }\n}\n","import type { Ref } from 'vue'\nimport { computed, unref } from 'vue'\nimport type { Recordable } from '@maxax/types'\nimport { cloneDeep, isArray, isFunction } from '@maxax/utils'\nimport dayjs from 'dayjs'\nimport { isIncludeSimpleComponents, itemIsDateComponent, itemIsUploadComponent } from '../helper'\nimport type { BasicFormProps, BasicFormSchema, FormActionType } from '../types'\n\ninterface UseFormSchemaContext {\n getProps: Ref<BasicFormProps>\n schemaRef: Ref<BasicFormSchema[] | null>\n formModel: Recordable\n}\n\nexport function useFormSchema({ getProps, schemaRef, formModel }: UseFormSchemaContext) {\n const getSchema = computed((): BasicFormSchema[] => {\n const schemas: Array<BasicFormSchema & { ifshow2?: boolean }> = cloneDeep(unref(schemaRef) || unref(getProps).schemas || [])\n for (const schema of schemas) {\n const { defaultValue, component, componentProps = {}, isHandleDateDefaultValue = true, field, isHandleDefaultValue = true, valueFormat, ifShow } = schema\n\n // Fix:修复showAdvancedButton为true时,FormSchema中ifshow是与model有关的函数时候,查询按钮位置不重新计算的问题。\n if (unref(getProps).showAdvancedButton) {\n schema.ifshow2 = isFunction(ifShow) ? ifShow({ schema, values: formModel, model: formModel, field }) : ifShow\n }\n\n // Handle date type\n if (isHandleDateDefaultValue && defaultValue && component && itemIsDateComponent(component)) {\n const opt = {\n schema,\n tableAction: {},\n formModel,\n formActionType: {} as FormActionType\n }\n const formattedValueFormat = componentProps ? (typeof componentProps === 'function' ? componentProps(opt).vFormat : componentProps.vFormat) : null\n if (!Array.isArray(defaultValue)) {\n schema.defaultValue = formattedValueFormat ? dayjs(defaultValue).format(formattedValueFormat) : defaultValue\n } else {\n const def: any[] = []\n defaultValue.forEach(item => {\n def.push(formattedValueFormat ? dayjs(item).format(formattedValueFormat) : item)\n })\n schema.defaultValue = def\n }\n }\n // Handle upload type\n if (defaultValue && itemIsUploadComponent(schema?.component)) {\n if (isArray(defaultValue)) {\n schema.defaultValue = defaultValue\n } else if (typeof defaultValue == 'string') {\n schema.defaultValue = [defaultValue]\n }\n }\n\n // Handle schema.valueFormat\n if (isHandleDefaultValue && defaultValue && component && isFunction(valueFormat)) {\n schema.defaultValue = valueFormat({\n value: defaultValue,\n schema,\n model: formModel,\n field\n })\n }\n }\n if (unref(getProps).showAdvancedButton) {\n return schemas.filter(schema => !isIncludeSimpleComponents(schema.component)) as BasicFormSchema[]\n }\n return schemas as BasicFormSchema[]\n })\n return { getSchema }\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { unref } from 'vue'\nimport type { Recordable } from '@maxax/types'\nimport { isArray, isEmpty, isFunction, isNil, isObject, isString, tryDeconstructArray, tryDeconstructObject } from '@maxax/utils'\nimport dayjs from 'dayjs'\nimport { cloneDeep, get, isNumber, set, unset } from 'lodash-es'\nimport type { BasicFormProps, BasicFormSchema } from '../types'\n\ninterface UseFormValuesContext {\n defaultValueRef: Ref<any>\n getSchema: ComputedRef<BasicFormSchema[]>\n getProps: ComputedRef<BasicFormProps>\n formModel: Recordable\n}\nexport function useFormValues({ getProps, defaultValueRef, getSchema, formModel }: UseFormValuesContext) {\n // Processing form values\n function handleFormValues(values: Recordable) {\n if (!isObject(values)) {\n return {}\n }\n const res: Recordable = {}\n for (const item of Object.entries(values)) {\n let [, value] = item\n const [key] = item\n if (!key || (isArray(value) && value.length === 0) || isFunction(value)) {\n continue\n }\n const transformDateFunc = unref(getProps).transformDateFunc\n if (isObject(value)) {\n value = transformDateFunc?.(value)\n }\n\n if (isArray(value) && value[0]?.format && value[1]?.format) {\n value = value.map(it => transformDateFunc?.(it))\n }\n // Remove spaces\n if (isString(value)) {\n value = value.trim()\n }\n if (!tryDeconstructArray(key, value, res) && !tryDeconstructObject(key, value, res)) {\n // 没有解构成功的,按原样赋值\n set(res, key, value)\n }\n }\n return handleRangeTimeValue(res)\n }\n\n /**\n * @description: Processing time interval parameters\n */\n function handleRangeTimeValue(values: Recordable) {\n const fieldMapToTime = unref(getProps).fieldMapToTime\n\n if (!fieldMapToTime || !Array.isArray(fieldMapToTime)) {\n return values\n }\n\n for (const [field, [startTimeKey, endTimeKey], format = 'YYYY-MM-DD'] of fieldMapToTime) {\n if (!field || !startTimeKey || !endTimeKey) {\n continue\n }\n // If the value to be converted is empty, remove the field\n if (!get(values, field)) {\n unset(values, field)\n continue\n }\n\n const [startTime, endTime]: string[] = get(values, field)\n\n const [startTimeFormat, endTimeFormat] = Array.isArray(format) ? format : [format, format]\n\n if ((!isNil(startTime) && !isEmpty(startTime) && !isNumber(startTime)) || (startTime && isNumber(startTime))) {\n set(values, startTimeKey, formatTime(startTime, startTimeFormat))\n }\n if ((!isNil(endTime) && !isEmpty(endTime) && !isNumber(endTime)) || (endTime && isNumber(endTime))) {\n set(values, endTimeKey, formatTime(endTime, endTimeFormat))\n }\n unset(values, field)\n }\n\n return values\n }\n\n function formatTime(time: string, format: string) {\n if (format === 'second') {\n return dayjs(time).unix()\n }\n if (format === 'timestamp') {\n return dayjs(time).valueOf()\n }\n if (format === 'timestampStartDay') {\n return dayjs(time).startOf('day').unix()\n }\n return dayjs(time).format(format)\n }\n\n function initDefault() {\n const schemas = unref(getSchema)\n const obj: Recordable = {}\n schemas.forEach(item => {\n const { defaultValue, defaultValueObj, componentProps = {} } = item\n const fieldKeys = Object.keys(defaultValueObj || {})\n if (fieldKeys.length) {\n fieldKeys.forEach(field => {\n obj[field] = defaultValueObj![field]\n if (formModel[field] === undefined) {\n formModel[field] = defaultValueObj![field]\n }\n })\n }\n if (!isNil(defaultValue)) {\n obj[item.field] = defaultValue\n\n if (formModel[item.field] === undefined) {\n formModel[item.field] = defaultValue\n }\n }\n if (!isNil(componentProps?.defaultValue)) {\n obj[item.field] = componentProps?.defaultValue\n if (formModel[item.field] === undefined) {\n formModel[item.field] = componentProps?.defaultValue\n }\n }\n })\n defaultValueRef.value = cloneDeep(obj)\n }\n\n return { handleFormValues, initDefault }\n}\n","<script setup lang=\"ts\">\nimport type { Ref } from 'vue'\nimport { computed, nextTick, reactive, ref, unref, useAttrs, useSlots, watch } from 'vue'\nimport { useDebounceFn } from '@vueuse/core'\nimport type { Recordable } from '@maxax/types'\nimport { deepMerge } from '@maxax/utils'\nimport type { FormProps } from 'naive-ui'\nimport { NForm, NRow } from 'naive-ui'\nimport FormAction from './components/FormAction.vue'\nimport FormItem from './components/FormItem.vue'\nimport { createBasicFormContext } from './context'\nimport { useAdvanced, useAutoFocus, useFormClass, useFormEvents, useFormGrid, useFormSchema, useFormValues } from './hooks'\nimport type { AdvanceState, BasicFormEmitType, BasicFormProps, BasicFormSchema, FormActionType } from './types'\n\nconst props = withDefaults(defineProps<BasicFormProps>(), {\n border: false,\n card: false,\n above: false,\n model: () => ({}),\n fieldMapToTime: () => [],\n schemas: () => [],\n autoSetPlaceHolder: true,\n autoSubmitOnEnter: true,\n emptySpan: 0,\n transformDateFunc: (date: any) => date?.format?.('YYYY-MM-DD HH:mm:ss') ?? date,\n rulesMessageJoinLabel: true,\n autoAdvancedLine: 3,\n alwaysShowLines: 1,\n showActionButtonGroup: true,\n showResetButton: true,\n showSubmitButton: true,\n showAdvancedButton: true,\n labelPlacement: 'left',\n requireMarkPlacement: 'left',\n labelWidth: 'auto',\n showLabel: true,\n showFeedback: true,\n showRequireMark: undefined,\n baseColProps: () => ({\n span: 6\n })\n})\nconst emit = defineEmits<BasicFormEmitType>()\nconst attrs = useAttrs()\nconst slots = useSlots() as any\n\nconst formModel = reactive<Record<string, any>>({})\n\nconst advanceState = reactive<AdvanceState>({\n isAdvanced: true,\n hideAdvanceBtn: false,\n isLoad: false,\n actionSpan: 6\n})\n\nconst defaultValueRef = ref({})\nconst isInitedDefaultRef = ref(false)\nconst propsRef = ref<Partial<BasicFormProps>>()\nconst schemaRef = ref<BasicFormSchema[] | null>(null)\nconst formElRef = ref<FormActionType | null>(null)\n\nconst getProps = computed(() => {\n return { ...props } as BasicFormProps\n})\n\nconst { getWrapperClass, getFormClass } = useFormClass(getProps)\nconst { getRow } = useFormGrid(getProps)\nconst { getSchema } = useFormSchema({ getProps, formModel, schemaRef: schemaRef as Ref<BasicFormSchema[]> })\nconst { handleToggleAdvanced, fieldsIsAdvancedMap } = useAdvanced({ advanceState, emit, getProps, getSchema, formModel, defaultValueRef })\nconst { handleFormValues, initDefault } = useFormValues({ getProps, defaultValueRef, getSchema, formModel })\nconst { submit, getFieldsValueAsync, removeSchemaByField, appendSchemaByField, resetSchema, updateSchema, validate, validateForm, resetFields, validateFields, restoreValidation, setFieldsValue, getFieldsValue, resetDefaultField } = useFormEvents({\n emit,\n getProps,\n formModel,\n getSchema,\n defaultValueRef,\n formElRef: formElRef as Ref<FormActionType>,\n schemaRef: schemaRef as Ref<BasicFormSchema[]>,\n handleFormValues,\n initDefault\n})\nuseAutoFocus({ getSchema, getProps, isInitedDefault: isInitedDefaultRef, formElRef: formElRef as Ref<FormActionType> })\n\nconst getBindValue = computed(() => ({ ...attrs, ...unref(getProps) }) as FormProps)\n\nconst getFormActionBindProps = computed(() => ({ ...getProps.value, ...advanceState }) as InstanceType<typeof FormAction>['$props'])\n\nasync function setProps(formProps: Partial<FormProps>): Promise<void> {\n propsRef.value = deepMerge(unref(propsRef) || {}, formProps)\n}\n\nwatch(\n () => unref(getProps).model,\n () => {\n const { model } = unref(getProps)\n if (!model) return\n setFieldsValue(model)\n },\n {\n immediate: true\n }\n)\n\nwatch(\n () => props.schemas,\n schemas => {\n resetSchema(schemas ?? [])\n }\n)\n\nwatch(\n () => getSchema.value,\n schema => {\n nextTick(() => {\n // Solve the problem of modal adaptive height calculation when the form is placed in the modal\n // ModalFn?.redoModalHeight?.()\n })\n if (unref(isInitedDefaultRef)) {\n return\n }\n if (schema?.length) {\n initDefault()\n isInitedDefaultRef.value = true\n }\n },\n { deep: true, immediate: true }\n)\n\nwatch(\n () => formModel,\n useDebounceFn(() => {\n unref(getProps).submitOnChange && submit()\n }, 300),\n { deep: true }\n)\n\nfunction setFormModel(key: string, value: any, schema: BasicFormSchema) {\n formModel[key] = value\n emit('fieldValueChange', key, value)\n // 优化验证,这里如果是autoLink=false手动关联的情况下才会再次触发此函数\n if (schema && schema.itemProps && !schema.itemProps.autoLink) {\n validateFields([key]).catch(_ => {})\n }\n}\n\nfunction trigger(data: Recordable) {\n emit('trigger', data)\n}\n\nconst formActionType = {\n submit,\n removeSchemaByField,\n appendSchemaByField,\n resetSchema,\n updateSchema,\n validate,\n validateForm,\n resetFields,\n validateFields,\n restoreValidation,\n setFieldsValue,\n getFieldsValue,\n setProps,\n resetDefaultField,\n getFieldsValueAsync,\n trigger\n}\n\ncreateBasicFormContext({\n resetAction: resetFields,\n submitAction: submit\n})\n\ndefineExpose({\n ...formActionType\n})\n</script>\n\n<template>\n <div :class=\"getWrapperClass\">\n <NForm ref=\"formElRef\" v-bind=\"getBindValue\" :class=\"getFormClass\" :model=\"formModel\">\n <NRow v-bind=\"getRow\">\n <slot name=\"formHeader\" />\n <template v-for=\"schema in getSchema\" :key=\"schema.field\">\n <FormItem :is-advanced=\"fieldsIsAdvancedMap[schema.field]\" :form-action-type=\"formActionType\" :schema=\"schema\" :form-props=\"getProps\" :all-default-values=\"defaultValueRef\" :form-model=\"formModel\" :set-form-model=\"setFormModel\">\n <template v-for=\"item in Object.keys(slots)\" #[item]=\"data\">\n <slot :name=\"item\" v-bind=\"data || {}\" />\n </template>\n </FormItem>\n </template>\n <FormAction v-bind=\"getFormActionBindProps\" @toggle-advanced=\"handleToggleAdvanced\">\n <template v-for=\"item in ['resetBefore', 'submitBefore', 'advanceBefore', 'advanceAfter']\" #[item]=\"data\">\n <slot :name=\"item\" v-bind=\"data || {}\" />\n </template>\n </FormAction>\n <slot name=\"formFooter\" />\n </NRow>\n </NForm>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicForm from './BasicForm.vue'\nimport { useComponentRegister } from './hooks'\n\nexport const XBasicForm: SFCWithInstall<typeof BasicForm> = withInstall(BasicForm)\nexport type BasicFormInstance = InstanceType<typeof BasicForm>\n\nexport default XBasicForm\n\nexport * from './interface'\nexport { useComponentRegister }\n","<script lang=\"ts\" setup>\nimport { useNamespace } from '../../composable'\nimport type { BasicGradientTitleProps } from './interface'\n\ndefineProps<BasicGradientTitleProps>()\n\nconst { b, e } = useNamespace('basic-gradient-title')\n</script>\n\n<template>\n <div :class=\"b()\">\n <div :class=\"e('text')\">\n <span :class=\"e('text-inner')\">\n <slot>{{ text }}</slot>\n </span>\n </div>\n <div class=\"line\" :class=\"[e('line-top')]\" />\n <div class=\"line\" :class=\"[e('line-bottom')]\" />\n </div>\n</template>\n","export const basicGradientTitleProps = {} as const\n\nexport interface BasicGradientTitleProps {\n text?: string\n}\n\nexport interface BasicGradientTitleContext {\n name: string\n}\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicGradientTitle from './BasicGradientTitle.vue'\n\nexport const XBasicGradientTitle: SFCWithInstall<typeof BasicGradientTitle> = withInstall(BasicGradientTitle)\nexport type BasicGradientTitleInstance = InstanceType<typeof BasicGradientTitle>\n\nexport default XBasicGradientTitle\n\nexport * from './interface'\n","import type { ExtractPropTypes } from 'vue'\n\nexport const basicIconOnlineProps = {\n icon: {\n type: String,\n default: ''\n }\n}\n\nexport type BasicIconOnlineProps = ExtractPropTypes<typeof basicIconOnlineProps>\n\nexport interface BasicIconOnlineContext {\n name: string\n}\n","import { computed, defineComponent } from 'vue'\nimport { Icon as IconifyIcon } from '@iconify/vue'\nimport { useNamespace } from '../../composable'\nimport { basicIconOnlineProps } from './interface'\n\nexport default defineComponent({\n name: 'XBasicIconOnline',\n props: basicIconOnlineProps,\n setup(props, { attrs }) {\n const { b } = useNamespace('basic-icon-online')\n\n const style = computed(() => {\n return {\n outline: 'none',\n ...(attrs.style || {})\n }\n })\n\n return () => {\n return <IconifyIcon class={b()} icon={props.icon} {...attrs} style={style.value} />\n }\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicIconOnline from './BasicIconOnline'\n\nexport const XBasicIconOnline: SFCWithInstall<typeof BasicIconOnline> = withInstall(BasicIconOnline)\nexport type BasicIconOnlineInstance = InstanceType<typeof BasicIconOnline>\n\nexport default XBasicIconOnline\n\nexport * from './interface'\n","/**\n * 想要哪个图标集 自行添加即可 请注意此处添加的图标集均为在线图标(https://iconify.design/docs/api/#public-api) 如果项目在内网环境下 参考 https://www.bilibili.com/video/BV17S4y1J79d?p=4&vd_source=5a992808de6229d78e7810536c5f9ab3 教程自行离线部署图标\n * https://icones.js.org/collections/图标集前缀名-meta.json(如:https://icones.js.org/collections/ri-meta.json 取icons字段,可获得当前图标集的所有图标)\n */\nexport const IconJson = {\n // https://icones.js.org/collections/ep-meta.json\n 'ep:': [\n 'add-location',\n 'aim',\n 'alarm-clock',\n 'apple',\n 'arrow-down',\n 'arrow-down-bold',\n 'arrow-left',\n 'arrow-left-bold',\n 'arrow-right',\n 'arrow-right-bold',\n 'arrow-up',\n 'arrow-up-bold',\n 'avatar',\n 'back',\n 'baseball',\n 'basketball',\n 'bell',\n 'bell-filled',\n 'bicycle',\n 'bottom',\n 'bottom-left',\n 'bottom-right',\n 'bowl',\n 'box',\n 'briefcase',\n 'brush',\n 'brush-filled',\n 'burger',\n 'calendar',\n 'camera',\n 'camera-filled',\n 'caret-bottom',\n 'caret-left',\n 'caret-right',\n 'caret-top',\n 'cellphone',\n 'chat-dot-round',\n 'chat-dot-square',\n 'chat-line-round',\n 'chat-line-square',\n 'chat-round',\n 'chat-square',\n 'check',\n 'checked',\n 'cherry',\n 'chicken',\n 'chrome-filled',\n 'circle-check',\n 'circle-check-filled',\n 'circle-close',\n 'circle-close-filled',\n 'circle-plus',\n 'circle-plus-filled',\n 'clock',\n 'close',\n 'close-bold',\n 'cloudy',\n 'coffee',\n 'coffee-cup',\n 'coin',\n 'cold-drink',\n 'collection',\n 'collection-tag',\n 'comment',\n 'compass',\n 'connection',\n 'coordinate',\n 'copy-document',\n 'cpu',\n 'credit-card',\n 'crop',\n 'd-arrow-left',\n 'd-arrow-right',\n 'd-caret',\n 'data-analysis',\n 'data-board',\n 'data-line',\n 'delete',\n 'delete-filled',\n 'delete-location',\n 'dessert',\n 'discount',\n 'dish',\n 'dish-dot',\n 'document',\n 'document-add',\n 'document-checked',\n 'document-copy',\n 'document-delete',\n 'document-remove',\n 'download',\n 'drizzling',\n 'edit',\n 'edit-pen',\n 'eleme',\n 'eleme-filled',\n 'element-plus',\n 'expand',\n 'failed',\n 'female',\n 'files',\n 'film',\n 'filter',\n 'finished',\n 'first-aid-kit',\n 'flag',\n 'fold',\n 'folder',\n 'folder-add',\n 'folder-checked',\n 'folder-delete',\n 'folder-opened',\n 'folder-remove',\n 'food',\n 'football',\n 'fork-spoon',\n 'fries',\n 'full-screen',\n 'goblet',\n 'goblet-full',\n 'goblet-square',\n 'goblet-square-full',\n 'gold-medal',\n 'goods',\n 'goods-filled',\n 'grape',\n 'grid',\n 'guide',\n 'handbag',\n 'headset',\n 'help',\n 'help-filled',\n 'hide',\n 'histogram',\n 'home-filled',\n 'hot-water',\n 'house',\n 'ice-cream',\n 'ice-cream-round',\n 'ice-cream-square',\n 'ice-drink',\n 'ice-tea',\n 'info-filled',\n 'iphone',\n 'key',\n 'knife-fork',\n 'lightning',\n 'link',\n 'list',\n 'loading',\n 'location',\n 'location-filled',\n 'location-information',\n 'lock',\n 'lollipop',\n 'magic-stick',\n 'magnet',\n 'male',\n 'management',\n 'map-location',\n 'medal',\n 'memo',\n 'menu',\n 'message',\n 'message-box',\n 'mic',\n 'microphone',\n 'milk-tea',\n 'minus',\n 'money',\n 'monitor',\n 'moon',\n 'moon-night',\n 'more',\n 'more-filled',\n 'mostly-cloudy',\n 'mouse',\n 'mug',\n 'mute',\n 'mute-notification',\n 'no-smoking',\n 'notebook',\n 'notification',\n 'odometer',\n 'office-building',\n 'open',\n 'operation',\n 'opportunity',\n 'orange',\n 'paperclip',\n 'partly-cloudy',\n 'pear',\n 'phone',\n 'phone-filled',\n 'picture',\n 'picture-filled',\n 'picture-rounded',\n 'pie-chart',\n 'place',\n 'platform',\n 'plus',\n 'pointer',\n 'position',\n 'postcard',\n 'pouring',\n 'present',\n 'price-tag',\n 'printer',\n 'promotion',\n 'quartz-watch',\n 'question-filled',\n 'rank',\n 'reading',\n 'reading-lamp',\n 'refresh',\n 'refresh-left',\n 'refresh-right',\n 'refrigerator',\n 'remove',\n 'remove-filled',\n 'right',\n 'scale-to-original',\n 'school',\n 'scissor',\n 'search',\n 'select',\n 'sell',\n 'semi-select',\n 'service',\n 'set-up',\n 'setting',\n 'share',\n 'ship',\n 'shop',\n 'shopping-bag',\n 'shopping-cart',\n 'shopping-cart-full',\n 'shopping-trolley',\n 'smoking',\n 'soccer',\n 'sold-out',\n 'sort',\n 'sort-down',\n 'sort-up',\n 'stamp',\n 'star',\n 'star-filled',\n 'stopwatch',\n 'success-filled',\n 'sugar',\n 'suitcase',\n 'suitcase-line',\n 'sunny',\n 'sunrise',\n 'sunset',\n 'switch',\n 'switch-button',\n 'switch-filled',\n 'takeaway-box',\n 'ticket',\n 'tickets',\n 'timer',\n 'toilet-paper',\n 'tools',\n 'top',\n 'top-left',\n 'top-right',\n 'trend-charts',\n 'trophy',\n 'trophy-base',\n 'turn-off',\n 'umbrella',\n 'unlock',\n 'upload',\n 'upload-filled',\n 'user',\n 'user-filled',\n 'van',\n 'video-camera',\n 'video-camera-filled',\n 'video-pause',\n 'video-play',\n 'view',\n 'wallet',\n 'wallet-filled',\n 'warn-triangle-filled',\n 'warning',\n 'warning-filled',\n 'watch',\n 'watermelon',\n 'wind-power',\n 'zoom-in',\n 'zoom-out'\n ],\n // https://icones.js.org/collections/ri-meta.json\n 'ri:': [\n '24-hours-fill',\n '24-hours-line',\n '4k-fill',\n '4k-line',\n 'a-b',\n 'account-box-fill',\n 'account-box-line',\n 'account-circle-fill',\n 'account-circle-line',\n 'account-pin-box-fill',\n 'account-pin-box-line',\n 'account-pin-circle-fill',\n 'account-pin-circle-line',\n 'add-box-fill',\n 'add-box-line',\n 'add-circle-fill',\n 'add-circle-line',\n 'add-fill',\n 'add-line',\n 'admin-fill',\n 'admin-line',\n 'advertisement-fill',\n 'advertisement-line',\n 'ai-generate',\n 'airplay-fill',\n 'airplay-line',\n 'alarm-fill',\n 'alarm-line',\n 'alarm-warning-fill',\n 'alarm-warning-line',\n 'album-fill',\n 'album-line',\n 'alert-fill',\n 'alert-line',\n 'aliens-fill',\n 'aliens-line',\n 'align-bottom',\n 'align-center',\n 'align-justify',\n 'align-left',\n 'align-right',\n 'align-top',\n 'align-vertically',\n 'alipay-fill',\n 'alipay-line',\n 'amazon-fill',\n 'amazon-line',\n 'anchor-fill',\n 'anchor-line',\n 'ancient-gate-fill',\n 'ancient-gate-line',\n 'ancient-pavilion-fill',\n 'ancient-pavilion-line',\n 'android-fill',\n 'android-line',\n 'angularjs-fill',\n 'angularjs-line',\n 'anticlockwise-2-fill',\n 'anticlockwise-2-line',\n 'anticlockwise-fill',\n 'anticlockwise-line',\n 'app-store-fill',\n 'app-store-line',\n 'apple-fill',\n 'apple-line',\n 'apps-2-fill',\n 'apps-2-line',\n 'apps-fill',\n 'apps-line',\n 'archive-2-fill',\n 'archive-2-line',\n 'archive-drawer-fill',\n 'archive-drawer-line',\n 'archive-fill',\n 'archive-line',\n 'arrow-down-circle-fill',\n 'arrow-down-circle-line',\n 'arrow-down-double-fill',\n 'arrow-down-double-line',\n 'arrow-down-fill',\n 'arrow-down-line',\n 'arrow-down-s-fill',\n 'arrow-down-s-line',\n 'arrow-drop-down-fill',\n 'arrow-drop-down-line',\n 'arrow-drop-left-fill',\n 'arrow-drop-left-line',\n 'arrow-drop-right-fill',\n 'arrow-drop-right-line',\n 'arrow-drop-up-fill',\n 'arrow-drop-up-line',\n 'arrow-go-back-fill',\n 'arrow-go-back-line',\n 'arrow-go-forward-fill',\n 'arrow-go-forward-line',\n 'arrow-left-circle-fill',\n 'arrow-left-circle-line',\n 'arrow-left-double-fill',\n 'arrow-left-double-line',\n 'arrow-left-down-fill',\n 'arrow-left-down-line',\n 'arrow-left-fill',\n 'arrow-left-line',\n 'arrow-left-right-fill',\n 'arrow-left-right-line',\n 'arrow-left-s-fill',\n 'arrow-left-s-line',\n 'arrow-left-up-fill',\n 'arrow-left-up-line',\n 'arrow-right-circle-fill',\n 'arrow-right-circle-line',\n 'arrow-right-double-fill',\n 'arrow-right-double-line',\n 'arrow-right-down-fill',\n 'arrow-right-down-line',\n 'arrow-right-fill',\n 'arrow-right-line',\n 'arrow-right-s-fill',\n 'arrow-right-s-line',\n 'arrow-right-up-fill',\n 'arrow-right-up-line',\n 'arrow-turn-back-fill',\n 'arrow-turn-back-line',\n 'arrow-turn-forward-fill',\n 'arrow-turn-forward-line',\n 'arrow-up-circle-fill',\n 'arrow-up-circle-line',\n 'arrow-up-double-fill',\n 'arrow-up-double-line',\n 'arrow-up-down-fill',\n 'arrow-up-down-line',\n 'arrow-up-fill',\n 'arrow-up-line',\n 'arrow-up-s-fill',\n 'arrow-up-s-line',\n 'artboard-2-fill',\n 'artboard-2-line',\n 'artboard-fill',\n 'artboard-line',\n 'article-fill',\n 'article-line',\n 'aspect-ratio-fill',\n 'aspect-ratio-line',\n 'asterisk',\n 'at-fill',\n 'at-line',\n 'attachment-2',\n 'attachment-fill',\n 'attachment-line',\n 'auction-fill',\n 'auction-line',\n 'award-fill',\n 'award-line',\n 'baidu-fill',\n 'baidu-line',\n 'ball-pen-fill',\n 'ball-pen-line',\n 'bank-card-2-fill',\n 'bank-card-2-line',\n 'bank-card-fill',\n 'bank-card-line',\n 'bank-fill',\n 'bank-line',\n 'bar-chart-2-fill',\n 'bar-chart-2-line',\n 'bar-chart-box-fill',\n 'bar-chart-box-line',\n 'bar-chart-fill',\n 'bar-chart-grouped-fill',\n 'bar-chart-grouped-line',\n 'bar-chart-horizontal-fill',\n 'bar-chart-horizontal-line',\n 'bar-chart-line',\n 'barcode-box-fill',\n 'barcode-box-line',\n 'barcode-fill',\n 'barcode-line',\n 'bard-fill',\n 'bard-line',\n 'barricade-fill',\n 'barricade-line',\n 'base-station-fill',\n 'base-station-line',\n 'basketball-fill',\n 'basketball-line',\n 'battery-2-charge-fill',\n 'battery-2-charge-line',\n 'battery-2-fill',\n 'battery-2-line',\n 'battery-charge-fill',\n 'battery-charge-line',\n 'battery-fill',\n 'battery-line',\n 'battery-low-fill',\n 'battery-low-line',\n 'battery-saver-fill',\n 'battery-saver-line',\n 'battery-share-fill',\n 'battery-share-line',\n 'bear-smile-fill',\n 'bear-smile-line',\n 'beer-fill',\n 'beer-line',\n 'behance-fill',\n 'behance-line',\n 'bell-fill',\n 'bell-line',\n 'bike-fill',\n 'bike-line',\n 'bilibili-fill',\n 'bilibili-line',\n 'bill-fill',\n 'bill-line',\n 'billiards-fill',\n 'billiards-line',\n 'bit-coin-fill',\n 'bit-coin-line',\n 'blaze-fill',\n 'blaze-line',\n 'blender-fill',\n 'blender-line',\n 'bluetooth-connect-fill',\n 'bluetooth-connect-line',\n 'bluetooth-fill',\n 'bluetooth-line',\n 'blur-off-fill',\n 'blur-off-line',\n 'body-scan-fill',\n 'body-scan-line',\n 'bold',\n 'book-2-fill',\n 'book-2-line',\n 'book-3-fill',\n 'book-3-line',\n 'book-fill',\n 'book-line',\n 'book-mark-fill',\n 'book-mark-line',\n 'book-open-fill',\n 'book-open-line',\n 'book-read-fill',\n 'book-read-line',\n 'booklet-fill',\n 'booklet-line',\n 'bookmark-2-fill',\n 'bookmark-2-line',\n 'bookmark-3-fill',\n 'bookmark-3-line',\n 'bookmark-fill',\n 'bookmark-line',\n 'bootstrap-fill',\n 'bootstrap-line',\n 'box-1-fill',\n 'box-1-line',\n 'box-2-fill',\n 'box-2-line',\n 'box-3-fill',\n 'box-3-line',\n 'boxing-fill',\n 'boxing-line',\n 'braces-fill',\n 'braces-line',\n 'brackets-fill',\n 'brackets-line',\n 'brain-fill',\n 'brain-line',\n 'briefcase-2-fill',\n 'briefcase-2-line',\n 'briefcase-3-fill',\n 'briefcase-3-line',\n 'briefcase-4-fill',\n 'briefcase-4-line',\n 'briefcase-5-fill',\n 'briefcase-5-line',\n 'briefcase-fill',\n 'briefcase-line',\n 'bring-forward',\n 'bring-to-front',\n 'broadcast-fill',\n 'broadcast-line',\n 'brush-2-fill',\n 'brush-2-line',\n 'brush-3-fill',\n 'brush-3-line',\n 'brush-4-fill',\n 'brush-4-line',\n 'brush-fill',\n 'brush-line',\n 'bubble-chart-fill',\n 'bubble-chart-line',\n 'bug-2-fill',\n 'bug-2-line',\n 'bug-fill',\n 'bug-line',\n 'building-2-fill',\n 'building-2-line',\n 'building-3-fill',\n 'building-3-line',\n 'building-4-fill',\n 'building-4-line',\n 'building-fill',\n 'building-line',\n 'bus-2-fill',\n 'bus-2-line',\n 'bus-fill',\n 'bus-line',\n 'bus-wifi-fill',\n 'bus-wifi-line',\n 'cactus-fill',\n 'cactus-line',\n 'cake-2-fill',\n 'cake-2-line',\n 'cake-3-fill',\n 'cake-3-line',\n 'cake-fill',\n 'cake-line',\n 'calculator-fill',\n 'calculator-line',\n 'calendar-2-fill',\n 'calendar-2-line',\n 'calendar-check-fill',\n 'calendar-check-line',\n 'calendar-close-fill',\n 'calendar-close-line',\n 'calendar-event-fill',\n 'calendar-event-line',\n 'calendar-fill',\n 'calendar-line',\n 'calendar-todo-fill',\n 'calendar-todo-line',\n 'camera-2-fill',\n 'camera-2-line',\n 'camera-3-fill',\n 'camera-3-line',\n 'camera-fill',\n 'camera-lens-fill',\n 'camera-lens-line',\n 'camera-line',\n 'camera-off-fill',\n 'camera-off-line',\n 'camera-switch-fill',\n 'camera-switch-line',\n 'candle-fill',\n 'candle-line',\n 'capsule-fill',\n 'capsule-line',\n 'car-fill',\n 'car-line',\n 'car-washing-fill',\n 'car-washing-line',\n 'caravan-fill',\n 'caravan-line',\n 'cash-fill',\n 'cash-line',\n 'cast-fill',\n 'cast-line',\n 'cellphone-fill',\n 'cellphone-line',\n 'celsius-fill',\n 'celsius-line',\n 'centos-fill',\n 'centos-line',\n 'character-recognition-fill',\n 'character-recognition-line',\n 'charging-pile-2-fill',\n 'charging-pile-2-line',\n 'charging-pile-fill',\n 'charging-pile-line',\n 'chat-1-fill',\n 'chat-1-line',\n 'chat-2-fill',\n 'chat-2-line',\n 'chat-3-fill',\n 'chat-3-line',\n 'chat-4-fill',\n 'chat-4-line',\n 'chat-check-fill',\n 'chat-check-line',\n 'chat-delete-fill',\n 'chat-delete-line',\n 'chat-download-fill',\n 'chat-download-line',\n 'chat-follow-up-fill',\n 'chat-follow-up-line',\n 'chat-forward-fill',\n 'chat-forward-line',\n 'chat-heart-fill',\n 'chat-heart-line',\n 'chat-history-fill',\n 'chat-history-line',\n 'chat-new-fill',\n 'chat-new-line',\n 'chat-off-fill',\n 'chat-off-line',\n 'chat-poll-fill',\n 'chat-poll-line',\n 'chat-private-fill',\n 'chat-private-line',\n 'chat-quote-fill',\n 'chat-quote-line',\n 'chat-settings-fill',\n 'chat-settings-line',\n 'chat-smile-2-fill',\n 'chat-smile-2-line',\n 'chat-smile-3-fill',\n 'chat-smile-3-line',\n 'chat-smile-fill',\n 'chat-smile-line',\n 'chat-upload-fill',\n 'chat-upload-line',\n 'chat-voice-fill',\n 'chat-voice-line',\n 'check-double-fill',\n 'check-double-line',\n 'check-fill',\n 'check-line',\n 'checkbox-blank-circle-fill',\n 'checkbox-blank-circle-line',\n 'checkbox-blank-fill',\n 'checkbox-blank-line',\n 'checkbox-circle-fill',\n 'checkbox-circle-line',\n 'checkbox-fill',\n 'checkbox-indeterminate-fill',\n 'checkbox-indeterminate-line',\n 'checkbox-line',\n 'checkbox-multiple-blank-fill',\n 'checkbox-multiple-blank-line',\n 'checkbox-multiple-fill',\n 'checkbox-multiple-line',\n 'china-railway-fill',\n 'china-railway-line',\n 'chrome-fill',\n 'chrome-line',\n 'circle-fill',\n 'circle-line',\n 'clapperboard-fill',\n 'clapperboard-line',\n 'clipboard-fill',\n 'clipboard-line',\n 'clockwise-2-fill',\n 'clockwise-2-line',\n 'clockwise-fill',\n 'clockwise-line',\n 'close-circle-fill',\n 'close-circle-line',\n 'close-fill',\n 'close-line',\n 'closed-captioning-fill',\n 'closed-captioning-line',\n 'cloud-fill',\n 'cloud-line',\n 'cloud-off-fill',\n 'cloud-off-line',\n 'cloud-windy-fill',\n 'cloud-windy-line',\n 'cloudy-2-fill',\n 'cloudy-2-line',\n 'cloudy-fill',\n 'cloudy-line',\n 'code-box-fill',\n 'code-box-line',\n 'code-fill',\n 'code-line',\n 'code-s-fill',\n 'code-s-line',\n 'code-s-slash-fill',\n 'code-s-slash-line',\n 'code-view',\n 'codepen-fill',\n 'codepen-line',\n 'coin-fill',\n 'coin-line',\n 'coins-fill',\n 'coins-line',\n 'collage-fill',\n 'collage-line',\n 'command-fill',\n 'command-line',\n 'community-fill',\n 'community-line',\n 'compass-2-fill',\n 'compass-2-line',\n 'compass-3-fill',\n 'compass-3-line',\n 'compass-4-fill',\n 'compass-4-line',\n 'compass-discover-fill',\n 'compass-discover-line',\n 'compass-fill',\n 'compass-line',\n 'compasses-2-fill',\n 'compasses-2-line',\n 'compasses-fill',\n 'compasses-line',\n 'computer-fill',\n 'computer-line',\n 'contacts-book-2-fill',\n 'contacts-book-2-line',\n 'contacts-book-fill',\n 'contacts-book-line',\n 'contacts-book-upload-fill',\n 'contacts-book-upload-line',\n 'contacts-fill',\n 'contacts-line',\n 'contract-left-fill',\n 'contract-left-line',\n 'contract-left-right-fill',\n 'contract-left-right-line',\n 'contract-right-fill',\n 'contract-right-line',\n 'contract-up-down-fill',\n 'contract-up-down-line',\n 'contrast-2-fill',\n 'contrast-2-line',\n 'contrast-drop-2-fill',\n 'contrast-drop-2-line',\n 'contrast-drop-fill',\n 'contrast-drop-line',\n 'contrast-fill',\n 'contrast-line',\n 'copilot-fill',\n 'copilot-line',\n 'copper-coin-fill',\n 'copper-coin-line',\n 'copper-diamond-fill',\n 'copper-diamond-line',\n 'copyleft-fill',\n 'copyleft-line',\n 'copyright-fill',\n 'copyright-line',\n 'coreos-fill',\n 'coreos-line',\n 'corner-down-left-fill',\n 'corner-down-left-line',\n 'corner-down-right-fill',\n 'corner-down-right-line',\n 'corner-left-down-fill',\n 'corner-left-down-line',\n 'corner-left-up-fill',\n 'corner-left-up-line',\n 'corner-right-down-fill',\n 'corner-right-down-line',\n 'corner-right-up-fill',\n 'corner-right-up-line',\n 'corner-up-left-double-fill',\n 'corner-up-left-double-line',\n 'corner-up-left-fill',\n 'corner-up-left-line',\n 'corner-up-right-double-fill',\n 'corner-up-right-double-line',\n 'corner-up-right-fill',\n 'corner-up-right-line',\n 'coupon-2-fill',\n 'coupon-2-line',\n 'coupon-3-fill',\n 'coupon-3-line',\n 'coupon-4-fill',\n 'coupon-4-line',\n 'coupon-5-fill',\n 'coupon-5-line',\n 'coupon-fill',\n 'coupon-line',\n 'cpu-fill',\n 'cpu-line',\n 'creative-commons-by-fill',\n 'creative-commons-by-line',\n 'creative-commons-fill',\n 'creative-commons-line',\n 'creative-commons-nc-fill',\n 'creative-commons-nc-line',\n 'creative-commons-nd-fill',\n 'creative-commons-nd-line',\n 'creative-commons-sa-fill',\n 'creative-commons-sa-line',\n 'creative-commons-zero-fill',\n 'creative-commons-zero-line',\n 'criminal-fill',\n 'criminal-line',\n 'crop-2-fill',\n 'crop-2-line',\n 'crop-fill',\n 'crop-line',\n 'cross-fill',\n 'cross-line',\n 'crosshair-2-fill',\n 'crosshair-2-line',\n 'crosshair-fill',\n 'crosshair-line',\n 'css3-fill',\n 'css3-line',\n 'cup-fill',\n 'cup-line',\n 'currency-fill',\n 'currency-line',\n 'cursor-fill',\n 'cursor-line',\n 'customer-service-2-fill',\n 'customer-service-2-line',\n 'customer-service-fill',\n 'customer-service-line',\n 'dashboard-2-fill',\n 'dashboard-2-line',\n 'dashboard-3-fill',\n 'dashboard-3-line',\n 'dashboard-fill',\n 'dashboard-line',\n 'database-2-fill',\n 'database-2-line',\n 'database-fill',\n 'database-line',\n 'delete-back-2-fill',\n 'delete-back-2-line',\n 'delete-back-fill',\n 'delete-back-line',\n 'delete-bin-2-fill',\n 'delete-bin-2-line',\n 'delete-bin-3-fill',\n 'delete-bin-3-line',\n 'delete-bin-4-fill',\n 'delete-bin-4-line',\n 'delete-bin-5-fill',\n 'delete-bin-5-line',\n 'delete-bin-6-fill',\n 'delete-bin-6-line',\n 'delete-bin-7-fill',\n 'delete-bin-7-line',\n 'delete-bin-fill',\n 'delete-bin-line',\n 'delete-column',\n 'delete-row',\n 'device-fill',\n 'device-line',\n 'device-recover-fill',\n 'device-recover-line',\n 'dingding-fill',\n 'dingding-line',\n 'direction-fill',\n 'direction-line',\n 'disc-fill',\n 'disc-line',\n 'discord-fill',\n 'discord-line',\n 'discuss-fill',\n 'discuss-line',\n 'dislike-fill',\n 'dislike-line',\n 'disqus-fill',\n 'disqus-line',\n 'divide-fill',\n 'divide-line',\n 'donut-chart-fill',\n 'donut-chart-line',\n 'door-closed-fill',\n 'door-closed-line',\n 'door-fill',\n 'door-line',\n 'door-lock-box-fill',\n 'door-lock-box-line',\n 'door-lock-fill',\n 'door-lock-line',\n 'door-open-fill',\n 'door-open-line',\n 'dossier-fill',\n 'dossier-line',\n 'douban-fill',\n 'douban-line',\n 'double-quotes-l',\n 'double-quotes-r',\n 'download-2-fill',\n 'download-2-line',\n 'download-cloud-2-fill',\n 'download-cloud-2-line',\n 'download-cloud-fill',\n 'download-cloud-line',\n 'download-fill',\n 'download-line',\n 'draft-fill',\n 'draft-line',\n 'drag-drop-fill',\n 'drag-drop-line',\n 'drag-move-2-fill',\n 'drag-move-2-line',\n 'drag-move-fill',\n 'drag-move-line',\n 'draggable',\n 'dribbble-fill',\n 'dribbble-line',\n 'drive-fill',\n 'drive-line',\n 'drizzle-fill',\n 'drizzle-line',\n 'drop-fill',\n 'drop-line',\n 'dropbox-fill',\n 'dropbox-line',\n 'dropdown-list',\n 'dual-sim-1-fill',\n 'dual-sim-1-line',\n 'dual-sim-2-fill',\n 'dual-sim-2-line',\n 'dv-fill',\n 'dv-line',\n 'dvd-fill',\n 'dvd-line',\n 'e-bike-2-fill',\n 'e-bike-2-line',\n 'e-bike-fill',\n 'e-bike-line',\n 'earth-fill',\n 'earth-line',\n 'earthquake-fill',\n 'earthquake-line',\n 'edge-fill',\n 'edge-line',\n 'edge-new-fill',\n 'edge-new-line',\n 'edit-2-fill',\n 'edit-2-line',\n 'edit-box-fill',\n 'edit-box-line',\n 'edit-circle-fill',\n 'edit-circle-line',\n 'edit-fill',\n 'edit-line',\n 'eject-fill',\n 'eject-line',\n 'emoji-sticker-fill',\n 'emoji-sticker-line',\n 'emotion-2-fill',\n 'emotion-2-line',\n 'emotion-fill',\n 'emotion-happy-fill',\n 'emotion-happy-line',\n 'emotion-laugh-fill',\n 'emotion-laugh-line',\n 'emotion-line',\n 'emotion-normal-fill',\n 'emotion-normal-line',\n 'emotion-sad-fill',\n 'emotion-sad-line',\n 'emotion-unhappy-fill',\n 'emotion-unhappy-line',\n 'empathize-fill',\n 'empathize-line',\n 'emphasis',\n 'emphasis-cn',\n 'english-input',\n 'equal-fill',\n 'equal-line',\n 'equalizer-fill',\n 'equalizer-line',\n 'eraser-fill',\n 'eraser-line',\n 'error-warning-fill',\n 'error-warning-line',\n 'evernote-fill',\n 'evernote-line',\n 'exchange-box-fill',\n 'exchange-box-line',\n 'exchange-cny-fill',\n 'exchange-cny-line',\n 'exchange-dollar-fill',\n 'exchange-dollar-line',\n 'exchange-fill',\n 'exchange-funds-fill',\n 'exchange-funds-line',\n 'exchange-line',\n 'expand-left-fill',\n 'expand-left-line',\n 'expand-left-right-fill',\n 'expand-left-right-line',\n 'expand-right-fill',\n 'expand-right-line',\n 'expand-up-down-fill',\n 'expand-up-down-line',\n 'external-link-fill',\n 'external-link-line',\n 'eye-2-fill',\n 'eye-2-line',\n 'eye-close-fill',\n 'eye-close-line',\n 'eye-fill',\n 'eye-line',\n 'eye-off-fill',\n 'eye-off-line',\n 'facebook-box-fill',\n 'facebook-box-line',\n 'facebook-circle-fill',\n 'facebook-circle-line',\n 'facebook-fill',\n 'facebook-line',\n 'fahrenheit-fill',\n 'fahrenheit-line',\n 'feedback-fill',\n 'feedback-line',\n 'file-2-fill',\n 'file-2-line',\n 'file-3-fill',\n 'file-3-line',\n 'file-4-fill',\n 'file-4-line',\n 'file-add-fill',\n 'file-add-line',\n 'file-chart-2-fill',\n 'file-chart-2-line',\n 'file-chart-fill',\n 'file-chart-line',\n 'file-close-fill',\n 'file-close-line',\n 'file-cloud-fill',\n 'file-cloud-line',\n 'file-code-fill',\n 'file-code-line',\n 'file-copy-2-fill',\n 'file-copy-2-line',\n 'file-copy-fill',\n 'file-copy-line',\n 'file-damage-fill',\n 'file-damage-line',\n 'file-download-fill',\n 'file-download-line',\n 'file-edit-fill',\n 'file-edit-line',\n 'file-excel-2-fill',\n 'file-excel-2-line',\n 'file-excel-fill',\n 'file-excel-line',\n 'file-fill',\n 'file-forbid-fill',\n 'file-forbid-line',\n 'file-gif-fill',\n 'file-gif-line',\n 'file-history-fill',\n 'file-history-line',\n 'file-hwp-fill',\n 'file-hwp-line',\n 'file-image-fill',\n 'file-image-line',\n 'file-info-fill',\n 'file-info-line',\n 'file-line',\n 'file-list-2-fill',\n 'file-list-2-line',\n 'file-list-3-fill',\n 'file-list-3-line',\n 'file-list-fill',\n 'file-list-line',\n 'file-lock-fill',\n 'file-lock-line',\n 'file-mark-fill',\n 'file-mark-line',\n 'file-music-fill',\n 'file-music-line',\n 'file-paper-2-fill',\n 'file-paper-2-line',\n 'file-paper-fill',\n 'file-paper-line',\n 'file-pdf-2-fill',\n 'file-pdf-2-line',\n 'file-pdf-fill',\n 'file-pdf-line',\n 'file-ppt-2-fill',\n 'file-ppt-2-line',\n 'file-ppt-fill',\n 'file-ppt-line',\n 'file-reduce-fill',\n 'file-reduce-line',\n 'file-search-fill',\n 'file-search-line',\n 'file-settings-fill',\n 'file-settings-line',\n 'file-shield-2-fill',\n 'file-shield-2-line',\n 'file-shield-fill',\n 'file-shield-line',\n 'file-shred-fill',\n 'file-shred-line',\n 'file-text-fill',\n 'file-text-line',\n 'file-transfer-fill',\n 'file-transfer-line',\n 'file-unknow-fill',\n 'file-unknow-line',\n 'file-upload-fill',\n 'file-upload-line',\n 'file-user-fill',\n 'file-user-line',\n 'file-video-fill',\n 'file-video-line',\n 'file-warning-fill',\n 'file-warning-line',\n 'file-word-2-fill',\n 'file-word-2-line',\n 'file-word-fill',\n 'file-word-line',\n 'file-zip-fill',\n 'file-zip-line',\n 'film-fill',\n 'film-line',\n 'filter-2-fill',\n 'filter-2-line',\n 'filter-3-fill',\n 'filter-3-line',\n 'filter-fill',\n 'filter-line',\n 'filter-off-fill',\n 'filter-off-line',\n 'find-replace-fill',\n 'find-replace-line',\n 'finder-fill',\n 'finder-line',\n 'fingerprint-2-fill',\n 'fingerprint-2-line',\n 'fingerprint-fill',\n 'fingerprint-line',\n 'fire-fill',\n 'fire-line',\n 'firefox-fill',\n 'firefox-line',\n 'first-aid-kit-fill',\n 'first-aid-kit-line',\n 'flag-2-fill',\n 'flag-2-line',\n 'flag-fill',\n 'flag-line',\n 'flashlight-fill',\n 'flashlight-line',\n 'flask-fill',\n 'flask-line',\n 'flickr-fill',\n 'flickr-line',\n 'flight-land-fill',\n 'flight-land-line',\n 'flight-takeoff-fill',\n 'flight-takeoff-line',\n 'flood-fill',\n 'flood-line',\n 'flow-chart',\n 'flutter-fill',\n 'flutter-line',\n 'focus-2-fill',\n 'focus-2-line',\n 'focus-3-fill',\n 'focus-3-line',\n 'focus-fill',\n 'focus-line',\n 'foggy-fill',\n 'foggy-line',\n 'folder-2-fill',\n 'folder-2-line',\n 'folder-3-fill',\n 'folder-3-line',\n 'folder-4-fill',\n 'folder-4-line',\n 'folder-5-fill',\n 'folder-5-line',\n 'folder-add-fill',\n 'folder-add-line',\n 'folder-chart-2-fill',\n 'folder-chart-2-line',\n 'folder-chart-fill',\n 'folder-chart-line',\n 'folder-download-fill',\n 'folder-download-line',\n 'folder-fill',\n 'folder-forbid-fill',\n 'folder-forbid-line',\n 'folder-history-fill',\n 'folder-history-line',\n 'folder-image-fill',\n 'folder-image-line',\n 'folder-info-fill',\n 'folder-info-line',\n 'folder-keyhole-fill',\n 'folder-keyhole-line',\n 'folder-line',\n 'folder-lock-fill',\n 'folder-lock-line',\n 'folder-music-fill',\n 'folder-music-line',\n 'folder-open-fill',\n 'folder-open-line',\n 'folder-received-fill',\n 'folder-received-line',\n 'folder-reduce-fill',\n 'folder-reduce-line',\n 'folder-settings-fill',\n 'folder-settings-line',\n 'folder-shared-fill',\n 'folder-shared-line',\n 'folder-shield-2-fill',\n 'folder-shield-2-line',\n 'folder-shield-fill',\n 'folder-shield-line',\n 'folder-transfer-fill',\n 'folder-transfer-line',\n 'folder-unknow-fill',\n 'folder-unknow-line',\n 'folder-upload-fill',\n 'folder-upload-line',\n 'folder-user-fill',\n 'folder-user-line',\n 'folder-video-fill',\n 'folder-video-line',\n 'folder-warning-fill',\n 'folder-warning-line',\n 'folder-zip-fill',\n 'folder-zip-line',\n 'folders-fill',\n 'folders-line',\n 'font-color',\n 'font-family',\n 'font-mono',\n 'font-sans',\n 'font-sans-serif',\n 'font-size',\n 'font-size-2',\n 'football-fill',\n 'football-line',\n 'footprint-fill',\n 'footprint-line',\n 'forbid-2-fill',\n 'forbid-2-line',\n 'forbid-fill',\n 'forbid-line',\n 'format-clear',\n 'forward-10-fill',\n 'forward-10-line',\n 'forward-15-fill',\n 'forward-15-line',\n 'forward-30-fill',\n 'forward-30-line',\n 'forward-5-fill',\n 'forward-5-line',\n 'fridge-fill',\n 'fridge-line',\n 'fullscreen-exit-fill',\n 'fullscreen-exit-line',\n 'fullscreen-fill',\n 'fullscreen-line',\n 'function-fill',\n 'function-line',\n 'functions',\n 'funds-box-fill',\n 'funds-box-line',\n 'funds-fill',\n 'funds-line',\n 'gallery-fill',\n 'gallery-line',\n 'gallery-upload-fill',\n 'gallery-upload-line',\n 'game-fill',\n 'game-line',\n 'gamepad-fill',\n 'gamepad-line',\n 'gas-station-fill',\n 'gas-station-line',\n 'gatsby-fill',\n 'gatsby-line',\n 'genderless-fill',\n 'genderless-line',\n 'ghost-2-fill',\n 'ghost-2-line',\n 'ghost-fill',\n 'ghost-line',\n 'ghost-smile-fill',\n 'ghost-smile-line',\n 'gift-2-fill',\n 'gift-2-line',\n 'gift-fill',\n 'gift-line',\n 'git-branch-fill',\n 'git-branch-line',\n 'git-close-pull-request-fill',\n 'git-close-pull-request-line',\n 'git-commit-fill',\n 'git-commit-line',\n 'git-merge-fill',\n 'git-merge-line',\n 'git-pull-request-fill',\n 'git-pull-request-line',\n 'git-repository-commits-fill',\n 'git-repository-commits-line',\n 'git-repository-fill',\n 'git-repository-line',\n 'git-repository-private-fill',\n 'git-repository-private-line',\n 'github-fill',\n 'github-line',\n 'gitlab-fill',\n 'gitlab-line',\n 'global-fill',\n 'global-line',\n 'globe-fill',\n 'globe-line',\n 'goblet-fill',\n 'goblet-line',\n 'google-fill',\n 'google-line',\n 'google-play-fill',\n 'google-play-line',\n 'government-fill',\n 'government-line',\n 'gps-fill',\n 'gps-line',\n 'gradienter-fill',\n 'gradienter-line',\n 'graduation-cap-fill',\n 'graduation-cap-line',\n 'grid-fill',\n 'grid-line',\n 'group-2-fill',\n 'group-2-line',\n 'group-fill',\n 'group-line',\n 'guide-fill',\n 'guide-line',\n 'h-1',\n 'h-2',\n 'h-3',\n 'h-4',\n 'h-5',\n 'h-6',\n 'hail-fill',\n 'hail-line',\n 'hammer-fill',\n 'hammer-line',\n 'hand-coin-fill',\n 'hand-coin-line',\n 'hand-heart-fill',\n 'hand-heart-line',\n 'hand-sanitizer-fill',\n 'hand-sanitizer-line',\n 'handbag-fill',\n 'handbag-line',\n 'hard-drive-2-fill',\n 'hard-drive-2-line',\n 'hard-drive-3-fill',\n 'hard-drive-3-line',\n 'hard-drive-fill',\n 'hard-drive-line',\n 'hashtag',\n 'haze-2-fill',\n 'haze-2-line',\n 'haze-fill',\n 'haze-line',\n 'hd-fill',\n 'hd-line',\n 'heading',\n 'headphone-fill',\n 'headphone-line',\n 'health-book-fill',\n 'health-book-line',\n 'heart-2-fill',\n 'heart-2-line',\n 'heart-3-fill',\n 'heart-3-line',\n 'heart-add-fill',\n 'heart-add-line',\n 'heart-fill',\n 'heart-line',\n 'heart-pulse-fill',\n 'heart-pulse-line',\n 'hearts-fill',\n 'hearts-line',\n 'heavy-showers-fill',\n 'heavy-showers-line',\n 'hexagon-fill',\n 'hexagon-line',\n 'history-fill',\n 'history-line',\n 'home-2-fill',\n 'home-2-line',\n 'home-3-fill',\n 'home-3-line',\n 'home-4-fill',\n 'home-4-line',\n 'home-5-fill',\n 'home-5-line',\n 'home-6-fill',\n 'home-6-line',\n 'home-7-fill',\n 'home-7-line',\n 'home-8-fill',\n 'home-8-line',\n 'home-fill',\n 'home-gear-fill',\n 'home-gear-line',\n 'home-heart-fill',\n 'home-heart-line',\n 'home-line',\n 'home-office-fill',\n 'home-office-line',\n 'home-smile-2-fill',\n 'home-smile-2-line',\n 'home-smile-fill',\n 'home-smile-line',\n 'home-wifi-fill',\n 'home-wifi-line',\n 'honor-of-kings-fill',\n 'honor-of-kings-line',\n 'honour-fill',\n 'honour-line',\n 'hospital-fill',\n 'hospital-line',\n 'hotel-bed-fill',\n 'hotel-bed-line',\n 'hotel-fill',\n 'hotel-line',\n 'hotspot-fill',\n 'hotspot-line',\n 'hourglass-2-fill',\n 'hourglass-2-line',\n 'hourglass-fill',\n 'hourglass-line',\n 'hq-fill',\n 'hq-line',\n 'html5-fill',\n 'html5-line',\n 'ie-fill',\n 'ie-line',\n 'image-2-fill',\n 'image-2-line',\n 'image-add-fill',\n 'image-add-line',\n 'image-edit-fill',\n 'image-edit-line',\n 'image-fill',\n 'image-line',\n 'inbox-2-fill',\n 'inbox-2-line',\n 'inbox-archive-fill',\n 'inbox-archive-line',\n 'inbox-fill',\n 'inbox-line',\n 'inbox-unarchive-fill',\n 'inbox-unarchive-line',\n 'increase-decrease-fill',\n 'increase-decrease-line',\n 'indent-decrease',\n 'indent-increase',\n 'indeterminate-circle-fill',\n 'indeterminate-circle-line',\n 'infinity-fill',\n 'infinity-line',\n 'information-fill',\n 'information-line',\n 'infrared-thermometer-fill',\n 'infrared-thermometer-line',\n 'ink-bottle-fill',\n 'ink-bottle-line',\n 'input-cursor-move',\n 'input-method-fill',\n 'input-method-line',\n 'insert-column-left',\n 'insert-column-right',\n 'insert-row-bottom',\n 'insert-row-top',\n 'instagram-fill',\n 'instagram-line',\n 'install-fill',\n 'install-line',\n 'instance-fill',\n 'instance-line',\n 'invision-fill',\n 'invision-line',\n 'italic',\n 'javascript-fill',\n 'javascript-line',\n 'kakao-talk-fill',\n 'kakao-talk-line',\n 'key-2-fill',\n 'key-2-line',\n 'key-fill',\n 'key-line',\n 'keyboard-box-fill',\n 'keyboard-box-line',\n 'keyboard-fill',\n 'keyboard-line',\n 'keynote-fill',\n 'keynote-line',\n 'kick-fill',\n 'kick-line',\n 'knife-blood-fill',\n 'knife-blood-line',\n 'knife-fill',\n 'knife-line',\n 'landscape-fill',\n 'landscape-line',\n 'layout-2-fill',\n 'layout-2-line',\n 'layout-3-fill',\n 'layout-3-line',\n 'layout-4-fill',\n 'layout-4-line',\n 'layout-5-fill',\n 'layout-5-line',\n 'layout-6-fill',\n 'layout-6-line',\n 'layout-bottom-2-fill',\n 'layout-bottom-2-line',\n 'layout-bottom-fill',\n 'layout-bottom-line',\n 'layout-column-fill',\n 'layout-column-line',\n 'layout-fill',\n 'layout-grid-fill',\n 'layout-grid-line',\n 'layout-left-2-fill',\n 'layout-left-2-line',\n 'layout-left-fill',\n 'layout-left-line',\n 'layout-line',\n 'layout-masonry-fill',\n 'layout-masonry-line',\n 'layout-right-2-fill',\n 'layout-right-2-line',\n 'layout-right-fill',\n 'layout-right-line',\n 'layout-row-fill',\n 'layout-row-line',\n 'layout-top-2-fill',\n 'layout-top-2-line',\n 'layout-top-fill',\n 'layout-top-line',\n 'leaf-fill',\n 'leaf-line',\n 'lifebuoy-fill',\n 'lifebuoy-line',\n 'lightbulb-fill',\n 'lightbulb-flash-fill',\n 'lightbulb-flash-line',\n 'lightbulb-line',\n 'line-chart-fill',\n 'line-chart-line',\n 'line-fill',\n 'line-height',\n 'line-line',\n 'link',\n 'link-m',\n 'link-unlink',\n 'link-unlink-m',\n 'linkedin-box-fill',\n 'linkedin-box-line',\n 'linkedin-fill',\n 'linkedin-line',\n 'links-fill',\n 'links-line',\n 'list-check',\n 'list-check-2',\n 'list-check-3',\n 'list-indefinite',\n 'list-ordered',\n 'list-ordered-2',\n 'list-radio',\n 'list-settings-fill',\n 'list-settings-line',\n 'list-unordered',\n 'live-fill',\n 'live-line',\n 'loader-2-fill',\n 'loader-2-line',\n 'loader-3-fill',\n 'loader-3-line',\n 'loader-4-fill',\n 'loader-4-line',\n 'loader-5-fill',\n 'loader-5-line',\n 'loader-fill',\n 'loader-line',\n 'lock-2-fill',\n 'lock-2-line',\n 'lock-fill',\n 'lock-line',\n 'lock-password-fill',\n 'lock-password-line',\n 'lock-unlock-fill',\n 'lock-unlock-line',\n 'login-box-fill',\n 'login-box-line',\n 'login-circle-fill',\n 'login-circle-line',\n 'logout-box-fill',\n 'logout-box-line',\n 'logout-box-r-fill',\n 'logout-box-r-line',\n 'logout-circle-fill',\n 'logout-circle-line',\n 'logout-circle-r-fill',\n 'logout-circle-r-line',\n 'loop-left-fill',\n 'loop-left-line',\n 'loop-right-fill',\n 'loop-right-line',\n 'luggage-cart-fill',\n 'luggage-cart-line',\n 'luggage-deposit-fill',\n 'luggage-deposit-line',\n 'lungs-fill',\n 'lungs-line',\n 'mac-fill',\n 'mac-line',\n 'macbook-fill',\n 'macbook-line',\n 'magic-fill',\n 'magic-line',\n 'mail-add-fill',\n 'mail-add-line',\n 'mail-check-fill',\n 'mail-check-line',\n 'mail-close-fill',\n 'mail-close-line',\n 'mail-download-fill',\n 'mail-download-line',\n 'mail-fill',\n 'mail-forbid-fill',\n 'mail-forbid-line',\n 'mail-line',\n 'mail-lock-fill',\n 'mail-lock-line',\n 'mail-open-fill',\n 'mail-open-line',\n 'mail-send-fill',\n 'mail-send-line',\n 'mail-settings-fill',\n 'mail-settings-line',\n 'mail-star-fill',\n 'mail-star-line',\n 'mail-unread-fill',\n 'mail-unread-line',\n 'mail-volume-fill',\n 'mail-volume-line',\n 'map-2-fill',\n 'map-2-line',\n 'map-fill',\n 'map-line',\n 'map-pin-2-fill',\n 'map-pin-2-line',\n 'map-pin-3-fill',\n 'map-pin-3-line',\n 'map-pin-4-fill',\n 'map-pin-4-line',\n 'map-pin-5-fill',\n 'map-pin-5-line',\n 'map-pin-add-fill',\n 'map-pin-add-line',\n 'map-pin-fill',\n 'map-pin-line',\n 'map-pin-range-fill',\n 'map-pin-range-line',\n 'map-pin-time-fill',\n 'map-pin-time-line',\n 'map-pin-user-fill',\n 'map-pin-user-line',\n 'mark-pen-fill',\n 'mark-pen-line',\n 'markdown-fill',\n 'markdown-line',\n 'markup-fill',\n 'markup-line',\n 'mastercard-fill',\n 'mastercard-line',\n 'mastodon-fill',\n 'mastodon-line',\n 'medal-2-fill',\n 'medal-2-line',\n 'medal-fill',\n 'medal-line',\n 'medicine-bottle-fill',\n 'medicine-bottle-line',\n 'medium-fill',\n 'medium-line',\n 'megaphone-fill',\n 'megaphone-line',\n 'memories-fill',\n 'memories-line',\n 'men-fill',\n 'men-line',\n 'mental-health-fill',\n 'mental-health-line',\n 'menu-2-fill',\n 'menu-2-line',\n 'menu-3-fill',\n 'menu-3-line',\n 'menu-4-fill',\n 'menu-4-line',\n 'menu-5-fill',\n 'menu-5-line',\n 'menu-add-fill',\n 'menu-add-line',\n 'menu-fill',\n 'menu-fold-fill',\n 'menu-fold-line',\n 'menu-line',\n 'menu-search-fill',\n 'menu-search-line',\n 'menu-unfold-fill',\n 'menu-unfold-line',\n 'merge-cells-horizontal',\n 'merge-cells-vertical',\n 'message-2-fill',\n 'message-2-line',\n 'message-3-fill',\n 'message-3-line',\n 'message-fill',\n 'message-line',\n 'messenger-fill',\n 'messenger-line',\n 'meta-fill',\n 'meta-line',\n 'meteor-fill',\n 'meteor-line',\n 'mic-2-fill',\n 'mic-2-line',\n 'mic-fill',\n 'mic-line',\n 'mic-off-fill',\n 'mic-off-line',\n 'mickey-fill',\n 'mickey-line',\n 'microscope-fill',\n 'microscope-line',\n 'microsoft-fill',\n 'microsoft-line',\n 'microsoft-loop-fill',\n 'microsoft-loop-line',\n 'mind-map',\n 'mini-program-fill',\n 'mini-program-line',\n 'mist-fill',\n 'mist-line',\n 'money-cny-box-fill',\n 'money-cny-box-line',\n 'money-cny-circle-fill',\n 'money-cny-circle-line',\n 'money-dollar-box-fill',\n 'money-dollar-box-line',\n 'money-dollar-circle-fill',\n 'money-dollar-circle-line',\n 'money-euro-box-fill',\n 'money-euro-box-line',\n 'money-euro-circle-fill',\n 'money-euro-circle-line',\n 'money-pound-box-fill',\n 'money-pound-box-line',\n 'money-pound-circle-fill',\n 'money-pound-circle-line',\n 'moon-clear-fill',\n 'moon-clear-line',\n 'moon-cloudy-fill',\n 'moon-cloudy-line',\n 'moon-fill',\n 'moon-foggy-fill',\n 'moon-foggy-line',\n 'moon-line',\n 'more-2-fill',\n 'more-2-line',\n 'more-fill',\n 'more-line',\n 'motorbike-fill',\n 'motorbike-line',\n 'mouse-fill',\n 'mouse-line',\n 'movie-2-fill',\n 'movie-2-line',\n 'movie-fill',\n 'movie-line',\n 'music-2-fill',\n 'music-2-line',\n 'music-fill',\n 'music-line',\n 'mv-fill',\n 'mv-line',\n 'navigation-fill',\n 'navigation-line',\n 'netease-cloud-music-fill',\n 'netease-cloud-music-line',\n 'netflix-fill',\n 'netflix-line',\n 'newspaper-fill',\n 'newspaper-line',\n 'nft-fill',\n 'nft-line',\n 'node-tree',\n 'notification-2-fill',\n 'notification-2-line',\n 'notification-3-fill',\n 'notification-3-line',\n 'notification-4-fill',\n 'notification-4-line',\n 'notification-badge-fill',\n 'notification-badge-line',\n 'notification-fill',\n 'notification-line',\n 'notification-off-fill',\n 'notification-off-line',\n 'notion-fill',\n 'notion-line',\n 'npmjs-fill',\n 'npmjs-line',\n 'number-0',\n 'number-1',\n 'number-2',\n 'number-3',\n 'number-4',\n 'number-5',\n 'number-6',\n 'number-7',\n 'number-8',\n 'number-9',\n 'numbers-fill',\n 'numbers-line',\n 'nurse-fill',\n 'nurse-line',\n 'octagon-fill',\n 'octagon-line',\n 'oil-fill',\n 'oil-line',\n 'omega',\n 'open-arm-fill',\n 'open-arm-line',\n 'open-source-fill',\n 'open-source-line',\n 'openai-fill',\n 'openai-line',\n 'openbase-fill',\n 'openbase-line',\n 'opera-fill',\n 'opera-line',\n 'order-play-fill',\n 'order-play-line',\n 'organization-chart',\n 'outlet-2-fill',\n 'outlet-2-line',\n 'outlet-fill',\n 'outlet-line',\n 'overline',\n 'p2p-fill',\n 'p2p-line',\n 'page-separator',\n 'pages-fill',\n 'pages-line',\n 'paint-brush-fill',\n 'paint-brush-line',\n 'paint-fill',\n 'paint-line',\n 'palette-fill',\n 'palette-line',\n 'pantone-fill',\n 'pantone-line',\n 'paragraph',\n 'parent-fill',\n 'parent-line',\n 'parentheses-fill',\n 'parentheses-line',\n 'parking-box-fill',\n 'parking-box-line',\n 'parking-fill',\n 'parking-line',\n 'pass-expired-fill',\n 'pass-expired-line',\n 'pass-pending-fill',\n 'pass-pending-line',\n 'pass-valid-fill',\n 'pass-valid-line',\n 'passport-fill',\n 'passport-line',\n 'patreon-fill',\n 'patreon-line',\n 'pause-circle-fill',\n 'pause-circle-line',\n 'pause-fill',\n 'pause-line',\n 'pause-mini-fill',\n 'pause-mini-line',\n 'paypal-fill',\n 'paypal-line',\n 'pen-nib-fill',\n 'pen-nib-line',\n 'pencil-fill',\n 'pencil-line',\n 'pencil-ruler-2-fill',\n 'pencil-ruler-2-line',\n 'pencil-ruler-fill',\n 'pencil-ruler-line',\n 'pentagon-fill',\n 'pentagon-line',\n 'percent-fill',\n 'percent-line',\n 'phone-camera-fill',\n 'phone-camera-line',\n 'phone-fill',\n 'phone-find-fill',\n 'phone-find-line',\n 'phone-line',\n 'phone-lock-fill',\n 'phone-lock-line',\n 'picture-in-picture-2-fill',\n 'picture-in-picture-2-line',\n 'picture-in-picture-exit-fill',\n 'picture-in-picture-exit-line',\n 'picture-in-picture-fill',\n 'picture-in-picture-line',\n 'pie-chart-2-fill',\n 'pie-chart-2-line',\n 'pie-chart-box-fill',\n 'pie-chart-box-line',\n 'pie-chart-fill',\n 'pie-chart-line',\n 'pin-distance-fill',\n 'pin-distance-line',\n 'ping-pong-fill',\n 'ping-pong-line',\n 'pinterest-fill',\n 'pinterest-line',\n 'pinyin-input',\n 'pixelfed-fill',\n 'pixelfed-line',\n 'plane-fill',\n 'plane-line',\n 'planet-fill',\n 'planet-line',\n 'plant-fill',\n 'plant-line',\n 'play-circle-fill',\n 'play-circle-line',\n 'play-fill',\n 'play-line',\n 'play-list-2-fill',\n 'play-list-2-line',\n 'play-list-add-fill',\n 'play-list-add-line',\n 'play-list-fill',\n 'play-list-line',\n 'play-mini-fill',\n 'play-mini-line',\n 'playstation-fill',\n 'playstation-line',\n 'plug-2-fill',\n 'plug-2-line',\n 'plug-fill',\n 'plug-line',\n 'polaroid-2-fill',\n 'polaroid-2-line',\n 'polaroid-fill',\n 'polaroid-line',\n 'police-car-fill',\n 'police-car-line',\n 'presentation-fill',\n 'presentation-line',\n 'price-tag-2-fill',\n 'price-tag-2-line',\n 'price-tag-3-fill',\n 'price-tag-3-line',\n 'price-tag-fill',\n 'price-tag-line',\n 'printer-cloud-fill',\n 'printer-cloud-line',\n 'printer-fill',\n 'printer-line',\n 'product-hunt-fill',\n 'product-hunt-line',\n 'profile-fill',\n 'profile-line',\n 'prohibited-fill',\n 'prohibited-line',\n 'projector-2-fill',\n 'projector-2-line',\n 'projector-fill',\n 'projector-line',\n 'psychotherapy-fill',\n 'psychotherapy-line',\n 'pulse-fill',\n 'pulse-line',\n 'pushpin-2-fill',\n 'pushpin-2-line',\n 'pushpin-fill',\n 'pushpin-line',\n 'qq-fill',\n 'qq-line',\n 'qr-code-fill',\n 'qr-code-line',\n 'qr-scan-2-fill',\n 'qr-scan-2-line',\n 'qr-scan-fill',\n 'qr-scan-line',\n 'question-answer-fill',\n 'question-answer-line',\n 'question-fill',\n 'question-line',\n 'question-mark',\n 'questionnaire-fill',\n 'questionnaire-line',\n 'quill-pen-fill',\n 'quill-pen-line',\n 'quote-text',\n 'radar-fill',\n 'radar-line',\n 'radio-2-fill',\n 'radio-2-line',\n 'radio-button-fill',\n 'radio-button-line',\n 'radio-fill',\n 'radio-line',\n 'rainbow-fill',\n 'rainbow-line',\n 'rainy-fill',\n 'rainy-line',\n 'reactjs-fill',\n 'reactjs-line',\n 'record-circle-fill',\n 'record-circle-line',\n 'record-mail-fill',\n 'record-mail-line',\n 'rectangle-fill',\n 'rectangle-line',\n 'recycle-fill',\n 'recycle-line',\n 'red-packet-fill',\n 'red-packet-line',\n 'reddit-fill',\n 'reddit-line',\n 'refresh-fill',\n 'refresh-line',\n 'refund-2-fill',\n 'refund-2-line',\n 'refund-fill',\n 'refund-line',\n 'registered-fill',\n 'registered-line',\n 'remixicon-fill',\n 'remixicon-line',\n 'remote-control-2-fill',\n 'remote-control-2-line',\n 'remote-control-fill',\n 'remote-control-line',\n 'repeat-2-fill',\n 'repeat-2-line',\n 'repeat-fill',\n 'repeat-line',\n 'repeat-one-fill',\n 'repeat-one-line',\n 'replay-10-fill',\n 'replay-10-line',\n 'replay-15-fill',\n 'replay-15-line',\n 'replay-30-fill',\n 'replay-30-line',\n 'replay-5-fill',\n 'replay-5-line',\n 'reply-all-fill',\n 'reply-all-line',\n 'reply-fill',\n 'reply-line',\n 'reserved-fill',\n 'reserved-line',\n 'rest-time-fill',\n 'rest-time-line',\n 'restart-fill',\n 'restart-line',\n 'restaurant-2-fill',\n 'restaurant-2-line',\n 'restaurant-fill',\n 'restaurant-line',\n 'rewind-fill',\n 'rewind-line',\n 'rewind-mini-fill',\n 'rewind-mini-line',\n 'rfid-fill',\n 'rfid-line',\n 'rhythm-fill',\n 'rhythm-line',\n 'riding-fill',\n 'riding-line',\n 'road-map-fill',\n 'road-map-line',\n 'roadster-fill',\n 'roadster-line',\n 'robot-2-fill',\n 'robot-2-line',\n 'robot-fill',\n 'robot-line',\n 'rocket-2-fill',\n 'rocket-2-line',\n 'rocket-fill',\n 'rocket-line',\n 'rotate-lock-fill',\n 'rotate-lock-line',\n 'rounded-corner',\n 'route-fill',\n 'route-line',\n 'router-fill',\n 'router-line',\n 'rss-fill',\n 'rss-line',\n 'ruler-2-fill',\n 'ruler-2-line',\n 'ruler-fill',\n 'ruler-line',\n 'run-fill',\n 'run-line',\n 'safari-fill',\n 'safari-line',\n 'safe-2-fill',\n 'safe-2-line',\n 'safe-fill',\n 'safe-line',\n 'sailboat-fill',\n 'sailboat-line',\n 'save-2-fill',\n 'save-2-line',\n 'save-3-fill',\n 'save-3-line',\n 'save-fill',\n 'save-line',\n 'scales-2-fill',\n 'scales-2-line',\n 'scales-3-fill',\n 'scales-3-line',\n 'scales-fill',\n 'scales-line',\n 'scan-2-fill',\n 'scan-2-line',\n 'scan-fill',\n 'scan-line',\n 'school-fill',\n 'school-line',\n 'scissors-2-fill',\n 'scissors-2-line',\n 'scissors-cut-fill',\n 'scissors-cut-line',\n 'scissors-fill',\n 'scissors-line',\n 'screenshot-2-fill',\n 'screenshot-2-line',\n 'screenshot-fill',\n 'screenshot-line',\n 'sd-card-fill',\n 'sd-card-line',\n 'sd-card-mini-fill',\n 'sd-card-mini-line',\n 'search-2-fill',\n 'search-2-line',\n 'search-eye-fill',\n 'search-eye-line',\n 'search-fill',\n 'search-line',\n 'secure-payment-fill',\n 'secure-payment-line',\n 'seedling-fill',\n 'seedling-line',\n 'send-backward',\n 'send-plane-2-fill',\n 'send-plane-2-line',\n 'send-plane-fill',\n 'send-plane-line',\n 'send-to-back',\n 'sensor-fill',\n 'sensor-line',\n 'seo-fill',\n 'seo-line',\n 'separator',\n 'server-fill',\n 'server-line',\n 'service-fill',\n 'service-line',\n 'settings-2-fill',\n 'settings-2-line',\n 'settings-3-fill',\n 'settings-3-line',\n 'settings-4-fill',\n 'settings-4-line',\n 'settings-5-fill',\n 'settings-5-line',\n 'settings-6-fill',\n 'settings-6-line',\n 'settings-fill',\n 'settings-line',\n 'shake-hands-fill',\n 'shake-hands-line',\n 'shape-2-fill',\n 'shape-2-line',\n 'shape-fill',\n 'shape-line',\n 'shapes-fill',\n 'shapes-line',\n 'share-box-fill',\n 'share-box-line',\n 'share-circle-fill',\n 'share-circle-line',\n 'share-fill',\n 'share-forward-2-fill',\n 'share-forward-2-line',\n 'share-forward-box-fill',\n 'share-forward-box-line',\n 'share-forward-fill',\n 'share-forward-line',\n 'share-line',\n 'shield-check-fill',\n 'shield-check-line',\n 'shield-cross-fill',\n 'shield-cross-line',\n 'shield-fill',\n 'shield-flash-fill',\n 'shield-flash-line',\n 'shield-keyhole-fill',\n 'shield-keyhole-line',\n 'shield-line',\n 'shield-star-fill',\n 'shield-star-line',\n 'shield-user-fill',\n 'shield-user-line',\n 'shining-2-fill',\n 'shining-2-line',\n 'shining-fill',\n 'shining-line',\n 'ship-2-fill',\n 'ship-2-line',\n 'ship-fill',\n 'ship-line',\n 'shirt-fill',\n 'shirt-line',\n 'shopping-bag-2-fill',\n 'shopping-bag-2-line',\n 'shopping-bag-3-fill',\n 'shopping-bag-3-line',\n 'shopping-bag-fill',\n 'shopping-bag-line',\n 'shopping-basket-2-fill',\n 'shopping-basket-2-line',\n 'shopping-basket-fill',\n 'shopping-basket-line',\n 'shopping-cart-2-fill',\n 'shopping-cart-2-line',\n 'shopping-cart-fill',\n 'shopping-cart-line',\n 'showers-fill',\n 'showers-line',\n 'shuffle-fill',\n 'shuffle-line',\n 'shut-down-fill',\n 'shut-down-line',\n 'side-bar-fill',\n 'side-bar-line',\n 'signal-tower-fill',\n 'signal-tower-line',\n 'signal-wifi-1-fill',\n 'signal-wifi-1-line',\n 'signal-wifi-2-fill',\n 'signal-wifi-2-line',\n 'signal-wifi-3-fill',\n 'signal-wifi-3-line',\n 'signal-wifi-error-fill',\n 'signal-wifi-error-line',\n 'signal-wifi-fill',\n 'signal-wifi-line',\n 'signal-wifi-off-fill',\n 'signal-wifi-off-line',\n 'sim-card-2-fill',\n 'sim-card-2-line',\n 'sim-card-fill',\n 'sim-card-line',\n 'single-quotes-l',\n 'single-quotes-r',\n 'sip-fill',\n 'sip-line',\n 'sketching',\n 'skip-back-fill',\n 'skip-back-line',\n 'skip-back-mini-fill',\n 'skip-back-mini-line',\n 'skip-down-fill',\n 'skip-down-line',\n 'skip-forward-fill',\n 'skip-forward-line',\n 'skip-forward-mini-fill',\n 'skip-forward-mini-line',\n 'skip-left-fill',\n 'skip-left-line',\n 'skip-right-fill',\n 'skip-right-line',\n 'skip-up-fill',\n 'skip-up-line',\n 'skull-2-fill',\n 'skull-2-line',\n 'skull-fill',\n 'skull-line',\n 'skype-fill',\n 'skype-line',\n 'slack-fill',\n 'slack-line',\n 'slash-commands',\n 'slash-commands-2',\n 'slice-fill',\n 'slice-line',\n 'slideshow-2-fill',\n 'slideshow-2-line',\n 'slideshow-3-fill',\n 'slideshow-3-line',\n 'slideshow-4-fill',\n 'slideshow-4-line',\n 'slideshow-fill',\n 'slideshow-line',\n 'slow-down-fill',\n 'slow-down-line',\n 'smartphone-fill',\n 'smartphone-line',\n 'snapchat-fill',\n 'snapchat-line',\n 'snowy-fill',\n 'snowy-line',\n 'sort-asc',\n 'sort-desc',\n 'sound-module-fill',\n 'sound-module-line',\n 'soundcloud-fill',\n 'soundcloud-line',\n 'space',\n 'space-ship-fill',\n 'space-ship-line',\n 'spam-2-fill',\n 'spam-2-line',\n 'spam-3-fill',\n 'spam-3-line',\n 'spam-fill',\n 'spam-line',\n 'sparkling-2-fill',\n 'sparkling-2-line',\n 'sparkling-fill',\n 'sparkling-line',\n 'speak-fill',\n 'speak-line',\n 'speaker-2-fill',\n 'speaker-2-line',\n 'speaker-3-fill',\n 'speaker-3-line',\n 'speaker-fill',\n 'speaker-line',\n 'spectrum-fill',\n 'spectrum-line',\n 'speed-fill',\n 'speed-line',\n 'speed-mini-fill',\n 'speed-mini-line',\n 'speed-up-fill',\n 'speed-up-line',\n 'split-cells-horizontal',\n 'split-cells-vertical',\n 'spotify-fill',\n 'spotify-line',\n 'spy-fill',\n 'spy-line',\n 'square-fill',\n 'square-line',\n 'stack-fill',\n 'stack-line',\n 'stack-overflow-fill',\n 'stack-overflow-line',\n 'stackshare-fill',\n 'stackshare-line',\n 'star-fill',\n 'star-half-fill',\n 'star-half-line',\n 'star-half-s-fill',\n 'star-half-s-line',\n 'star-line',\n 'star-s-fill',\n 'star-s-line',\n 'star-smile-fill',\n 'star-smile-line',\n 'steam-fill',\n 'steam-line',\n 'steering-2-fill',\n 'steering-2-line',\n 'steering-fill',\n 'steering-line',\n 'stethoscope-fill',\n 'stethoscope-line',\n 'sticky-note-2-fill',\n 'sticky-note-2-line',\n 'sticky-note-fill',\n 'sticky-note-line',\n 'stock-fill',\n 'stock-line',\n 'stop-circle-fill',\n 'stop-circle-line',\n 'stop-fill',\n 'stop-line',\n 'stop-mini-fill',\n 'stop-mini-line',\n 'store-2-fill',\n 'store-2-line',\n 'store-3-fill',\n 'store-3-line',\n 'store-fill',\n 'store-line',\n 'strikethrough',\n 'strikethrough-2',\n 'subscript',\n 'subscript-2',\n 'subtract-fill',\n 'subtract-line',\n 'subway-fill',\n 'subway-line',\n 'subway-wifi-fill',\n 'subway-wifi-line',\n 'suitcase-2-fill',\n 'suitcase-2-line',\n 'suitcase-3-fill',\n 'suitcase-3-line',\n 'suitcase-fill',\n 'suitcase-line',\n 'sun-cloudy-fill',\n 'sun-cloudy-line',\n 'sun-fill',\n 'sun-foggy-fill',\n 'sun-foggy-line',\n 'sun-line',\n 'supabase-fill',\n 'supabase-line',\n 'superscript',\n 'superscript-2',\n 'surgical-mask-fill',\n 'surgical-mask-line',\n 'surround-sound-fill',\n 'surround-sound-line',\n 'survey-fill',\n 'survey-line',\n 'swap-box-fill',\n 'swap-box-line',\n 'swap-fill',\n 'swap-line',\n 'switch-fill',\n 'switch-line',\n 'sword-fill',\n 'sword-line',\n 'syringe-fill',\n 'syringe-line',\n 't-box-fill',\n 't-box-line',\n 't-shirt-2-fill',\n 't-shirt-2-line',\n 't-shirt-air-fill',\n 't-shirt-air-line',\n 't-shirt-fill',\n 't-shirt-line',\n 'table-2',\n 'table-alt-fill',\n 'table-alt-line',\n 'table-fill',\n 'table-line',\n 'tablet-fill',\n 'tablet-line',\n 'takeaway-fill',\n 'takeaway-line',\n 'taobao-fill',\n 'taobao-line',\n 'tape-fill',\n 'tape-line',\n 'task-fill',\n 'task-line',\n 'taxi-fill',\n 'taxi-line',\n 'taxi-wifi-fill',\n 'taxi-wifi-line',\n 'team-fill',\n 'team-line',\n 'telegram-fill',\n 'telegram-line',\n 'temp-cold-fill',\n 'temp-cold-line',\n 'temp-hot-fill',\n 'temp-hot-line',\n 'tent-fill',\n 'tent-line',\n 'terminal-box-fill',\n 'terminal-box-line',\n 'terminal-fill',\n 'terminal-line',\n 'terminal-window-fill',\n 'terminal-window-line',\n 'test-tube-fill',\n 'test-tube-line',\n 'text',\n 'text-direction-l',\n 'text-direction-r',\n 'text-spacing',\n 'text-wrap',\n 'thermometer-fill',\n 'thermometer-line',\n 'threads-fill',\n 'threads-line',\n 'thumb-down-fill',\n 'thumb-down-line',\n 'thumb-up-fill',\n 'thumb-up-line',\n 'thunderstorms-fill',\n 'thunderstorms-line',\n 'ticket-2-fill',\n 'ticket-2-line',\n 'ticket-fill',\n 'ticket-line',\n 'tiktok-fill',\n 'tiktok-line',\n 'time-fill',\n 'time-line',\n 'timer-2-fill',\n 'timer-2-line',\n 'timer-fill',\n 'timer-flash-fill',\n 'timer-flash-line',\n 'timer-line',\n 'todo-fill',\n 'todo-line',\n 'toggle-fill',\n 'toggle-line',\n 'token-swap-fill',\n 'token-swap-line',\n 'tools-fill',\n 'tools-line',\n 'tornado-fill',\n 'tornado-line',\n 'trademark-fill',\n 'trademark-line',\n 'traffic-light-fill',\n 'traffic-light-line',\n 'train-fill',\n 'train-line',\n 'train-wifi-fill',\n 'train-wifi-line',\n 'translate',\n 'translate-2',\n 'travesti-fill',\n 'travesti-line',\n 'treasure-map-fill',\n 'treasure-map-line',\n 'tree-fill',\n 'tree-line',\n 'trello-fill',\n 'trello-line',\n 'triangle-fill',\n 'triangle-line',\n 'trophy-fill',\n 'trophy-line',\n 'truck-fill',\n 'truck-line',\n 'tumblr-fill',\n 'tumblr-line',\n 'tv-2-fill',\n 'tv-2-line',\n 'tv-fill',\n 'tv-line',\n 'twitch-fill',\n 'twitch-line',\n 'twitter-fill',\n 'twitter-line',\n 'twitter-x-fill',\n 'twitter-x-line',\n 'typhoon-fill',\n 'typhoon-line',\n 'u-disk-fill',\n 'u-disk-line',\n 'ubuntu-fill',\n 'ubuntu-line',\n 'umbrella-fill',\n 'umbrella-line',\n 'underline',\n 'uninstall-fill',\n 'uninstall-line',\n 'unpin-fill',\n 'unpin-line',\n 'unsplash-fill',\n 'unsplash-line',\n 'upload-2-fill',\n 'upload-2-line',\n 'upload-cloud-2-fill',\n 'upload-cloud-2-line',\n 'upload-cloud-fill',\n 'upload-cloud-line',\n 'upload-fill',\n 'upload-line',\n 'usb-fill',\n 'usb-line',\n 'user-2-fill',\n 'user-2-line',\n 'user-3-fill',\n 'user-3-line',\n 'user-4-fill',\n 'user-4-line',\n 'user-5-fill',\n 'user-5-line',\n 'user-6-fill',\n 'user-6-line',\n 'user-add-fill',\n 'user-add-line',\n 'user-fill',\n 'user-follow-fill',\n 'user-follow-line',\n 'user-forbid-fill',\n 'user-forbid-line',\n 'user-heart-fill',\n 'user-heart-line',\n 'user-line',\n 'user-location-fill',\n 'user-location-line',\n 'user-received-2-fill',\n 'user-received-2-line',\n 'user-received-fill',\n 'user-received-line',\n 'user-search-fill',\n 'user-search-line',\n 'user-settings-fill',\n 'user-settings-line',\n 'user-shared-2-fill',\n 'user-shared-2-line',\n 'user-shared-fill',\n 'user-shared-line',\n 'user-smile-fill',\n 'user-smile-line',\n 'user-star-fill',\n 'user-star-line',\n 'user-unfollow-fill',\n 'user-unfollow-line',\n 'user-voice-fill',\n 'user-voice-line',\n 'verified-badge-fill',\n 'verified-badge-line',\n 'video-add-fill',\n 'video-add-line',\n 'video-chat-fill',\n 'video-chat-line',\n 'video-download-fill',\n 'video-download-line',\n 'video-fill',\n 'video-line',\n 'video-upload-fill',\n 'video-upload-line',\n 'vidicon-2-fill',\n 'vidicon-2-line',\n 'vidicon-fill',\n 'vidicon-line',\n 'vimeo-fill',\n 'vimeo-line',\n 'vip-crown-2-fill',\n 'vip-crown-2-line',\n 'vip-crown-fill',\n 'vip-crown-line',\n 'vip-diamond-fill',\n 'vip-diamond-line',\n 'vip-fill',\n 'vip-line',\n 'virus-fill',\n 'virus-line',\n 'visa-fill',\n 'visa-line',\n 'voice-recognition-fill',\n 'voice-recognition-line',\n 'voiceprint-fill',\n 'voiceprint-line',\n 'volume-down-fill',\n 'volume-down-line',\n 'volume-mute-fill',\n 'volume-mute-line',\n 'volume-off-vibrate-fill',\n 'volume-off-vibrate-line',\n 'volume-up-fill',\n 'volume-up-line',\n 'volume-vibrate-fill',\n 'volume-vibrate-line',\n 'vuejs-fill',\n 'vuejs-line',\n 'walk-fill',\n 'walk-line',\n 'wallet-2-fill',\n 'wallet-2-line',\n 'wallet-3-fill',\n 'wallet-3-line',\n 'wallet-fill',\n 'wallet-line',\n 'water-flash-fill',\n 'water-flash-line',\n 'water-percent-fill',\n 'water-percent-line',\n 'webcam-fill',\n 'webcam-line',\n 'wechat-2-fill',\n 'wechat-2-line',\n 'wechat-channels-fill',\n 'wechat-channels-line',\n 'wechat-fill',\n 'wechat-line',\n 'wechat-pay-fill',\n 'wechat-pay-line',\n 'weibo-fill',\n 'weibo-line',\n 'whatsapp-fill',\n 'whatsapp-line',\n 'wheelchair-fill',\n 'wheelchair-line',\n 'wifi-fill',\n 'wifi-line',\n 'wifi-off-fill',\n 'wifi-off-line',\n 'window-2-fill',\n 'window-2-line',\n 'window-fill',\n 'window-line',\n 'windows-fill',\n 'windows-line',\n 'windy-fill',\n 'windy-line',\n 'wireless-charging-fill',\n 'wireless-charging-line',\n 'women-fill',\n 'women-line',\n 'wordpress-fill',\n 'wordpress-line',\n 'wubi-input',\n 'xbox-fill',\n 'xbox-line',\n 'xing-fill',\n 'xing-line',\n 'youtube-fill',\n 'youtube-line',\n 'yuque-fill',\n 'yuque-line',\n 'zcool-fill',\n 'zcool-line',\n 'zhihu-fill',\n 'zhihu-line',\n 'zoom-in-fill',\n 'zoom-in-line',\n 'zoom-out-fill',\n 'zoom-out-line',\n 'zzz-fill',\n 'zzz-line'\n ],\n // https://icones.js.org/collections/fa-solid-meta.json\n 'fa-solid:': [\n 'abacus',\n 'ad',\n 'address-book',\n 'address-card',\n 'adjust',\n 'air-freshener',\n 'align-center',\n 'align-justify',\n 'align-left',\n 'align-right',\n 'allergies',\n 'ambulance',\n 'american-sign-language-interpreting',\n 'anchor',\n 'angle-double-down',\n 'angle-double-left',\n 'angle-double-right',\n 'angle-double-up',\n 'angle-down',\n 'angle-left',\n 'angle-right',\n 'angle-up',\n 'angry',\n 'ankh',\n 'apple-alt',\n 'archive',\n 'archway',\n 'arrow-alt-circle-down',\n 'arrow-alt-circle-left',\n 'arrow-alt-circle-right',\n 'arrow-alt-circle-up',\n 'arrow-circle-down',\n 'arrow-circle-left',\n 'arrow-circle-right',\n 'arrow-circle-up',\n 'arrow-down',\n 'arrow-left',\n 'arrow-right',\n 'arrow-up',\n 'arrows-alt',\n 'arrows-alt-h',\n 'arrows-alt-v',\n 'assistive-listening-systems',\n 'asterisk',\n 'at',\n 'atlas',\n 'atom',\n 'audio-description',\n 'award',\n 'baby',\n 'baby-carriage',\n 'backspace',\n 'backward',\n 'bacon',\n 'bacteria',\n 'bacterium',\n 'bahai',\n 'balance-scale',\n 'balance-scale-left',\n 'balance-scale-right',\n 'ban',\n 'band-aid',\n 'barcode',\n 'bars',\n 'baseball-ball',\n 'basketball-ball',\n 'bath',\n 'battery-empty',\n 'battery-full',\n 'battery-half',\n 'battery-quarter',\n 'battery-three-quarters',\n 'bed',\n 'beer',\n 'bell',\n 'bell-slash',\n 'bezier-curve',\n 'bible',\n 'bicycle',\n 'biking',\n 'binoculars',\n 'biohazard',\n 'birthday-cake',\n 'blender',\n 'blender-phone',\n 'blind',\n 'blog',\n 'bold',\n 'bolt',\n 'bomb',\n 'bone',\n 'bong',\n 'book',\n 'book-dead',\n 'book-medical',\n 'book-open',\n 'book-reader',\n 'bookmark',\n 'border-all',\n 'border-none',\n 'border-style',\n 'bowling-ball',\n 'box',\n 'box-open',\n 'box-tissue',\n 'boxes',\n 'braille',\n 'brain',\n 'bread-slice',\n 'briefcase',\n 'briefcase-medical',\n 'broadcast-tower',\n 'broom',\n 'brush',\n 'bug',\n 'building',\n 'bullhorn',\n 'bullseye',\n 'burn',\n 'bus',\n 'bus-alt',\n 'business-time',\n 'calculator',\n 'calculator-alt',\n 'calendar',\n 'calendar-alt',\n 'calendar-check',\n 'calendar-day',\n 'calendar-minus',\n 'calendar-plus',\n 'calendar-times',\n 'calendar-week',\n 'camera',\n 'camera-retro',\n 'campground',\n 'candy-cane',\n 'cannabis',\n 'capsules',\n 'car',\n 'car-alt',\n 'car-battery',\n 'car-crash',\n 'car-side',\n 'caravan',\n 'caret-down',\n 'caret-left',\n 'caret-right',\n 'caret-square-down',\n 'caret-square-left',\n 'caret-square-right',\n 'caret-square-up',\n 'caret-up',\n 'carrot',\n 'cart-arrow-down',\n 'cart-plus',\n 'cash-register',\n 'cat',\n 'certificate',\n 'chair',\n 'chalkboard',\n 'chalkboard-teacher',\n 'charging-station',\n 'chart-area',\n 'chart-bar',\n 'chart-line',\n 'chart-pie',\n 'check',\n 'check-circle',\n 'check-double',\n 'check-square',\n 'cheese',\n 'chess',\n 'chess-bishop',\n 'chess-board',\n 'chess-king',\n 'chess-knight',\n 'chess-pawn',\n 'chess-queen',\n 'chess-rook',\n 'chevron-circle-down',\n 'chevron-circle-left',\n 'chevron-circle-right',\n 'chevron-circle-up',\n 'chevron-down',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'child',\n 'church',\n 'circle',\n 'circle-notch',\n 'city',\n 'clinic-medical',\n 'clipboard',\n 'clipboard-check',\n 'clipboard-list',\n 'clock',\n 'clone',\n 'closed-captioning',\n 'cloud',\n 'cloud-download-alt',\n 'cloud-meatball',\n 'cloud-moon',\n 'cloud-moon-rain',\n 'cloud-rain',\n 'cloud-showers-heavy',\n 'cloud-sun',\n 'cloud-sun-rain',\n 'cloud-upload-alt',\n 'cocktail',\n 'code',\n 'code-branch',\n 'coffee',\n 'cog',\n 'cogs',\n 'coins',\n 'columns',\n 'comment',\n 'comment-alt',\n 'comment-dollar',\n 'comment-dots',\n 'comment-medical',\n 'comment-slash',\n 'comments',\n 'comments-dollar',\n 'compact-disc',\n 'compass',\n 'compress',\n 'compress-alt',\n 'compress-arrows-alt',\n 'concierge-bell',\n 'cookie',\n 'cookie-bite',\n 'copy',\n 'copyright',\n 'couch',\n 'credit-card',\n 'crop',\n 'crop-alt',\n 'cross',\n 'crosshairs',\n 'crow',\n 'crown',\n 'crutch',\n 'cube',\n 'cubes',\n 'cut',\n 'database',\n 'deaf',\n 'democrat',\n 'desktop',\n 'dharmachakra',\n 'diagnoses',\n 'dice',\n 'dice-d20',\n 'dice-d6',\n 'dice-five',\n 'dice-four',\n 'dice-one',\n 'dice-six',\n 'dice-three',\n 'dice-two',\n 'digital-tachograph',\n 'directions',\n 'disease',\n 'divide',\n 'dizzy',\n 'dna',\n 'dog',\n 'dollar-sign',\n 'dolly',\n 'dolly-flatbed',\n 'donate',\n 'door-closed',\n 'door-open',\n 'dot-circle',\n 'dove',\n 'download',\n 'drafting-compass',\n 'dragon',\n 'draw-polygon',\n 'drum',\n 'drum-steelpan',\n 'drumstick-bite',\n 'dumbbell',\n 'dumpster',\n 'dumpster-fire',\n 'dungeon',\n 'edit',\n 'egg',\n 'eject',\n 'ellipsis-h',\n 'ellipsis-v',\n 'empty-set',\n 'envelope',\n 'envelope-open',\n 'envelope-open-text',\n 'envelope-square',\n 'equals',\n 'eraser',\n 'ethernet',\n 'euro-sign',\n 'exchange-alt',\n 'exclamation',\n 'exclamation-circle',\n 'exclamation-triangle',\n 'expand',\n 'expand-alt',\n 'expand-arrows-alt',\n 'external-link-alt',\n 'external-link-square-alt',\n 'eye',\n 'eye-dropper',\n 'eye-slash',\n 'fan',\n 'fast-backward',\n 'fast-forward',\n 'faucet',\n 'fax',\n 'feather',\n 'feather-alt',\n 'female',\n 'fighter-jet',\n 'file',\n 'file-alt',\n 'file-archive',\n 'file-audio',\n 'file-code',\n 'file-contract',\n 'file-csv',\n 'file-download',\n 'file-excel',\n 'file-export',\n 'file-image',\n 'file-import',\n 'file-invoice',\n 'file-invoice-dollar',\n 'file-medical',\n 'file-medical-alt',\n 'file-pdf',\n 'file-powerpoint',\n 'file-prescription',\n 'file-signature',\n 'file-upload',\n 'file-video',\n 'file-word',\n 'fill',\n 'fill-drip',\n 'film',\n 'filter',\n 'fingerprint',\n 'fire',\n 'fire-alt',\n 'fire-extinguisher',\n 'first-aid',\n 'fish',\n 'fist-raised',\n 'flag',\n 'flag-checkered',\n 'flag-usa',\n 'flask',\n 'flushed',\n 'folder',\n 'folder-minus',\n 'folder-open',\n 'folder-plus',\n 'font',\n 'football-ball',\n 'forward',\n 'frog',\n 'frown',\n 'frown-open',\n 'function',\n 'funnel-dollar',\n 'futbol',\n 'gamepad',\n 'gas-pump',\n 'gavel',\n 'gem',\n 'genderless',\n 'ghost',\n 'gift',\n 'gifts',\n 'glass-cheers',\n 'glass-martini',\n 'glass-martini-alt',\n 'glass-whiskey',\n 'glasses',\n 'globe',\n 'globe-africa',\n 'globe-americas',\n 'globe-asia',\n 'globe-europe',\n 'golf-ball',\n 'gopuram',\n 'graduation-cap',\n 'greater-than',\n 'greater-than-equal',\n 'grimace',\n 'grin',\n 'grin-alt',\n 'grin-beam',\n 'grin-beam-sweat',\n 'grin-hearts',\n 'grin-squint',\n 'grin-squint-tears',\n 'grin-stars',\n 'grin-tears',\n 'grin-tongue',\n 'grin-tongue-squint',\n 'grin-tongue-wink',\n 'grin-wink',\n 'grip-horizontal',\n 'grip-lines',\n 'grip-lines-vertical',\n 'grip-vertical',\n 'guitar',\n 'h-square',\n 'hamburger',\n 'hammer',\n 'hamsa',\n 'hand-holding',\n 'hand-holding-heart',\n 'hand-holding-medical',\n 'hand-holding-usd',\n 'hand-holding-water',\n 'hand-lizard',\n 'hand-middle-finger',\n 'hand-paper',\n 'hand-peace',\n 'hand-point-down',\n 'hand-point-left',\n 'hand-point-right',\n 'hand-point-up',\n 'hand-pointer',\n 'hand-rock',\n 'hand-scissors',\n 'hand-sparkles',\n 'hand-spock',\n 'hands',\n 'hands-helping',\n 'hands-wash',\n 'handshake',\n 'handshake-alt-slash',\n 'handshake-slash',\n 'hanukiah',\n 'hard-hat',\n 'hashtag',\n 'hat-cowboy',\n 'hat-cowboy-side',\n 'hat-wizard',\n 'hdd',\n 'head-side-cough',\n 'head-side-cough-slash',\n 'head-side-mask',\n 'head-side-virus',\n 'heading',\n 'headphones',\n 'headphones-alt',\n 'headset',\n 'heart',\n 'heart-broken',\n 'heartbeat',\n 'helicopter',\n 'highlighter',\n 'hiking',\n 'hippo',\n 'history',\n 'hockey-puck',\n 'holly-berry',\n 'home',\n 'horse',\n 'horse-head',\n 'hospital',\n 'hospital-alt',\n 'hospital-symbol',\n 'hospital-user',\n 'hot-tub',\n 'hotdog',\n 'hotel',\n 'hourglass',\n 'hourglass-end',\n 'hourglass-half',\n 'hourglass-start',\n 'house-damage',\n 'house-user',\n 'hryvnia',\n 'i-cursor',\n 'ice-cream',\n 'icicles',\n 'icons',\n 'id-badge',\n 'id-card',\n 'id-card-alt',\n 'igloo',\n 'image',\n 'images',\n 'inbox',\n 'indent',\n 'industry',\n 'infinity',\n 'info',\n 'info-circle',\n 'integral',\n 'intersection',\n 'italic',\n 'jedi',\n 'joint',\n 'journal-whills',\n 'kaaba',\n 'key',\n 'keyboard',\n 'khanda',\n 'kiss',\n 'kiss-beam',\n 'kiss-wink-heart',\n 'kiwi-bird',\n 'lambda',\n 'landmark',\n 'language',\n 'laptop',\n 'laptop-code',\n 'laptop-house',\n 'laptop-medical',\n 'laugh',\n 'laugh-beam',\n 'laugh-squint',\n 'laugh-wink',\n 'layer-group',\n 'leaf',\n 'lemon',\n 'less-than',\n 'less-than-equal',\n 'level-down-alt',\n 'level-up-alt',\n 'life-ring',\n 'lightbulb',\n 'link',\n 'lira-sign',\n 'list',\n 'list-alt',\n 'list-ol',\n 'list-ul',\n 'location-arrow',\n 'lock',\n 'lock-open',\n 'long-arrow-alt-down',\n 'long-arrow-alt-left',\n 'long-arrow-alt-right',\n 'long-arrow-alt-up',\n 'low-vision',\n 'luggage-cart',\n 'lungs',\n 'lungs-virus',\n 'magic',\n 'magnet',\n 'mail-bulk',\n 'male',\n 'map',\n 'map-marked',\n 'map-marked-alt',\n 'map-marker',\n 'map-marker-alt',\n 'map-pin',\n 'map-signs',\n 'marker',\n 'mars',\n 'mars-double',\n 'mars-stroke',\n 'mars-stroke-h',\n 'mars-stroke-v',\n 'mask',\n 'medal',\n 'medkit',\n 'meh',\n 'meh-blank',\n 'meh-rolling-eyes',\n 'memory',\n 'menorah',\n 'mercury',\n 'meteor',\n 'microchip',\n 'microphone',\n 'microphone-alt',\n 'microphone-alt-slash',\n 'microphone-slash',\n 'microscope',\n 'minus',\n 'minus-circle',\n 'minus-square',\n 'mitten',\n 'mobile',\n 'mobile-alt',\n 'money-bill',\n 'money-bill-alt',\n 'money-bill-wave',\n 'money-bill-wave-alt',\n 'money-check',\n 'money-check-alt',\n 'monument',\n 'moon',\n 'mortar-pestle',\n 'mosque',\n 'motorcycle',\n 'mountain',\n 'mouse',\n 'mouse-pointer',\n 'mug-hot',\n 'music',\n 'network-wired',\n 'neuter',\n 'newspaper',\n 'not-equal',\n 'notes-medical',\n 'object-group',\n 'object-ungroup',\n 'oil-can',\n 'om',\n 'omega',\n 'otter',\n 'outdent',\n 'pager',\n 'paint-brush',\n 'paint-roller',\n 'palette',\n 'pallet',\n 'paper-plane',\n 'paperclip',\n 'parachute-box',\n 'paragraph',\n 'parking',\n 'passport',\n 'pastafarianism',\n 'paste',\n 'pause',\n 'pause-circle',\n 'paw',\n 'peace',\n 'pen',\n 'pen-alt',\n 'pen-fancy',\n 'pen-nib',\n 'pen-square',\n 'pencil-alt',\n 'pencil-ruler',\n 'people-arrows',\n 'people-carry',\n 'pepper-hot',\n 'percent',\n 'percentage',\n 'person-booth',\n 'phone',\n 'phone-alt',\n 'phone-slash',\n 'phone-square',\n 'phone-square-alt',\n 'phone-volume',\n 'photo-video',\n 'pi',\n 'piggy-bank',\n 'pills',\n 'pizza-slice',\n 'place-of-worship',\n 'plane',\n 'plane-arrival',\n 'plane-departure',\n 'plane-slash',\n 'play',\n 'play-circle',\n 'plug',\n 'plus',\n 'plus-circle',\n 'plus-square',\n 'podcast',\n 'poll',\n 'poll-h',\n 'poo',\n 'poo-storm',\n 'poop',\n 'portrait',\n 'pound-sign',\n 'power-off',\n 'pray',\n 'praying-hands',\n 'prescription',\n 'prescription-bottle',\n 'prescription-bottle-alt',\n 'print',\n 'procedures',\n 'project-diagram',\n 'pump-medical',\n 'pump-soap',\n 'puzzle-piece',\n 'qrcode',\n 'question',\n 'question-circle',\n 'quidditch',\n 'quote-left',\n 'quote-right',\n 'quran',\n 'radiation',\n 'radiation-alt',\n 'rainbow',\n 'random',\n 'receipt',\n 'record-vinyl',\n 'recycle',\n 'redo',\n 'redo-alt',\n 'registered',\n 'remove-format',\n 'reply',\n 'reply-all',\n 'republican',\n 'restroom',\n 'retweet',\n 'ribbon',\n 'ring',\n 'road',\n 'robot',\n 'rocket',\n 'route',\n 'rss',\n 'rss-square',\n 'ruble-sign',\n 'ruler',\n 'ruler-combined',\n 'ruler-horizontal',\n 'ruler-vertical',\n 'running',\n 'rupee-sign',\n 'sad-cry',\n 'sad-tear',\n 'satellite',\n 'satellite-dish',\n 'save',\n 'school',\n 'screwdriver',\n 'scroll',\n 'sd-card',\n 'search',\n 'search-dollar',\n 'search-location',\n 'search-minus',\n 'search-plus',\n 'seedling',\n 'server',\n 'shapes',\n 'share',\n 'share-alt',\n 'share-alt-square',\n 'share-square',\n 'shekel-sign',\n 'shield-alt',\n 'shield-virus',\n 'ship',\n 'shipping-fast',\n 'shoe-prints',\n 'shopping-bag',\n 'shopping-basket',\n 'shopping-cart',\n 'shower',\n 'shuttle-van',\n 'sigma',\n 'sign',\n 'sign-in-alt',\n 'sign-language',\n 'sign-out-alt',\n 'signal',\n 'signal-alt',\n 'signal-alt-slash',\n 'signal-slash',\n 'signature',\n 'sim-card',\n 'sink',\n 'sitemap',\n 'skating',\n 'skiing',\n 'skiing-nordic',\n 'skull',\n 'skull-crossbones',\n 'slash',\n 'sleigh',\n 'sliders-h',\n 'smile',\n 'smile-beam',\n 'smile-wink',\n 'smog',\n 'smoking',\n 'smoking-ban',\n 'sms',\n 'snowboarding',\n 'snowflake',\n 'snowman',\n 'snowplow',\n 'soap',\n 'socks',\n 'solar-panel',\n 'sort',\n 'sort-alpha-down',\n 'sort-alpha-down-alt',\n 'sort-alpha-up',\n 'sort-alpha-up-alt',\n 'sort-amount-down',\n 'sort-amount-down-alt',\n 'sort-amount-up',\n 'sort-amount-up-alt',\n 'sort-down',\n 'sort-numeric-down',\n 'sort-numeric-down-alt',\n 'sort-numeric-up',\n 'sort-numeric-up-alt',\n 'sort-up',\n 'spa',\n 'space-shuttle',\n 'spell-check',\n 'spider',\n 'spinner',\n 'splotch',\n 'spray-can',\n 'square',\n 'square-full',\n 'square-root',\n 'square-root-alt',\n 'stamp',\n 'star',\n 'star-and-crescent',\n 'star-half',\n 'star-half-alt',\n 'star-of-david',\n 'star-of-life',\n 'step-backward',\n 'step-forward',\n 'stethoscope',\n 'sticky-note',\n 'stop',\n 'stop-circle',\n 'stopwatch',\n 'stopwatch-20',\n 'store',\n 'store-alt',\n 'store-alt-slash',\n 'store-slash',\n 'stream',\n 'street-view',\n 'strikethrough',\n 'stroopwafel',\n 'subscript',\n 'subway',\n 'suitcase',\n 'suitcase-rolling',\n 'sun',\n 'superscript',\n 'surprise',\n 'swatchbook',\n 'swimmer',\n 'swimming-pool',\n 'synagogue',\n 'sync',\n 'sync-alt',\n 'syringe',\n 'table',\n 'table-tennis',\n 'tablet',\n 'tablet-alt',\n 'tablets',\n 'tachometer-alt',\n 'tag',\n 'tags',\n 'tally',\n 'tape',\n 'tasks',\n 'taxi',\n 'teeth',\n 'teeth-open',\n 'temperature-high',\n 'temperature-low',\n 'tenge',\n 'terminal',\n 'text-height',\n 'text-width',\n 'th',\n 'th-large',\n 'th-list',\n 'theater-masks',\n 'thermometer',\n 'thermometer-empty',\n 'thermometer-full',\n 'thermometer-half',\n 'thermometer-quarter',\n 'thermometer-three-quarters',\n 'theta',\n 'thumbs-down',\n 'thumbs-up',\n 'thumbtack',\n 'ticket-alt',\n 'tilde',\n 'times',\n 'times-circle',\n 'tint',\n 'tint-slash',\n 'tired',\n 'toggle-off',\n 'toggle-on',\n 'toilet',\n 'toilet-paper',\n 'toilet-paper-slash',\n 'toolbox',\n 'tools',\n 'tooth',\n 'torah',\n 'torii-gate',\n 'tractor',\n 'trademark',\n 'traffic-light',\n 'trailer',\n 'train',\n 'tram',\n 'transgender',\n 'transgender-alt',\n 'trash',\n 'trash-alt',\n 'trash-restore',\n 'trash-restore-alt',\n 'tree',\n 'trophy',\n 'truck',\n 'truck-loading',\n 'truck-monster',\n 'truck-moving',\n 'truck-pickup',\n 'tshirt',\n 'tty',\n 'tv',\n 'umbrella',\n 'umbrella-beach',\n 'underline',\n 'undo',\n 'undo-alt',\n 'union',\n 'universal-access',\n 'university',\n 'unlink',\n 'unlock',\n 'unlock-alt',\n 'upload',\n 'user',\n 'user-alt',\n 'user-alt-slash',\n 'user-astronaut',\n 'user-check',\n 'user-circle',\n 'user-clock',\n 'user-cog',\n 'user-edit',\n 'user-friends',\n 'user-graduate',\n 'user-injured',\n 'user-lock',\n 'user-md',\n 'user-minus',\n 'user-ninja',\n 'user-nurse',\n 'user-plus',\n 'user-secret',\n 'user-shield',\n 'user-slash',\n 'user-tag',\n 'user-tie',\n 'user-times',\n 'users',\n 'users-cog',\n 'users-slash',\n 'utensil-spoon',\n 'utensils',\n 'value-absolute',\n 'vector-square',\n 'venus',\n 'venus-double',\n 'venus-mars',\n 'vest',\n 'vest-patches',\n 'vial',\n 'vials',\n 'video',\n 'video-slash',\n 'vihara',\n 'virus',\n 'virus-slash',\n 'viruses',\n 'voicemail',\n 'volleyball-ball',\n 'volume',\n 'volume-down',\n 'volume-mute',\n 'volume-off',\n 'volume-slash',\n 'volume-up',\n 'vote-yea',\n 'vr-cardboard',\n 'walking',\n 'wallet',\n 'warehouse',\n 'water',\n 'wave-square',\n 'weight',\n 'weight-hanging',\n 'wheelchair',\n 'wifi',\n 'wifi-slash',\n 'wind',\n 'window-close',\n 'window-maximize',\n 'window-minimize',\n 'window-restore',\n 'wine-bottle',\n 'wine-glass',\n 'wine-glass-alt',\n 'won-sign',\n 'wrench',\n 'x-ray',\n 'yen-sign',\n 'yin-yang'\n ]\n}\n","<script lang=\"ts\" setup>\nimport { computed, ref, toRef, watch } from 'vue'\nimport { useMergedState } from '@maxax/hooks'\nimport { call, cloneDeep } from '@maxax/utils'\nimport { NButton, NEmpty, NInput, NPagination, NPopover, NScrollbar, NTabPane, NTabs } from 'naive-ui'\nimport { useLocale, useNamespace } from '../../composable'\nimport { XBasicIconOnline } from '../basic-icon-online'\nimport { IconJson } from './data'\nimport type { BasicIconPickerProps, IconPickerOnUpdateValueImpl, ParameterCSSProperties } from './interface'\n\nconst props = defineProps<BasicIconPickerProps>()\n\nconst { b, e } = useNamespace('basic-icon-picker')\n\n// 管理双向绑定\nconst uncontrolledValueRef = ref(props.defaultValue || '')\nconst controlledValueRef = toRef(props, 'value')\nconst mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef)\n\nconst { t } = useLocale()\n\nconst iconList = ref<Record<string, string[]>>(IconJson)\n// 深拷贝图标数据,前端做搜索\nconst copyIconList = cloneDeep(iconList.value)\nconst totalPage = ref(0)\n// 每页显示35个图标\nconst pageSize = ref(35)\nconst currentPage = ref(1)\n\n// 搜索条件\nconst filterValue = ref('')\n\n// 提取前缀与图标名\nconst iconPrefix = computed(() => {\n const value = mergedValueRef.value || ''\n const colonIndex = value.indexOf(':')\n return colonIndex >= 0 ? value.substring(0, colonIndex + 1) : 'ep:'\n})\n\nconst iconName = computed(() => {\n const value = mergedValueRef.value || ''\n const colonIndex = value.indexOf(':')\n return colonIndex >= 0 ? value.substring(colonIndex + 1) : ''\n})\n\n// 当前激活的图标类型\nconst currentActiveType = ref(iconPrefix.value || 'ep:')\n\nconst tabsList = [\n {\n label: 'Element Plus',\n name: 'ep:'\n },\n {\n label: 'Remix Icon',\n name: 'ri:'\n },\n {\n label: 'Font Awesome 5 Solid',\n name: 'fa-solid:'\n }\n]\n\nconst pageList = computed(() => (copyIconList[currentActiveType.value] || []).filter(i => i.includes(filterValue.value)).slice((currentPage.value - 1) * pageSize.value, currentPage.value * pageSize.value))\n\nconst iconItemStyle = computed((): ParameterCSSProperties => {\n return item => {\n if (mergedValueRef.value === currentActiveType.value + item) {\n return {\n borderColor: 'rgb(var(--primary-color))',\n color: 'rgb(var(--primary-color))'\n }\n }\n }\n})\n\n// 统一处理值更新和事件触发\nconst updateValue = (newValue: string) => {\n if (props.disabled) return\n\n uncontrolledValueRef.value = newValue\n\n const { onChange, onUpdateValue, 'onUpdate:value': _onUpdateValue } = props\n if (onChange) call(onChange as IconPickerOnUpdateValueImpl, newValue)\n if (onUpdateValue) call(onUpdateValue as IconPickerOnUpdateValueImpl, newValue)\n if (_onUpdateValue) call(_onUpdateValue as IconPickerOnUpdateValueImpl, newValue)\n}\n\nfunction onBeforeEnter() {\n // 显示弹窗时,选中当前图标对应的分类\n currentActiveType.value = iconPrefix.value\n\n // 寻找当前图标在第几页\n const name = iconName.value\n if (name) {\n const curIconIndex = (copyIconList[currentActiveType.value] || []).findIndex(i => i === name)\n if (curIconIndex >= 0) {\n currentPage.value = Math.ceil((curIconIndex + 1) / pageSize.value)\n } else {\n currentPage.value = 1\n }\n }\n}\n\nfunction onAfterLeave() {\n filterValue.value = ''\n}\n\nfunction onPopoverUpdate(visible: boolean) {\n if (visible) {\n onBeforeEnter()\n } else {\n onAfterLeave()\n }\n}\n\nfunction handleClick(value: string | number) {\n currentPage.value = 1\n currentActiveType.value = `${value}`\n}\n\nfunction onChangeIcon(item: string) {\n updateValue(currentActiveType.value + item)\n}\n\nfunction onCurrentChange(page: number) {\n currentPage.value = page\n}\n\nfunction onClear() {\n updateValue('')\n}\n\nwatch(\n () => pageList.value,\n () => (totalPage.value = (copyIconList[currentActiveType.value] || []).filter(i => i.includes(filterValue.value)).length),\n { immediate: true }\n)\n\nwatch(\n () => filterValue.value,\n () => (currentPage.value = 1)\n)\n</script>\n\n<template>\n <div :class=\"b()\">\n <NInput v-model:value=\"mergedValueRef\" @update:value=\"updateValue\">\n <template #suffix>\n <NPopover :width=\"339\" trigger=\"click\" class=\"pure-popper\" :on-update:show=\"onPopoverUpdate\" :content-class=\"b()\">\n <template #trigger>\n <div :class=\"e('trigger')\">\n <XBasicIconOnline :icon=\"mergedValueRef || 'ri:quill-pen-fill'\" />\n </div>\n </template>\n\n <NInput v-model:value=\"filterValue\" :placeholder=\"t('max.iconPicker.searchIcon')\" clearable />\n\n <NTabs v-model:value=\"currentActiveType\" :on-update:value=\"handleClick\">\n <NTabPane v-for=\"(pane, index) in tabsList\" :key=\"index\" :tab=\"pane.label\" :name=\"pane.name\">\n <NScrollbar :class=\"e('scrollbar')\">\n <ul class=\"panel-icon-list\">\n <li v-for=\"(item, key) in pageList\" :key=\"key\" :title=\"item\" :class=\"e('icon-item')\" :style=\"iconItemStyle(item)\" @click=\"onChangeIcon(item)\">\n <XBasicIconOnline :icon=\"currentActiveType + item\" width=\"20px\" height=\"20px\" />\n </li>\n </ul>\n <NEmpty v-show=\"pageList.length === 0\" :description=\"t('max.iconPicker.iconNotExist')\" :image-size=\"60\" />\n </NScrollbar>\n </NTabPane>\n </NTabs>\n\n <div :class=\"e('footer')\">\n <NPagination class=\"footer-select-page\" :item-count=\"totalPage\" :page=\"currentPage\" :page-size=\"pageSize\" simple :on-update:page=\"onCurrentChange\" />\n <NButton class=\"footer-select-btn\" type=\"error\" size=\"small\" quaternary @click=\"onClear\">{{ t('max.iconPicker.clear') }}</NButton>\n </div>\n </NPopover>\n </template>\n </NInput>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicIconPicker from './BasicIconPicker.vue'\n\nexport const XBasicIconPicker: SFCWithInstall<typeof BasicIconPicker> = withInstall(BasicIconPicker)\nexport type BasicIconPickerInstance = InstanceType<typeof BasicIconPicker>\n\nexport default XBasicIconPicker\n\nexport * from './interface'\n","export const ROW_KEY = '_MAX_ROW_KEY'\n\n// Optional display number per page;\nexport const PAGE_SIZE_OPTIONS = [10, 50, 80, 100]\n\n// Number of items displayed per page\nexport const PAGE_SIZE = 10\n\n// Common interface field settings\nexport const FETCH_SETTING = {\n // The field name of the current page passed to the background\n pageField: 'page',\n // The number field name of each page displayed in the background\n sizeField: 'pageSize',\n // Field name of the form data returned by the interface\n listField: 'itemList',\n // Total number of tables returned by the interface field name\n totalField: 'totalCount'\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, onMounted, reactive, ref, unref, watch, watchEffect } from 'vue'\nimport { useTimeoutFn } from '@vueuse/core'\nimport type { KeyValueType, Recordable, ReturnEmitType } from '@maxax/types'\nimport { guid, mergeArray } from '@maxax/utils'\nimport { cloneDeep, get, isBoolean, isFunction, isPlainObject, merge } from 'lodash-es'\nimport type { VxePagerEvents } from 'vxe-pc-ui'\nimport { FETCH_SETTING, PAGE_SIZE, ROW_KEY } from '../constants'\nimport type { BasicListPageItemKey, BasicListPagePagerProps, BasicListPageProps, GetListPageItemKey, ListPageFetchParams } from '../interface'\n\nfunction parseRowKeyValue(rowKey: string | GetListPageItemKey, record: Record<string, any>): number | string {\n if (isFunction(rowKey)) {\n return rowKey(record)\n }\n return record[rowKey]\n}\n\ninterface UseDataSourceActionType {\n getPaginationInfo: Ref<boolean | BasicListPagePagerProps>\n setPagination: (info: Partial<BasicListPagePagerProps>) => void\n setLoading: (loading: boolean) => void\n tableData: Ref<Recordable[]>\n emit: ReturnEmitType\n}\n\ninterface SearchState {\n sortInfo: Recordable\n filterInfo: Record<string, string[]>\n}\n\ninterface ListDataFindRow {\n index: number\n data: any[]\n}\n\nexport function useDataSource(propsRef: ComputedRef<BasicListPageProps>, { tableData, getPaginationInfo, setPagination, setLoading, emit }: UseDataSourceActionType) {\n const searchState = reactive<SearchState>({\n sortInfo: {},\n filterInfo: {}\n })\n\n const dataSourceRef = ref<Recordable[]>([])\n const rawDataSourceRef = ref<Recordable>({})\n const searchInfoRef = ref<Recordable>({})\n\n const getDataSourceRef: Ref<Array<Recordable<any>>> = ref([])\n\n const getRowKey = computed(() => {\n const { rKey } = unref(propsRef)\n return rKey || ROW_KEY\n })\n\n watchEffect(() => {\n tableData.value = unref(dataSourceRef)\n })\n\n watch(\n () => unref(propsRef).data,\n () => {\n const { data, api } = unref(propsRef)\n !api && data && (dataSourceRef.value = data)\n },\n {\n immediate: true\n }\n )\n\n watch(\n () => dataSourceRef.value,\n () => {\n const dataSource = unref(dataSourceRef)\n if (!dataSource || dataSource.length === 0) {\n getDataSourceRef.value = unref(dataSourceRef.value || [])\n return false\n }\n\n const firstItem = dataSource[0]\n const lastItem = dataSource[dataSource.length - 1]\n\n if (firstItem && lastItem) {\n if (!firstItem[ROW_KEY] || !lastItem[ROW_KEY]) {\n const data = cloneDeep(unref(dataSourceRef))\n data.forEach(item => {\n if (!item[ROW_KEY]) {\n item[ROW_KEY] = guid()\n }\n })\n dataSourceRef.value = data\n }\n }\n getDataSourceRef.value = unref(dataSourceRef)\n },\n {\n deep: true,\n immediate: true\n }\n )\n\n function findListDataRecord(keyValue: BasicListPageItemKey) {\n if (!dataSourceRef.value || dataSourceRef.value.length === 0) return\n return dataSourceRef.value.find(item => parseRowKeyValue(unref(getRowKey), item) === keyValue)\n }\n\n async function updateListData(index: number, key: BasicListPageItemKey, value: any) {\n const record = dataSourceRef.value[index]\n if (record) {\n dataSourceRef.value[index][key] = value\n }\n return dataSourceRef.value[index]\n }\n\n function updateListDataRecord(keyValue: BasicListPageItemKey, record: Recordable): Recordable | undefined {\n const row = findListDataRecord(keyValue)\n\n if (row) {\n for (const field in row) {\n if (Reflect.has(record, field)) row[field] = record[field]\n }\n return row\n }\n }\n\n function deleteListDataRecord(keyValues: BasicListPageItemKey | BasicListPageItemKey[]) {\n if (!dataSourceRef.value || dataSourceRef.value.length === 0) return\n const delKeyValues = !Array.isArray(keyValues) ? [keyValues] : keyValues\n\n for (const keyValue of delKeyValues) {\n $deleteRow(dataSourceRef.value, keyValue)\n $deleteRow(unref(propsRef).data, keyValue)\n }\n }\n\n function insertListDataRecord(record: Recordable | Recordable[], index?: number): Recordable[] | undefined {\n const $index = index || dataSourceRef.value?.length\n const $record: Recordable[] = !Array.isArray(record) ? [record] : record\n unref(dataSourceRef).splice($index, 0, ...$record)\n return unref(dataSourceRef)\n }\n\n function setListData<T = Recordable>(values: T[]) {\n dataSourceRef.value = values as Recordable[]\n }\n\n function getDataSource<T = Recordable>() {\n return getDataSourceRef.value as T[]\n }\n\n function getRawDataSource<T = Recordable>() {\n return rawDataSourceRef.value as T\n }\n\n async function reload(opt?: ListPageFetchParams) {\n return await fetch(opt)\n }\n\n function getSearchInfo<T = Recordable>() {\n return searchInfoRef.value as T\n }\n\n // 批量合并\n function mergeListDataRecord(records: Recordable[], key: KeyValueType = ROW_KEY) {\n const itemList = cloneDeep(getDataSource() || [])\n const items = mergeArray(itemList, records, key)\n setListData(items)\n }\n\n async function fetch(opt?: ListPageFetchParams) {\n const { api, dynamicApi, searchInfo, defSort, fetchSetting, beforeFetch, afterFetch, useSearchForm, pagination, handleSearchInfoFn } = unref(propsRef)\n\n if (!api && !dynamicApi) return\n\n try {\n setLoading(true)\n const { pageField, sizeField, listField, totalField } = {\n ...FETCH_SETTING,\n ...fetchSetting\n }\n let pageParams: Recordable = {}\n\n const { currentPage = 1, pageSize = PAGE_SIZE } = unref(getPaginationInfo) as BasicListPagePagerProps\n\n const isPagination = isBoolean(pagination) ? pagination : isPlainObject(pagination)\n\n if (isBoolean(pagination) && !pagination) {\n pageParams = {}\n } else {\n pageParams[pageField] = (opt && opt.page) || currentPage\n pageParams[sizeField] = pageSize\n }\n\n const { sortInfo = {}, filterInfo } = searchState\n\n const relationForm = unref(propsRef).relationForm?.()\n\n const formValue = relationForm ? relationForm.getFieldsValue() : {}\n\n const searchInfoParams = useSearchForm && handleSearchInfoFn ? handleSearchInfoFn(formValue) : formValue\n\n const pageInfo = {\n ...pageParams,\n pageIndex: pageParams[pageField],\n paging: Boolean(pagination),\n pageInfo: {\n ...pageParams,\n pageIndex: pageParams[pageField],\n paging: Boolean(pagination)\n }\n }\n\n let params: Recordable = merge(isPagination ? pageInfo : {}, searchInfoParams, { param: searchInfoParams }, searchInfo, opt?.searchInfo ?? {}, defSort, sortInfo, opt?.sortInfo ?? {}, filterInfo, opt?.filterInfo ?? {})\n\n if (beforeFetch && isFunction(beforeFetch)) {\n params = (await beforeFetch(params)) || params\n }\n\n searchInfoRef.value = params\n\n const apiFn = api || dynamicApi?.(params)\n\n const res = await apiFn?.(params)\n rawDataSourceRef.value = res.data\n\n const isArrayResult = Array.isArray(res.data)\n\n let resultItems: Recordable[] = isArrayResult ? res.data : get(res.data, listField)\n const resultTotal: number = isArrayResult ? res.data.length : get(res.data, totalField)\n\n if (afterFetch && isFunction(afterFetch)) {\n resultItems = (await afterFetch(resultItems)) || resultItems\n }\n\n dataSourceRef.value = resultItems\n setPagination({\n total: resultTotal || 0\n })\n\n emit('fetch-success', {\n items: unref(resultItems),\n total: resultTotal\n })\n\n return resultItems\n } catch (error) {\n emit('fetch-error', error)\n dataSourceRef.value = []\n setPagination({\n total: 0\n })\n } finally {\n setLoading(false)\n }\n }\n\n function $findRow(data: any[] | undefined, keyValue: BasicListPageItemKey): ListDataFindRow | null {\n if (data === null || data === undefined) {\n return null\n }\n for (let i = 0; i < data.length; i++) {\n const row = data[i]\n if (parseRowKeyValue(unref(getRowKey), row) === keyValue) {\n return { index: i, data }\n }\n if (row.children?.length > 0) {\n const result = $findRow(row.children, keyValue)\n if (result !== null) {\n return result\n }\n }\n }\n return null\n }\n\n function $deleteRow(data: any[] | undefined, keyValue: BasicListPageItemKey) {\n const row = $findRow(data, keyValue)\n if (row === null || row.index === -1) {\n return\n }\n row.data.splice(row.index, 1)\n }\n\n const onPageChange: VxePagerEvents.PageChange = params => {\n setPagination({ currentPage: params.currentPage, pageSize: params.pageSize })\n emit('page-change', params)\n fetch()\n }\n\n onMounted(() => {\n useTimeoutFn(() => {\n unref(propsRef).immediate && fetch()\n }, 16)\n })\n\n return {\n searchInfoRef,\n getDataSourceRef,\n fetch,\n reload,\n onPageChange,\n getDataSource,\n getRawDataSource,\n getSearchInfo,\n setListData,\n updateListData,\n updateListDataRecord,\n deleteListDataRecord,\n insertListDataRecord,\n findListDataRecord,\n mergeListDataRecord\n }\n}\n","import type { ComputedRef } from 'vue'\nimport { unref } from 'vue'\nimport type { Recordable } from '@maxax/types'\nimport { isFunction } from '@maxax/utils'\nimport type { BasicListPagePagerProps, BasicListPageProps, ListPageFetchParams } from '../interface'\n\ninterface UseListFormActionType {\n fetch: (opt?: ListPageFetchParams) => Promise<Recordable[] | undefined>\n setPagination: (info: Partial<BasicListPagePagerProps>) => void\n getLoading: ComputedRef<boolean | undefined>\n}\n\nexport function useListForm(propsRef: ComputedRef<BasicListPageProps>, { fetch, getLoading, setPagination }: UseListFormActionType) {\n function handleSearchInfoChange(info: Recordable = {}) {\n let searchInfo = info\n const { handleSearchInfoFn } = unref(propsRef)\n if (handleSearchInfoFn && isFunction(handleSearchInfoFn)) {\n searchInfo = handleSearchInfoFn(info) || info\n }\n setPagination({ currentPage: 1 })\n fetch({ searchInfo, page: 1 })\n }\n\n function handleSearchInfoReload(info: Recordable = {}) {\n let searchInfo = info\n const { handleSearchInfoFn } = unref(propsRef)\n if (handleSearchInfoFn && isFunction(handleSearchInfoFn)) {\n searchInfo = handleSearchInfoFn(info) || info\n }\n fetch({ searchInfo })\n }\n\n return {\n getLoading,\n handleSearchInfoChange,\n handleSearchInfoReload\n }\n}\n","import type { ComputedRef } from 'vue'\nimport { computed, ref, unref, watch } from 'vue'\nimport type { BasicListPageProps } from '../interface'\n\nexport function useLoading(props: ComputedRef<BasicListPageProps>) {\n const loadingRef = ref(unref(props).loading)\n\n watch(\n () => unref(props).loading,\n loading => {\n loadingRef.value = loading\n }\n )\n\n const getLoading = computed(() => unref(loadingRef))\n\n function setLoading(loading: boolean) {\n loadingRef.value = loading\n }\n\n return { getLoading, setLoading }\n}\n","import type { ComputedRef } from 'vue'\nimport { ref, unref, watch } from 'vue'\nimport { isBoolean } from 'lodash-es'\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS } from '../constants'\nimport type { BasicListPagePagerProps, BasicListPageProps } from '../interface'\n\nexport function usePagination(propsRef: ComputedRef<BasicListPageProps>) {\n const getPaginationInfo = ref<BasicListPagePagerProps>({\n size: 'small',\n border: true,\n currentPage: 1,\n pageSize: PAGE_SIZE,\n pageSizes: PAGE_SIZE_OPTIONS,\n layouts: ['PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'Sizes', 'Total'],\n total: 0\n })\n const show = ref(true)\n\n watch(\n () => unref(propsRef).pagination,\n pagination => {\n if (!isBoolean(pagination) && pagination) {\n getPaginationInfo.value = {\n ...unref(getPaginationInfo),\n ...(pagination ?? {})\n }\n }\n },\n {\n immediate: true\n }\n )\n\n function setPagination(info: Partial<BasicListPagePagerProps>) {\n const paginationInfo = unref(getPaginationInfo)\n getPaginationInfo.value = {\n ...(!isBoolean(paginationInfo) ? paginationInfo : {}),\n ...info\n }\n }\n\n function getPagination() {\n return unref(getPaginationInfo)\n }\n\n function getShowPagination() {\n return unref(show)\n }\n\n async function setShowPagination(flag: boolean) {\n show.value = flag\n }\n\n return { getPagination, getPaginationInfo, setShowPagination, getShowPagination, setPagination }\n}\n","<script lang=\"ts\" setup>\nimport { computed, ref, unref, useAttrs } from 'vue'\nimport type { Recordable } from '@maxax/types'\nimport { isFunction } from '@maxax/utils'\nimport { NSpin } from 'naive-ui'\nimport { VxePager } from 'vxe-pc-ui'\nimport { useLocale, useNamespace } from '../../composable'\nimport { FETCH_SETTING, ROW_KEY } from './constants'\nimport { useDataSource, useListForm, useLoading, usePagination } from './hooks'\nimport type { BasicListPageEmitType, BasicListPageProps, ListPageActionType } from './interface'\n\nconst props = withDefaults(defineProps<BasicListPageProps>(), {\n fetchSetting: () => FETCH_SETTING\n})\nconst emit = defineEmits<BasicListPageEmitType>()\nconst attrs = useAttrs()\nconst { b, e, is } = useNamespace('basic-list-page')\n\nconst { t } = useLocale()\n\nconst innerPropsRef = ref<Partial<BasicListPageProps>>()\n\nconst getProps = computed(() => {\n return { ...props, ...unref(innerPropsRef) } as BasicListPageProps\n})\n\nconst tableData = ref([])\n\nconst getWrapperClass = computed(() => {\n return [b(), { [is('card')]: getProps.value.card }]\n})\n\nconst getListClassName = computed(() => {\n const { listClassName = '' } = getProps.value\n return listClassName\n})\n\nconst getItemClassName = (record: Recordable) => {\n const { itemClassName } = getProps.value\n if (isFunction(itemClassName)) {\n return itemClassName(record)\n }\n return itemClassName || ''\n}\n\nconst { getLoading, setLoading } = useLoading(getProps)\nconst { getPaginationInfo, getPagination, setShowPagination, getShowPagination, setPagination } = usePagination(getProps)\nconst { fetch, onPageChange, getDataSourceRef, getDataSource, getRawDataSource, getSearchInfo, setListData, updateListDataRecord, deleteListDataRecord, insertListDataRecord, findListDataRecord, reload, updateListData, mergeListDataRecord } = useDataSource(getProps, {\n tableData,\n getPaginationInfo,\n setLoading,\n setPagination,\n emit\n})\n\nconst { handleSearchInfoChange, handleSearchInfoReload } = useListForm(getProps, { fetch, getLoading, setPagination })\n\nfunction setProps(_props: Partial<BasicListPageProps>) {\n innerPropsRef.value = { ...unref(innerPropsRef), ..._props } as BasicListPageProps\n}\n\nfunction getListPageProps() {\n return getProps.value\n}\n\nconst listPageAction: ListPageActionType = {\n emit,\n reload,\n setLoading,\n setProps,\n getListPageProps,\n\n setPagination,\n setShowPagination,\n getShowPagination,\n getPaginationRef: getPagination,\n\n setListData,\n updateListData,\n updateListDataRecord,\n deleteListDataRecord,\n insertListDataRecord,\n findListDataRecord,\n mergeListDataRecord,\n getDataSource,\n getRawDataSource,\n getSearchInfo,\n\n handleSearchInfoChange,\n handleSearchInfoReload\n}\n\ndefineExpose(listPageAction)\n</script>\n\n<template>\n <div :class=\"getWrapperClass\" v-bind=\"attrs\">\n <div v-if=\"!getDataSourceRef.length\" :class=\"e('empty')\">\n <svg t=\"1715484957771\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"1727\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"32\" height=\"32\">\n <path d=\"M256 494.933333h477.866667l119.466666 290.133334v238.933333H136.533333V785.066667l119.466667-290.133334z\" fill=\"#DCECFD\" p-id=\"1728\" />\n <path d=\"M256 494.933333h477.866667v221.866667H256z\" fill=\"#BAD7FB\" p-id=\"1729\" />\n <path d=\"M136.533333 785.066667h716.8v238.933333H136.533333V785.066667z m358.4 85.333333c-47.786667 0-85.333333-37.546667-85.333333-85.333333h170.666667c0 47.786667-37.546667 85.333333-85.333334 85.333333z\" fill=\"#EEF5FE\" p-id=\"1730\" />\n <path\n d=\"M1006.933333 494.933333h-17.066666v17.066667c0 10.24-6.826667 17.066667-17.066667 17.066667s-17.066667-6.826667-17.066667-17.066667v-17.066667h-17.066666c-10.24 0-17.066667-6.826667-17.066667-17.066666s6.826667-17.066667 17.066667-17.066667h17.066666v-17.066667c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066667 17.066666v17.066667h17.066666c10.24 0 17.066667 6.826667 17.066667 17.066667s-6.826667 17.066667-17.066667 17.066666zM802.133333 238.933333l153.6-170.666666-51.2 221.866666-102.4-51.2z m-136.533333-51.2l290.133333-119.466666-187.733333 170.666666-102.4-51.2z m5.12 218.453334c3.413333 3.413333 3.413333 6.826667 0 10.24-6.826667 6.826667-13.653333 13.653333-22.186667 20.48-3.413333 1.706667-6.826667 1.706667-10.24 0-3.413333-3.413333-1.706667-8.533333 0-10.24l20.48-20.48c5.12-3.413333 8.533333-3.413333 11.946667 0z m-68.266667 64.853333c-1.706667 1.706667-5.12 1.706667-6.826666 0-1.706667-1.706667-3.413333-3.413333-3.413334-6.826667s1.706667-5.12 3.413334-6.826666c8.533333-5.12 15.36-10.24 23.893333-15.36 3.413333-1.706667 6.826667-1.706667 10.24 1.706666 1.706667 3.413333 1.706667 8.533333-1.706667 10.24-8.533333 6.826667-17.066667 13.653333-25.6 17.066667zM571.733333 443.733333c-3.413333 0-6.826667-3.413333-8.533333-6.826666 0-8.533333-3.413333-17.066667-8.533333-23.893334-1.706667-3.413333-1.706667-8.533333 1.706666-10.24 3.413333-1.706667 6.826667-1.706667 10.24 1.706667 6.826667 10.24 10.24 20.48 10.24 32.426667 1.706667 3.413333-1.706667 6.826667-5.12 6.826666z m-35.84-47.786666c-8.533333-5.12-17.066667-6.826667-25.6-8.533334-3.413333 0-5.12-1.706667-5.12-5.12-1.706667-1.706667 0-5.12 1.706667-6.826666 1.706667-1.706667 3.413333-3.413333 6.826667-3.413334 10.24 1.706667 20.48 5.12 29.013333 10.24 1.706667 1.706667 3.413333 3.413333 3.413333 6.826667s-1.706667 5.12-3.413333 6.826667c-1.706667 1.706667-5.12 1.706667-6.826667 0z m-17.066666 85.333333c-1.706667 3.413333-5.12 6.826667-8.533334 5.12-10.24-3.413333-20.48-6.826667-29.013333-13.653333-3.413333-1.706667-3.413333-6.826667-1.706667-10.24 1.706667-3.413333 6.826667-5.12 10.24-1.706667 6.826667 5.12 15.36 8.533333 23.893334 11.946667 5.12 1.706667 6.826667 5.12 5.12 8.533333z m-35.84-93.866667c-8.533333 1.706667-17.066667 5.12-22.186667 10.24-1.706667 1.706667-5.12 1.706667-6.826667 1.706667-1.706667 0-1.706667-1.706667-3.413333-1.706667-3.413333-3.413333-3.413333-8.533333 0-10.24 8.533333-6.826667 18.773333-11.946667 30.72-13.653333h3.413333c3.413333 1.706667 5.12 5.12 5.12 10.24-1.706667 1.706667-3.413333 3.413333-6.826666 3.413333zM401.066667 85.333333C377.173333 85.333333 358.4 66.56 358.4 42.666667S377.173333 0 401.066667 0 443.733333 18.773333 443.733333 42.666667 424.96 85.333333 401.066667 85.333333z m0-68.266666c-13.653333 0-25.6 11.946667-25.6 25.6S387.413333 68.266667 401.066667 68.266667 426.666667 56.32 426.666667 42.666667 414.72 17.066667 401.066667 17.066667z m58.026666 433.493333c-6.826667-8.533333-13.653333-17.066667-17.066666-29.013333 0-3.413333 0-5.12 1.706666-6.826667 1.706667-1.706667 5.12-3.413333 6.826667-1.706667 1.706667 0 5.12 3.413333 5.12 5.12 3.413333 8.533333 6.826667 15.36 13.653333 22.186667 3.413333 3.413333 1.706667 8.533333 0 10.24-3.413333 3.413333-8.533333 3.413333-10.24 0 0 1.706667 0 0 0 0z m221.866667-56.32c-3.413333-3.413333-3.413333-6.826667-1.706667-10.24 6.826667-6.826667 11.946667-15.36 17.066667-23.893333 1.706667-3.413333 6.826667-3.413333 10.24-1.706667 3.413333 1.706667 3.413333 6.826667 1.706667 10.24-5.12 8.533333-11.946667 15.36-18.773334 23.893333 0 3.413333-5.12 3.413333-8.533333 1.706667z m39.253333-47.786667c-3.413333 0-5.12-1.706667-6.826666-3.413333-1.706667-1.706667-1.706667-5.12 0-6.826667l15.36-25.6c1.706667-3.413333 6.826667-5.12 10.24-3.413333 3.413333 1.706667 5.12 6.826667 1.706666 10.24l-15.36 25.6c0 3.413333-1.706667 5.12-5.12 3.413333z m27.306667-51.2c-3.413333-1.706667-5.12-6.826667-3.413333-10.24 3.413333-5.12 5.12-10.24 8.533333-15.36 1.706667-3.413333 5.12-5.12 8.533333-3.413333 3.413333 1.706667 5.12 6.826667 3.413334 10.24-3.413333 5.12-5.12 11.946667-8.533334 17.066667-1.706667 1.706667-5.12 3.413333-8.533333 1.706666zM819.2 273.066667l-34.133333 51.2v-68.266667l34.133333 17.066667zM551.253333 491.52c0-1.706667 0-1.706667 1.706667-3.413333-3.413333 0-6.826667 1.706667-10.24 1.706666-3.413333 0-6.826667-3.413333-6.826667-6.826666s3.413333-6.826667 6.826667-6.826667c5.12 0 11.946667-1.706667 17.066667-1.706667 1.706667-3.413333 1.706667-5.12 1.706666-8.533333 1.706667-3.413333 5.12-6.826667 8.533334-5.12 3.413333 1.706667 5.12 5.12 5.12 8.533333v3.413334h1.706666c3.413333 3.413333 3.413333 6.826667 0 10.24-1.706667 1.706667-1.706667 1.706667-3.413333 1.706666s-1.706667 0-3.413333 1.706667c-1.706667 3.413333-1.706667 6.826667-3.413334 8.533333H733.866667l117.76 290.133334h1.706666v238.933333H136.533333V785.066667h1.706667L256 494.933333h295.253333v-3.413333zM733.866667 537.6V716.8l27.306666 68.266667h71.68L733.866667 537.6z m-477.866667 0L157.013333 785.066667h71.68l27.306667-68.266667V537.6zM245.76 785.066667H426.666667v17.066666H153.6v204.8h682.666667V802.133333H563.2v-17.066666h180.906667L716.8 716.8H273.066667l-27.306667 68.266667z m27.306667-85.333334h443.733333V512H273.066667v187.733333z m256-150.186666c-1.706667 3.413333-6.826667 3.413333-10.24 0-3.413333-3.413333-3.413333-6.826667 0-10.24 6.826667-6.826667 11.946667-15.36 17.066666-22.186667 1.706667-3.413333 6.826667-3.413333 10.24-1.706667 3.413333 1.706667 3.413333 6.826667 1.706667 10.24-5.12 8.533333-11.946667 17.066667-18.773333 23.893334z m-42.666667 40.96c-3.413333 1.706667-6.826667 1.706667-10.24-1.706667-1.706667-3.413333-1.706667-8.533333 1.706667-10.24 8.533333-6.826667 15.36-11.946667 22.186666-18.773333 3.413333-3.413333 6.826667-1.706667 10.24 0 3.413333 3.413333 1.706667 8.533333 0 10.24-8.533333 8.533333-17.066667 15.36-23.893333 20.48z m-49.493333 34.133333c-3.413333 1.706667-6.826667 1.706667-10.24-1.706667-1.706667-3.413333-1.706667-8.533333 1.706666-10.24 8.533333-5.12 17.066667-10.24 23.893334-15.36 3.413333-1.706667 8.533333-1.706667 10.24 1.706667 1.706667 3.413333 1.706667 8.533333-1.706667 10.24-6.826667 5.12-15.36 10.24-23.893333 15.36z m-51.2 29.013333c-3.413333 1.706667-6.826667 0-10.24-3.413333-1.706667-3.413333 0-8.533333 3.413333-10.24 8.533333-3.413333 17.066667-8.533333 25.6-13.653333 3.413333-1.706667 8.533333 0 10.24 3.413333 1.706667 3.413333 0 8.533333-3.413333 10.24-8.533333 5.12-17.066667 10.24-25.6 13.653333zM494.933333 887.466667c-47.786667 0-85.333333-37.546667-85.333333-85.333334h17.066667c0 37.546667 30.72 68.266667 68.266666 68.266667s68.266667-30.72 68.266667-68.266667h17.066667c0 47.786667-37.546667 85.333333-85.333334 85.333334zM25.6 256C11.946667 256 0 244.053333 0 230.4S11.946667 204.8 25.6 204.8s25.6 11.946667 25.6 25.6S39.253333 256 25.6 256z\"\n fill=\"#409EFF\"\n p-id=\"1731\"\n />\n </svg>\n <p :class=\"e('empty-text')\">{{ t('max.table.empty') }}</p>\n </div>\n <div class=\"list-page-wrapper\" :class=\"[e('wrapper'), getListClassName]\">\n <div v-for=\"(item, index) in getDataSourceRef\" :key=\"item[ROW_KEY]\" class=\"basic-list-page-item\" :class=\"getItemClassName(item)\">\n <slot :row-index=\"index\" :row=\"item\" :row-key=\"item[ROW_KEY]\" />\n </div>\n </div>\n <div :class=\"e('bottom')\">\n <div :class=\"e('bottom-wrapper')\">\n <slot name=\"bottom-before\" />\n <slot name=\"bottom-after\" />\n </div>\n <VxePager v-if=\"getPaginationInfo?.total && pagination\" v-bind=\"getPaginationInfo\" @page-change=\"onPageChange\" />\n </div>\n <div v-if=\"getLoading\" :class=\"e('loading-wrapper')\">\n <NSpin size=\"small\" />\n </div>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicListPage from './BasicListPage.vue'\n\nexport const XBasicListPage: SFCWithInstall<typeof BasicListPage> = withInstall(BasicListPage)\nexport type BasicListPageInstance = InstanceType<typeof BasicListPage>\n\nexport default XBasicListPage\n\nexport * from './interface'\n","import { createApp, createVNode, defineComponent, h, reactive, ref, toRefs, Transition, vShow, withCtx, withDirectives } from 'vue'\nimport { removeClass } from '@maxax/utils'\nimport type { UseNamespaceReturn } from '../../composable'\nimport { useConfigProvider } from '../config-provider'\nimport type { LoadingOptionsResolved } from './interface'\n\nexport function createLoadingComponent(options: LoadingOptionsResolved) {\n let afterLeaveTimer: ReturnType<typeof setTimeout>\n\n const afterLeaveFlag = ref(false)\n\n const data = reactive({\n ...options,\n originalPosition: '',\n originalOverflow: '',\n visible: false\n })\n\n const basicLoadingComponent = defineComponent({\n name: 'BasicLoading',\n setup(_, { expose }) {\n const { ns, zIndex } = useConfigProvider('basic-loading')\n\n expose({ ns, zIndex })\n\n return () => {\n const svg = data.spinner || data.svg\n const spinner = h('svg', { class: 'circular', viewBox: data.svgViewBox ? data.svgViewBox : '0 0 50 50', ...(svg ? { innerHTML: svg } : {}) }, [h('circle', { class: 'path', cx: '25', cy: '25', r: '20', fill: 'none' })])\n const spinnerText = data.text ? h('p', { class: ns.b('text') }, [data.text]) : undefined\n\n return h(\n Transition,\n {\n name: ns.b('fade'),\n onAfterLeave: handleAfterLeave\n },\n {\n default: withCtx(() => [\n withDirectives(\n createVNode(\n 'div',\n {\n style: {\n backgroundColor: data.background || ''\n },\n class: [ns.b('mask'), data.customClass, data.fullscreen ? 'is-fullscreen' : '']\n },\n [\n h(\n 'div',\n {\n class: ns.b('spinner')\n },\n [spinner, spinnerText]\n )\n ]\n ),\n [[vShow, data.visible]]\n )\n ])\n }\n )\n }\n }\n })\n\n const loadingInstance = createApp(basicLoadingComponent)\n const vm = loadingInstance.mount(document.createElement('div'))\n\n function setText(text: string) {\n data.text = text\n }\n function handleAfterLeave() {\n if (!afterLeaveFlag.value) return\n const target = data.parent\n afterLeaveFlag.value = false\n target.vLoadingAddClassList = undefined\n destroySelf()\n }\n function destroySelf() {\n const target = data.parent\n const ns = (vm as any).ns as UseNamespaceReturn\n if (!target.vLoadingAddClassList) {\n let loadingNumber: number | string | null = target.getAttribute('loading-number')\n loadingNumber = Number.parseInt(loadingNumber as any, 10) - 1\n if (!loadingNumber) {\n removeClass(target, ns.bm('parent', 'relative'))\n target.removeAttribute('loading-number')\n } else {\n target.setAttribute('loading-number', loadingNumber.toString())\n }\n removeClass(target, ns.bm('parent', 'hidden'))\n }\n removeElLoadingChild()\n loadingInstance.unmount()\n }\n function removeElLoadingChild(): void {\n vm.$el?.parentNode?.removeChild(vm.$el)\n }\n function close() {\n if (options.beforeClose && !options.beforeClose()) return\n\n afterLeaveFlag.value = true\n clearTimeout(afterLeaveTimer)\n\n afterLeaveTimer = setTimeout(handleAfterLeave, 400)\n data.visible = false\n\n options.closed?.()\n }\n\n return {\n ...toRefs(data),\n setText,\n removeElLoadingChild,\n close,\n handleAfterLeave,\n vm,\n get $el(): HTMLElement {\n return vm.$el\n }\n }\n}\n\nexport type LoadingInstance = ReturnType<typeof createLoadingComponent>\n","import type { CSSProperties } from 'vue'\nimport { nextTick } from 'vue'\nimport { addClass, getStyle, isClient, isString, removeClass } from '@maxax/utils'\nimport type { UseNamespaceReturn } from '../../composable'\nimport type { LoadingOptions, LoadingOptionsResolved } from './interface'\nimport type { LoadingInstance } from './loading'\nimport { createLoadingComponent } from './loading'\n\nlet fullscreenInstance: LoadingInstance | undefined\n\nconst resolveOptions = (options: LoadingOptions): LoadingOptionsResolved => {\n let target: HTMLElement\n if (isString(options.target)) {\n target = document.querySelector<HTMLElement>(options.target) ?? document.body\n } else {\n target = options.target || document.body\n }\n return {\n parent: target === document.body || options.body ? document.body : target,\n background: options.background || '',\n svg: options.svg || '',\n svgViewBox: options.svgViewBox || '',\n spinner: options.spinner || false,\n text: options.text || '',\n fullscreen: target === document.body && (options.fullscreen ?? true),\n lock: options.lock ?? false,\n customClass: options.customClass || '',\n visible: options.visible ?? true,\n beforeClose: options.beforeClose,\n closed: options.closed,\n target\n }\n}\n\nconst addStyle = async (options: LoadingOptionsResolved, parent: HTMLElement, instance: LoadingInstance) => {\n // Compatible with the instance data format of vue@3.2.12 and earlier versions #12351\n const { nextZIndex } = (instance.vm as any).zIndex || (instance.vm as any)._.exposed.zIndex\n\n const maskStyle: CSSProperties = {}\n if (options.fullscreen) {\n instance.originalPosition.value = getStyle(document.body, 'position') as string\n instance.originalOverflow.value = getStyle(document.body, 'overflow') as string\n maskStyle.zIndex = nextZIndex()\n } else if (options.parent === document.body) {\n instance.originalPosition.value = getStyle(document.body, 'position') as string\n /**\n * await dom render when visible is true in init,\n * because some component's height maybe 0.\n * e.g. el-table.\n */\n await nextTick()\n for (const property of ['top', 'left']) {\n const scroll = property === 'top' ? 'scrollTop' : 'scrollLeft'\n // @ts-expect-error - maskStyle is a CSSProperties object\n maskStyle[property] = `${(options.target as HTMLElement).getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] - Number.parseInt(getStyle(document.body, `margin-${property}`), 10)}px`\n }\n for (const property of ['height', 'width']) {\n maskStyle[property] = `${(options.target as HTMLElement).getBoundingClientRect()[property]}px`\n }\n } else {\n instance.originalPosition.value = getStyle(parent, 'position') as string\n }\n for (const [key, value] of Object.entries(maskStyle)) {\n instance.$el.style[key] = value\n }\n}\n\nconst addClassList = (options: LoadingOptions, parent: HTMLElement, instance: LoadingInstance) => {\n // Compatible with the instance data format of vue@3.2.12 and earlier versions #12351\n const ns = ((instance.vm as any).ns as UseNamespaceReturn) || (instance.vm as any)._.exposed.ns\n\n if (!['absolute', 'fixed', 'sticky'].includes(instance.originalPosition.value)) {\n addClass(parent, ns.bm('parent', 'relative'))\n } else {\n removeClass(parent, ns.bm('parent', 'relative'))\n }\n if (options.fullscreen && options.lock) {\n addClass(parent, ns.bm('parent', 'hidden'))\n } else {\n removeClass(parent, ns.bm('parent', 'hidden'))\n }\n}\n\nexport const Loading = (options: LoadingOptions = {}): LoadingInstance => {\n if (!isClient) return undefined as any\n\n const resolved = resolveOptions(options)\n\n if (resolved.fullscreen && fullscreenInstance) {\n return fullscreenInstance\n }\n\n const instance = createLoadingComponent({\n ...resolved,\n closed: () => {\n resolved.closed?.()\n if (resolved.fullscreen) fullscreenInstance = undefined\n }\n })\n\n addStyle(resolved, resolved.parent, instance)\n addClassList(resolved, resolved.parent, instance)\n\n resolved.parent.vLoadingAddClassList = () => addClassList(resolved, resolved.parent, instance)\n\n /**\n * add loading-number to parent.\n * because if a fullscreen loading is triggered when somewhere\n * a v-loading.body was triggered before and it's parent is\n * document.body which with a margin , the fullscreen loading's\n * destroySelf function will remove 'el-loading-parent--relative',\n * and then the position of v-loading.body will be error.\n */\n let loadingNumber: string | null = resolved.parent.getAttribute('loading-number')\n if (!loadingNumber) {\n loadingNumber = '1'\n } else {\n loadingNumber = `${Number.parseInt(loadingNumber, 10) + 1}`\n }\n resolved.parent.setAttribute('loading-number', loadingNumber)\n\n resolved.parent.appendChild(instance.$el)\n\n // after instance render, then modify visible to trigger transition\n nextTick(() => (instance.visible.value = resolved.visible))\n\n if (resolved.fullscreen) {\n fullscreenInstance = instance\n }\n return instance\n}\n","import type { Directive, DirectiveBinding, UnwrapRef } from 'vue'\nimport { isRef, ref } from 'vue'\nimport { isObject, isString, kebabCase } from '@maxax/utils'\nimport type { LoadingOptions } from './interface'\nimport type { LoadingInstance } from './loading'\nimport { Loading } from './service'\n\nconst INSTANCE_KEY = Symbol('ElLoading')\n\nexport type LoadingBinding = boolean | UnwrapRef<LoadingOptions>\nexport interface ElementLoading extends HTMLElement {\n [INSTANCE_KEY]?: {\n instance: LoadingInstance\n options: LoadingOptions\n }\n}\n\nconst createInstance = (el: ElementLoading, binding: DirectiveBinding<LoadingBinding>) => {\n const vm = binding.instance\n\n const getBindingProp = <K extends keyof LoadingOptions>(key: K): LoadingOptions[K] => (isObject(binding.value) ? binding.value[key] : undefined)\n\n const resolveExpression = (key: any) => {\n const data = (isString(key) && (vm as any)?.[key]) || key\n if (data) return ref(data)\n return data\n }\n\n const getProp = <K extends keyof LoadingOptions>(name: K) => resolveExpression(getBindingProp(name) || el.getAttribute(`element-loading-${kebabCase(name)}`))\n\n const fullscreen = getBindingProp('fullscreen') ?? binding.modifiers.fullscreen\n\n const options: LoadingOptions = {\n text: getProp('text'),\n svg: getProp('svg'),\n svgViewBox: getProp('svgViewBox'),\n spinner: getProp('spinner'),\n background: getProp('background'),\n customClass: getProp('customClass'),\n fullscreen,\n target: getBindingProp('target') ?? (fullscreen ? undefined : el),\n body: getBindingProp('body') ?? binding.modifiers.body,\n lock: getBindingProp('lock') ?? binding.modifiers.lock\n }\n el[INSTANCE_KEY] = {\n options,\n instance: Loading(options)\n }\n}\n\nconst updateOptions = (newOptions: UnwrapRef<LoadingOptions>, originalOptions: LoadingOptions) => {\n for (const key of Object.keys(originalOptions)) {\n const originalOptionsKeyValue = originalOptions[key as keyof LoadingOptions]\n const newOptionsKeyValue = (newOptions as any)[key]\n\n if (isRef(originalOptionsKeyValue)) originalOptionsKeyValue.value = newOptionsKeyValue\n }\n}\n\nexport const vLoading: Directive<ElementLoading, LoadingBinding> = {\n mounted(el, binding) {\n if (binding.value) {\n createInstance(el, binding)\n }\n },\n updated(el, binding) {\n const instance = el[INSTANCE_KEY]\n if (binding.oldValue !== binding.value) {\n if (binding.value && !binding.oldValue) {\n createInstance(el, binding)\n } else if (binding.value && binding.oldValue) {\n if (isObject(binding.value)) updateOptions(binding.value, instance!.options)\n } else {\n instance?.instance.close()\n }\n }\n },\n unmounted(el) {\n el[INSTANCE_KEY]?.instance.close()\n // @ts-expect-error - Clearing symbol property reference\n el[INSTANCE_KEY] = null\n }\n}\n","import type { App } from 'vue'\nimport { vLoading } from './directive'\nimport { Loading } from './service'\n\nexport const XBasicLoading = {\n install(app: App) {\n app.directive('loading', vLoading)\n app.config.globalProperties.$loading = Loading\n },\n directive: vLoading,\n service: Loading\n}\n\nexport default XBasicLoading\n\nexport { vLoading, vLoading as XBasicLoadingDirective, Loading as XBasicLoadingService }\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { computed, ref, unref, useAttrs, watch } from 'vue'\nimport { isFunction } from '@maxax/utils'\nimport { NCard, NModal } from 'naive-ui'\nimport { useLocale, useNamespace } from '../../composable'\nimport { XBasicButton } from '../basic-button'\nimport type { BasicModalEmits, BasicModalProps } from './interface'\n\nconst props = withDefaults(defineProps<BasicModalProps>(), {\n showFooter: true,\n showCancelBtn: true,\n showConfirmBtn: true\n})\n\nconst emit = defineEmits<BasicModalEmits>()\n\nconst { b, e } = useNamespace('basic-modal')\n\nconst { t } = useLocale()\n\nconst attrs = useAttrs()\n\nconst visibleRef = ref(false)\n\nconst getBindValues = computed(() => {\n return {\n ...attrs,\n ...unref(props)\n }\n})\n\nconst cardStyle = computed(() => {\n return {\n width: unref(props).width || '300px'\n }\n})\n\nconst positiveText = computed(() => {\n return props.positiveText || t('max.button.confirm')\n})\n\nconst negativeText = computed(() => {\n return props.negativeText || t('max.button.cancel')\n})\n\nasync function onPositiveClickHandler() {\n emit('positiveClick')\n}\n\nasync function onNegativeClickHandler() {\n emit('negativeClick')\n const { onNegativeClick } = unref(getBindValues)\n if (onNegativeClick && isFunction(onNegativeClick)) {\n const res = await onNegativeClick()\n visibleRef.value = !res\n return\n }\n visibleRef.value = false\n}\n\nwatch(\n () => props.show,\n (newVal, oldVal) => {\n if (newVal !== oldVal) visibleRef.value = newVal\n },\n { immediate: true }\n)\n\nwatch(\n () => visibleRef.value,\n newVal => {\n emit('update:show', newVal)\n }\n)\n\nconst slotNames: string[] = ['default', 'cover', 'header', 'header-extra']\n</script>\n\n<template>\n <NModal v-bind=\"getBindValues\" v-model:show=\"visibleRef\" :class=\"b()\">\n <NCard v-bind=\"getBindValues.card || {}\" :class=\"e('card')\" :style=\"cardStyle\">\n <template v-for=\"item in slotNames\" :key=\"item\" #[item]=\"data\">\n <slot :name=\"item\" v-bind=\"data || {}\" />\n </template>\n\n <template v-if=\"!$slots.footer\" #footer>\n <div v-if=\"showFooter\" :class=\"e('footer')\">\n <slot name=\"before-footer\" />\n <XBasicButton v-if=\"showCancelBtn\" @click=\"onNegativeClickHandler\"> {{ negativeText }} </XBasicButton>\n <XBasicButton v-if=\"showConfirmBtn\" type=\"primary\" @click=\"onPositiveClickHandler\"> {{ positiveText }} </XBasicButton>\n <slot name=\"after-footer\" />\n </div>\n </template>\n <template v-else #footer>\n <slot name=\"footer\" />\n </template>\n </NCard>\n </NModal>\n</template>\n","import type { CardProps } from 'naive-ui'\n\nexport const basicModalProps = {} as const\n\nexport interface BasicModalProps {\n width?: string\n // 是否自动聚焦 Modal 第一个可聚焦的元素\n autoFocus?: boolean\n // 是否阻止滚动\n blockScroll?: boolean\n // 是否在按下 ESC 键时关闭\n closeOnEsc?: boolean\n // 显示指令\n displayDirective?: 'if' | 'show'\n // 是否允许点击蒙层关闭\n maskClosable?: boolean\n // 是否显示\n show: boolean\n // Modal 的挂载位置\n to?: string | HTMLElement\n // 变换位置\n transformOrigin?: 'mouse' | 'center'\n // 是否聚焦\n trapFocus?: boolean\n // z-index\n zIndex?: number\n // 关闭时触发\n onClose?: () => Promise<boolean> | boolean | any\n // 打开后触发\n onAfterEnter?: () => void\n // 关闭后触发\n onAfterLeave?: () => void\n // 关闭前触发\n onBeforeLeave?: () => void\n // 打开前触发\n onBeforeEnter?: () => void\n // 按下 ESC 键时触发\n onEsc?: () => void\n // 更新 show 时触发\n 'onUpdate:show'?: (show: boolean) => void\n // 更新 show 时触发\n onUpdateShow?: (show: boolean) => void\n // 点击蒙层时触发\n onMaskClick?: (e: MouseEvent) => void\n // 点击确定按钮时触发\n onPositiveClick?: () => Promise<boolean> | boolean | any\n // 点击取消按钮时触发\n onNegativeClick?: () => Promise<boolean> | boolean | any\n // 关闭前触发\n onBeforeHide?: () => void\n // 关闭后触发\n onAfterHide?: () => void\n // 关闭时触发\n onHide?: (value: boolean) => void\n\n // 卡片属性\n card?: CardProps\n\n positiveText?: string\n\n negativeText?: string\n\n // 是否显示底部\n showFooter?: boolean\n\n // 是否显示取消按钮\n showCancelBtn?: boolean\n\n // 是否显示确定按钮\n showConfirmBtn?: boolean\n}\n\nexport interface BasicModalEmits {\n (_e: 'positiveClick'): void\n (_e: 'negativeClick'): void\n (_e: 'update:show', _value: boolean): void\n}\n\nexport interface BasicModalContext {\n name: string\n}\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicModal from './BasicModal.vue'\n\nexport const XBasicModal: SFCWithInstall<typeof BasicModal> = withInstall(BasicModal)\nexport type BasicModalInstance = InstanceType<typeof BasicModal>\n\nexport default XBasicModal\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport type { CSSProperties } from 'vue'\nimport { computed, onMounted, ref } from 'vue'\nimport { useEventListener, useTimeoutFn } from '@vueuse/core'\nimport { EVENT_CODE } from '../../constants'\nimport BasicSvgIcon from '../basic-svg-icon'\nimport { useConfigProvider } from '../config-provider'\nimport type { BasicNotificationProps, NotificationType } from './interface'\n\ninterface BasicNotificationEmits {\n (_e: 'destroy'): void\n}\n\nconst props = withDefaults(defineProps<BasicNotificationProps>(), {\n customClass: '',\n duration: 4500,\n id: '',\n type: '',\n offset: 0,\n onClick: () => undefined,\n position: 'top-right',\n showClose: true,\n title: ''\n})\n\nconst emit = defineEmits<BasicNotificationEmits>()\n\nconst { ns, zIndex } = useConfigProvider('basic-notification')\nconst { nextZIndex, currentZIndex } = zIndex\n\nconst visible = ref(false)\nlet timer: (() => void) | undefined\n\nconst iconMap: Record<NotificationType, string> = {\n success: 'ri:checkbox-circle-line',\n error: 'ri:close-circle-line',\n info: 'ri:information-line',\n warning: 'ri:error-warning-line'\n}\n\nconst typeClass = computed(() => {\n const type = props.type\n return type && iconMap[props.type] ? ns.m(type) : ''\n})\n\nconst iconComponent = computed(() => {\n if (!props.type) return props.icon\n return iconMap[props.type] || props.icon\n})\n\nconst horizontalClass = computed(() => (props.position.endsWith('right') ? 'right' : 'left'))\n\nconst verticalProperty = computed(() => (props.position.startsWith('top') ? 'top' : 'bottom'))\n\nconst positionStyle = computed<CSSProperties>(() => {\n return {\n [verticalProperty.value]: `${props.offset}px`,\n zIndex: props.zIndex ?? currentZIndex.value\n }\n})\n\nfunction startTimer() {\n if (props.duration > 0) {\n ;({ stop: timer } = useTimeoutFn(() => {\n if (visible.value) close()\n }, props.duration))\n }\n}\n\nfunction clearTimer() {\n timer?.()\n}\n\nfunction close() {\n visible.value = false\n}\n\nfunction onKeydown({ code }: KeyboardEvent) {\n if (code === EVENT_CODE.delete || code === EVENT_CODE.backspace) {\n clearTimer() // press delete/backspace clear timer\n } else if (code === EVENT_CODE.esc) {\n // press esc to close the notification\n if (visible.value) {\n close()\n }\n } else {\n startTimer() // resume timer\n }\n}\n\n// lifecycle\nonMounted(() => {\n startTimer()\n nextZIndex()\n visible.value = true\n})\n\nuseEventListener(document, 'keydown', onKeydown)\n\ndefineExpose({\n visible,\n /** @description close notification */\n close\n})\n</script>\n\n<template>\n <transition name=\"imax-notification-fade\" @before-leave=\"onClose\" @after-leave=\"emit('destroy')\">\n <div v-show=\"visible\" :id=\"id\" :class=\"[ns.b(), customClass, horizontalClass]\" :style=\"positionStyle\" role=\"alert\" @mouseenter=\"clearTimer\" @mouseleave=\"startTimer\" @click=\"onClick\">\n <BasicSvgIcon v-if=\"iconComponent\" :class=\"[ns.e('icon'), typeClass]\" :icon=\"iconComponent\" />\n <div :class=\"ns.e('group')\">\n <!-- eslint-disable-next-line vue/no-v-text -->\n <h2 :class=\"ns.e('title')\" v-text=\"title\" />\n <div v-show=\"message\" :class=\"ns.e('content')\" :style=\"!!title ? undefined : { margin: 0 }\">\n <slot>\n <p v-if=\"!dangerouslyUseHTMLString\">{{ message }}</p>\n <!-- Caution here, message could've been compromised, never use user's input as message -->\n <!-- eslint-disable-next-line vue/no-v-html -->\n <p v-else v-html=\"message\" />\n </slot>\n </div>\n <span @click.stop=\"close\"><BasicSvgIcon v-if=\"showClose\" :class=\"ns.e('closeBtn')\" icon=\"ri:close-line\" /></span>\n </div>\n </div>\n </transition>\n</template>\n","import type { AppContext, VNode } from 'vue'\n\nexport const notificationTypes = ['success', 'info', 'warning', 'error'] as const\n\nexport type NotificationType = (typeof notificationTypes)[number]\n\nexport interface BasicNotificationProps {\n customClass?: string\n dangerouslyUseHTMLString?: boolean\n duration?: number\n icon?: string\n id?: string\n message?: string | VNode | (() => VNode)\n offset?: number\n onClick?: () => void\n onClose?: () => void\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'\n showClose?: boolean\n title?: string\n type?: NotificationType | ''\n zIndex?: number\n}\n\nexport type NotificationOptions = Omit<BasicNotificationProps, 'id' | 'onClose'> & {\n /**\n * @description set the root element for the notification, default to `document.body`\n */\n appendTo?: HTMLElement | string\n /**\n * @description callback function when closed\n */\n onClose?: (vm: VNode) => void\n}\nexport type NotificationOptionsTyped = Omit<NotificationOptions, 'type'>\n\nexport interface NotificationHandle {\n close: () => void\n}\n\nexport type NotificationParams = Partial<NotificationOptions> | string | VNode\nexport type NotificationParamsTyped = Partial<NotificationOptionsTyped> | string | VNode\n\nexport interface NotifyFn {\n (options?: NotificationParams, appContext?: null | AppContext): NotificationHandle\n closeAll: () => void\n _context: AppContext | null\n}\n\nexport type NotifyTypedFn = (options?: NotificationParamsTyped, appContext?: null | AppContext) => NotificationHandle\n\nexport interface Notify extends NotifyFn {\n success: NotifyTypedFn\n warning: NotifyTypedFn\n error: NotifyTypedFn\n info: NotifyTypedFn\n}\n\nexport interface NotificationQueueItem {\n vm: VNode\n}\n\nexport type NotificationQueue = NotificationQueueItem[]\n\nexport interface BasicNotificationContext {\n name: string\n}\n","/* eslint-disable prettier/prettier */\n \nimport type { Ref, VNode } from 'vue'\nimport { createVNode, isVNode, render } from 'vue'\nimport { isClient, isElement, isFunction, isString, isUndefined } from '@maxax/utils'\nimport NotificationConstructor from './BasicNotification.vue'\nimport type { BasicNotificationProps, NotificationOptions, NotificationQueue, Notify, NotifyFn } from './interface'\nimport { notificationTypes } from './interface'\n\n// This should be a queue but considering there were `non-autoclosable` notifications.\nconst notifications: Record<string, NotificationQueue> = {\n 'top-left': [],\n 'top-right': [],\n 'bottom-left': [],\n 'bottom-right': []\n}\n\n// the gap size between each notification\nconst GAP_SIZE = 16\nlet seed = 1\n\nconst notify: NotifyFn & Partial<Notify> = (options, context) => {\n if (!isClient) return { close: () => undefined }\n\n if (isString(options) || isVNode(options)) {\n options = { message: options } as NotificationOptions\n }\n\n const position = options?.position || 'top-right'\n\n let verticalOffset = options?.offset || 0\n notifications[position].forEach(({ vm }) => {\n verticalOffset += (vm.el?.offsetHeight || 0) + GAP_SIZE\n })\n verticalOffset += GAP_SIZE\n\n const id = `notification_${seed++}`\n const userOnClose = options?.onClose\n const props: Partial<BasicNotificationProps> = {\n ...options,\n offset: verticalOffset,\n id,\n onClose: () => {\n close(id, position, userOnClose)\n }\n }\n\n let appendTo: HTMLElement | null = document.body\n if (isElement(options?.appendTo)) {\n appendTo = options?.appendTo as HTMLElement\n } else if (isString(options?.appendTo)) {\n appendTo = document.querySelector(options?.appendTo) as HTMLElement\n }\n\n // should fallback to default value with a warning\n if (!isElement(appendTo)) {\n console.warn('the appendTo option is not an HTMLElement. Falling back to document.body.')\n appendTo = document.body\n }\n\n const container = document.createElement('div')\n\n const vm = createVNode(NotificationConstructor, props, isFunction(props.message) ? props.message : isVNode(props.message) ? () => props.message : null)\n vm.appContext = isUndefined(context) ? notify._context : context\n\n // clean notification element preventing mem leak\n vm.props!.onDestroy = () => {\n render(null, container)\n }\n\n // instances will remove this item when close function gets called. So we do not need to worry about it.\n render(vm, container)\n notifications[position].push({ vm })\n appendTo.appendChild(container.firstElementChild!)\n\n return {\n // instead of calling the onClose function directly, setting this value so that we can have the full lifecycle\n // for out component, so that all closing steps will not be skipped.\n close: () => {\n ; (vm.component!.exposed as { visible: Ref<boolean> }).visible.value = false\n }\n }\n}\nnotificationTypes.forEach(type => {\n notify[type] = (options = {}, appContext) => {\n if (isString(options) || isVNode(options)) {\n options = {\n message: options\n } as NotificationOptions\n }\n return notify({ ...options, type }, appContext)\n }\n})\n\n/**\n * This function gets called when user click `x` button or press `esc` or the time reached its limitation.\n * Emitted by transition@before-leave event so that we can fetch the current notification.offsetHeight, if this was called\n * by @after-leave the DOM element will be removed from the page thus we can no longer fetch the offsetHeight.\n * @param {string} id notification id to be closed\n * @param {Position} position the positioning strategy\n * @param {Function} userOnClose the callback called when close passed by user\n */\nexport function close(id: string, position: NotificationOptions['position'], userOnClose?: (vm: VNode) => void): void {\n // maybe we can store the index when inserting the vm to notification list.\n const orientedNotifications = notifications[position || 'top-right']\n const idx = orientedNotifications.findIndex(({ vm }) => vm.component?.props.id === id)\n if (idx === -1) return\n const { vm } = orientedNotifications[idx]\n if (!vm) return\n // calling user's on close function before notification gets removed from DOM.\n userOnClose?.(vm)\n\n // note that this is called @before-leave, that's why we were able to fetch this property.\n const removedHeight = vm.el!.offsetHeight\n const verticalPos = position?.split('-')[0] || 'top'\n orientedNotifications.splice(idx, 1)\n const len = orientedNotifications.length\n if (len < 1) return\n // starting from the removing item.\n for (let i = idx; i < len; i++) {\n // new position equals the current offsetTop minus removed height plus 16px(the gap size between each item)\n const { el, component } = orientedNotifications[i].vm\n const pos = Number.parseInt(el!.style[verticalPos], 10) - removedHeight - GAP_SIZE\n component!.props.offset = pos\n }\n}\n\nexport function closeAll(): void {\n // loop through all directions, close them at once.\n for (const orientedNotifications of Object.values(notifications)) {\n orientedNotifications.forEach(({ vm }) => {\n // same as the previous close method, we'd like to make sure lifecycle gets handle properly.\n ; (vm.component!.exposed as { visible: Ref<boolean> }).visible.value = false\n })\n }\n}\n\nnotify.closeAll = closeAll\nnotify._context = null\n\nexport default notify as Notify\n","import type { SFCWithInstall } from '@maxax/utils'\nimport BasicNotification from './notify'\n\nconst $Notification = BasicNotification as SFCWithInstall<typeof BasicNotification>\n\nexport default $Notification\nexport const XBasicNotification = $Notification\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { computed, nextTick, onMounted, ref } from 'vue'\nimport { NScrollbar } from 'naive-ui'\nimport { useNamespace } from '../../composable'\nimport type { BasicPageProps } from './interface'\n\nconst props = withDefaults(defineProps<BasicPageProps>(), {\n scroller: true\n})\n\nconst { b, e } = useNamespace('basic-page')\n\nconst headerHeight = ref(0)\nconst footerHeight = ref(0)\nconst shouldAutoHeight = ref(false)\n\nconst headerRef = ref<HTMLDivElement>()\nconst footerRef = ref<HTMLDivElement>()\n\nconst contentStyle = computed(() => {\n if (props.autoContentHeight) {\n return {\n height: shouldAutoHeight.value ? `calc(var(--max-content-height) - ${headerHeight.value}px - ${footerHeight.value}px)` : '0'\n }\n }\n return {}\n})\n\nasync function calcContentHeight() {\n if (!props.autoContentHeight) {\n return\n }\n await nextTick()\n headerHeight.value = headerRef.value?.offsetHeight || 0\n footerHeight.value = footerRef.value?.offsetHeight || 0\n setTimeout(() => {\n shouldAutoHeight.value = true\n }, 30)\n}\n\nonMounted(() => {\n calcContentHeight()\n})\n</script>\n\n<template>\n <div :class=\"b()\">\n <div v-if=\"description || $slots.description || title || $slots.title || $slots.extra\" ref=\"headerRef\" :class=\"e('header')\">\n <slot name=\"title\">\n <div v-if=\"title\" :class=\"e('header-title')\">\n {{ title }}\n </div>\n </slot>\n\n <slot name=\"description\">\n <p v-if=\"description\" :class=\"e('header-description')\">\n {{ description }}\n </p>\n </slot>\n\n <div v-if=\"$slots.extra\" :class=\"e('header-extra')\">\n <slot name=\"extra\" />\n </div>\n </div>\n\n <div :class=\"e('content')\" :style=\"contentStyle\">\n <NScrollbar v-if=\"scroller\" :class=\"e('content-scrollbar')\">\n <slot />\n </NScrollbar>\n <div v-else :class=\"e('content-scrollbar')\">\n <slot />\n </div>\n </div>\n\n <div v-if=\"$slots.footer\" ref=\"footerRef\" :class=\"e('footer')\">\n <slot name=\"footer\" />\n </div>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicPage from './BasicPage.vue'\n\nexport const XBasicPage: SFCWithInstall<typeof BasicPage> = withInstall(BasicPage)\nexport type BasicPageInstance = InstanceType<typeof BasicPage>\n\nexport default XBasicPage\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { useNamespace } from '../../composable'\nimport type { BasicPanelProps } from './interface'\n\nconst props = withDefaults(defineProps<BasicPanelProps>(), {\n isFull: true\n})\n\nconst { b, e, is } = useNamespace('basic-panel')\n</script>\n\n<template>\n <div :class=\"[b(), { [is('full')]: props.isFull }]\">\n <div :class=\"e('header')\">\n <slot name=\"title\">\n <span v-if=\"props.title\" :class=\"e('title')\">{{ props.title }}</span>\n </slot>\n <span :class=\"e('action')\">\n <slot name=\"action\" />\n </span>\n </div>\n <div :class=\"e('body')\">\n <slot />\n </div>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicPanel from './BasicPanel.vue'\n\nexport const XBasicPanel: SFCWithInstall<typeof BasicPanel> = withInstall(BasicPanel)\nexport type BasicPanelInstance = InstanceType<typeof BasicPanel>\n\nexport default XBasicPanel\n\nexport * from './interface'\n","import type { ComputedRef, ExtractPropTypes, PropType, ShallowRef } from 'vue'\nimport type { Breakpoint } from '../../types'\n\nexport type RowAligns = 'top' | 'middle' | 'bottom' | 'stretch'\nexport type RowJustify = 'start' | 'end' | 'center' | 'space-around' | 'space-between' | 'space-evenly'\n\nexport type Responsive = 'xxxl' | 'xxl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs'\nexport type ResponsiveLike<T> = {\n [key in Responsive]?: T\n}\n\nexport type Gap = number | undefined\nexport type Gutter = number | undefined | Partial<Record<Breakpoint, number>>\n\nexport type ResponsiveAligns = ResponsiveLike<RowAligns>\nexport type ResponsiveJustify = ResponsiveLike<RowJustify>\n\nexport const basicRowProps = {\n align: String as PropType<RowAligns | ResponsiveAligns>,\n justify: String as PropType<RowJustify | ResponsiveJustify>,\n prefixCls: String,\n gutter: [Number, Array, Object] as PropType<Gutter | [Gutter, Gutter]>,\n wrap: {\n type: [Boolean, undefined] as PropType<boolean | undefined>,\n default: undefined\n }\n}\n\nexport type BasicRowProps = ExtractPropTypes<typeof basicRowProps>\n\nexport interface BasicRowContext {\n gutter: ComputedRef<[number | undefined, number | undefined] | undefined>\n wrap: ComputedRef<boolean | undefined>\n supportFlexGap: ShallowRef<boolean | undefined>\n}\n","import type { CSSProperties } from 'vue'\nimport { computed, defineComponent, onBeforeUnmount, onMounted, ref } from 'vue'\nimport { classNames } from '@maxax/utils'\nimport { responsiveArray, useFlexGapSupport, useNamespace, useResponsiveObserve } from '../../composable'\nimport type { Breakpoint, ScreenMap } from '../../types'\nimport { createBasicRowContext } from './context'\nimport type { Gap } from './interface'\nimport { basicRowProps } from './interface'\n\nexport default defineComponent({\n compatConfig: { MODE: 3 },\n name: 'XRow',\n props: basicRowProps,\n setup(props, { slots, attrs }) {\n const { b, m, is } = useNamespace('basic-row')\n const direction = computed(() => 'ltr')\n const prefixCls = computed(() => b())\n let token: number\n\n const responsiveObserve = useResponsiveObserve()\n\n const screens = ref<ScreenMap>({\n xs: true,\n sm: true,\n md: true,\n lg: true,\n xl: true,\n xxl: true,\n xxxl: true\n })\n\n const curScreens = ref<ScreenMap>({\n xs: false,\n sm: false,\n md: false,\n lg: false,\n xl: false,\n xxl: false,\n xxxl: false\n })\n\n const mergePropsByScreen = (oriProp: 'align' | 'justify') => {\n return computed(() => {\n if (typeof props[oriProp] === 'string') {\n return props[oriProp]\n }\n if (typeof props[oriProp] !== 'object') {\n return ''\n }\n\n for (let i = 0; i < responsiveArray.length; i++) {\n const breakpoint: Breakpoint = responsiveArray[i]\n // If do not match, do nothing\n\n if (!curScreens.value[breakpoint]) continue\n const curVal = props[oriProp][breakpoint]\n if (curVal !== undefined) {\n return curVal\n }\n }\n return ''\n })\n }\n\n const mergeAlign = mergePropsByScreen('align')\n const mergeJustify = mergePropsByScreen('justify')\n\n const supportFlexGap = useFlexGapSupport()\n\n onMounted(() => {\n token = responsiveObserve.value.subscribe(screen => {\n curScreens.value = screen\n const currentGutter = props.gutter || 0\n if ((!Array.isArray(currentGutter) && typeof currentGutter === 'object') || (Array.isArray(currentGutter) && (typeof currentGutter[0] === 'object' || typeof currentGutter[1] === 'object'))) {\n screens.value = screen\n }\n })\n })\n\n onBeforeUnmount(() => {\n responsiveObserve.value.unsubscribe(token)\n })\n\n const gutter = computed(() => {\n const results: [Gap, Gap] = [undefined, undefined]\n const { gutter: propsGutter = 0 } = props\n const normalizedGutter = Array.isArray(propsGutter) ? propsGutter : [propsGutter, undefined]\n normalizedGutter.forEach((g, index) => {\n if (typeof g === 'object') {\n for (let i = 0; i < responsiveArray.length; i++) {\n const breakpoint: Breakpoint = responsiveArray[i]\n if (screens.value[breakpoint] && g[breakpoint] !== undefined) {\n results[index] = g[breakpoint] as number\n break\n }\n }\n } else {\n results[index] = g\n }\n })\n return results\n })\n\n createBasicRowContext({\n gutter,\n supportFlexGap,\n wrap: computed(() => props.wrap)\n })\n\n const classes = computed(() =>\n classNames(\n prefixCls.value,\n {\n [is('no-wrap')]: props.wrap === false,\n [is('rtl')]: direction.value === 'rtl',\n [m(`${mergeJustify.value}`)]: mergeJustify.value,\n [m(`${mergeAlign.value}`)]: mergeAlign.value\n },\n attrs.class\n )\n )\n\n const rowStyle = computed(() => {\n const gt = gutter.value\n // Add gutter related style\n const style: CSSProperties = {}\n const horizontalGutter = gt[0] && gt[0] > 0 ? `${gt[0] / -2}px` : undefined\n const verticalGutter = gt[1] && gt[1] > 0 ? `${gt[1] / -2}px` : undefined\n\n if (horizontalGutter) {\n style.marginLeft = horizontalGutter\n style.marginRight = horizontalGutter\n }\n\n if (supportFlexGap.value) {\n // Set gap direct if flex gap support\n style.rowGap = `${gt[1]}px`\n } else if (verticalGutter) {\n style.marginTop = verticalGutter\n style.marginBottom = verticalGutter\n }\n return style\n })\n\n return () => (\n <div {...attrs} class={classes.value} style={{ ...rowStyle.value, ...(attrs.style as CSSProperties) }}>\n {slots.default?.()}\n </div>\n )\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicRow from './BasicRow'\n\nexport const XBasicRow: SFCWithInstall<typeof BasicRow> = withInstall(BasicRow)\nexport type BasicRowInstance = InstanceType<typeof BasicRow>\n\nexport default XBasicRow\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { useNamespace } from '../../composable'\nimport type { BasicSubPanelProps } from './interface'\n\ndefineProps<BasicSubPanelProps>()\n\nconst { b, e } = useNamespace('basic-sub-panel')\n</script>\n\n<template>\n <div :class=\"b()\">\n <div :class=\"e('header')\">\n <slot name=\"title\">\n <span v-if=\"title\" :class=\"e('title')\">{{ title }}</span>\n </slot>\n <span :class=\"e('action')\">\n <slot name=\"action\" />\n </span>\n </div>\n <div :class=\"e('body')\">\n <slot name=\"body\" />\n </div>\n </div>\n</template>\n","export const basicSubPanelProps = {} as const\n\nexport interface BasicSubPanelProps {\n title?: string\n}\n\nexport interface BasicSubPanelContext {\n name: string\n}\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicSubPanel from './BasicSubPanel.vue'\n\nexport const XBasicSubPanel: SFCWithInstall<typeof BasicSubPanel> = withInstall(BasicSubPanel)\nexport type BasicSubPanelInstance = InstanceType<typeof BasicSubPanel>\n\nexport default XBasicSubPanel\n\nexport * from './interface'\n","import { merge } from 'lodash-es'\nimport type { VxeGlobalConfig } from 'vxe-pc-ui'\nimport { ROW_KEY } from './constants'\nimport type { BasicTableProps, VxeTableFormatter } from './interface'\nimport { globalSetting } from './setting'\nimport { VxeUI } from './vxe-table'\n\nexport function parseRowKey(rowKey: BasicTableProps['rKey'], record: Record<string, any>, autoCreateKey?: boolean): number | string {\n if (autoCreateKey) {\n return ROW_KEY\n }\n if (typeof rowKey === 'string') {\n return rowKey\n } else if (rowKey) {\n return rowKey(record)\n }\n return ROW_KEY\n}\n\nexport function parseRowKeyValue(rowKey: BasicTableProps['rKey'], record: Record<string, any>, autoCreateKey?: boolean): number | string {\n return record[parseRowKey(rowKey, record, autoCreateKey)]\n}\n\nexport function setVxeTableTheme(name?: string) {\n const theme = !name || name === 'default' ? 'light' : name\n if (typeof document !== 'undefined') {\n const documentElement = document.documentElement\n if (documentElement) {\n documentElement.setAttribute('data-vxe-ui-theme', theme)\n }\n }\n}\n\nexport function setVxeUIConfig(config: VxeGlobalConfig = {}) {\n const globalConfig = merge({}, globalSetting, config)\n VxeUI.setConfig(globalConfig)\n}\n\nexport function setVxeUIFormat(format: VxeTableFormatter) {\n VxeUI.formats.mixin(format)\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, ref, toRaw, unref, watch } from 'vue'\nimport { cloneDeep, isArray, isBoolean, isEqual, isFunction, isString } from 'lodash-es'\nimport { PAGE_SIZE } from '../constants'\nimport type { BasicColumn, BasicPagerProps, BasicTableProps, GetColumnsParams } from '../interface'\n\nfunction handleFieldColumn(columns: BasicColumn[]) {\n columns.forEach(column => {\n column.field ||= column.type || ''\n })\n}\n\nfunction handleIndexColumn(propsRef: ComputedRef<BasicTableProps>, getPaginationRef: Ref<boolean | BasicPagerProps>, columns: BasicColumn[]) {\n const { showIndexColumn, treeConfig } = unref(propsRef)\n\n let pushIndexColumns = false\n if (unref(treeConfig)) {\n return\n }\n columns.forEach(() => {\n const indIndex = columns.findIndex(column => column.type === 'seq')\n if (showIndexColumn) {\n pushIndexColumns = indIndex === -1\n } else if (!showIndexColumn && indIndex !== -1) {\n columns.splice(indIndex, 1)\n }\n })\n\n if (!pushIndexColumns) return\n\n const isFixedLeft = columns.some(item => item.fixed === 'left')\n\n columns.unshift({\n field: 'imaxSeq',\n type: 'seq',\n width: 68,\n align: 'center',\n ...(isFixedLeft ? { fixed: 'left' } : {}),\n slots: {\n default({ rowIndex }) {\n const getPagination = unref(getPaginationRef)\n if (isBoolean(getPagination)) {\n return `${rowIndex + 1}`\n }\n const { currentPage = 1, pageSize = PAGE_SIZE } = getPagination\n const seq = ((currentPage < 1 ? 1 : currentPage) - 1) * pageSize + rowIndex + 1\n return <span>{seq}</span>\n }\n }\n })\n}\n\nfunction filterDefaultHiddenColum(columns: BasicColumn[]) {\n // 筛选逻辑\n const filterFunc = (item: BasicColumn) => !item.defaultHidden\n // 筛选首层显示列(1级表头)\n const viewColumns = columns.filter(filterFunc)\n // 筛选>=2级表头(深度优先)\n const list = [...viewColumns]\n while (list.length) {\n const current = list[0]\n if (Array.isArray(current.children)) {\n current.children = current.children.filter(filterFunc)\n list.shift()\n list.unshift(...current.children)\n } else {\n list.shift()\n }\n }\n return viewColumns\n}\n\nexport function useColumns(propsRef: ComputedRef<BasicTableProps>, getPaginationRef: Ref<boolean | BasicPagerProps>) {\n const columnsRef = ref(unref(propsRef).columns) as Ref<BasicColumn[]>\n let cacheColumns = unref(propsRef).columns || []\n\n const getColumnsRef = computed(() => {\n const columns = cloneDeep(unref(columnsRef))\n\n handleFieldColumn(columns)\n handleIndexColumn(propsRef, getPaginationRef, columns)\n if (!columns) {\n return []\n }\n\n return columns\n })\n\n function isIfShow(column: BasicColumn): boolean {\n const ifShow = column.ifShow\n\n let $isIfShow = true\n\n if (isBoolean(ifShow)) {\n $isIfShow = ifShow\n }\n if (isFunction(ifShow)) {\n $isIfShow = ifShow(column)\n }\n return $isIfShow\n }\n\n const getViewColumns = computed(() => {\n const viewColumns = filterDefaultHiddenColum(unref(getColumnsRef))\n const columns = cloneDeep(viewColumns)\n return columns.filter(column => isIfShow(column))\n })\n\n watch(\n () => unref(propsRef).columns,\n columns => {\n columnsRef.value = columns || []\n cacheColumns = columns?.filter(item => !item.type) ?? []\n }\n )\n\n function setCacheColumnsByField(field: string | undefined, value: Partial<BasicColumn>) {\n if (!field || !value) {\n return\n }\n cacheColumns.forEach(item => {\n if (item.field === field) {\n Object.assign(item, value)\n }\n })\n }\n\n /**\n * Set columns\n * @param columnList key|column\n */\n function setColumns(columnList: Array<Partial<BasicColumn>> | Array<string | string[]>) {\n const columns = cloneDeep(columnList)\n if (!isArray(columns)) return\n\n if (columns.length <= 0) {\n columnsRef.value = []\n return\n }\n\n const firstColumn = columns[0]\n\n const cacheKeys = cacheColumns.map(item => item.field)\n\n if (!isString(firstColumn) && !isArray(firstColumn)) {\n columnsRef.value = columns as BasicColumn[]\n } else {\n const columnKeys = (columns as Array<string | string[]>).map(m => m.toString())\n const newColumns: BasicColumn[] = []\n cacheColumns.forEach(item => {\n newColumns.push({\n ...item,\n defaultHidden: !columnKeys.includes(item.field?.toString() || '')\n })\n })\n // Sort according to another array\n if (!isEqual(cacheKeys, columns)) {\n newColumns.sort((prev, next) => {\n return columnKeys.indexOf(prev.field?.toString() as string) - columnKeys.indexOf(next.field?.toString() as string)\n })\n }\n columnsRef.value = newColumns\n }\n }\n\n function getColumns(opt?: GetColumnsParams) {\n const { ignoreIndex, ignoreAction } = opt || {}\n let columns = toRaw(unref(getColumnsRef))\n if (ignoreIndex) {\n columns = columns.filter(item => item.field !== 'seq')\n }\n if (ignoreAction) {\n columns = columns.filter(item => item.field !== 'operation')\n }\n\n return columns\n }\n\n function getCacheColumns() {\n return cacheColumns\n }\n\n function setCacheColumns(columns: BasicColumn[]) {\n if (!isArray(columns)) return\n cacheColumns = columns.filter(item => !item.type)\n }\n\n return {\n getColumnsRef,\n getCacheColumns,\n setColumns,\n getColumns,\n getViewColumns,\n setCacheColumnsByField,\n setCacheColumns\n }\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, onMounted, reactive, ref, unref, watch, watchEffect } from 'vue'\nimport { useTimeoutFn } from '@vueuse/core'\nimport type { KeyValueType, Recordable, ReturnEmitType } from '@maxax/types'\nimport { guid, mergeArray } from '@maxax/utils'\nimport { cloneDeep, get, isBoolean, isFunction, merge } from 'lodash-es'\nimport { FETCH_SETTING, PAGE_SIZE, ROW_KEY } from '../constants'\nimport { parseRowKeyValue } from '../helper'\nimport type { BasicPagerProps, BasicTableProps, BasicTableRowKey, FetchParams, TableSortFilter, VxePagerEvents } from '../interface'\n\ninterface UseDataSourceActionType {\n getPaginationInfo: Ref<boolean | BasicPagerProps>\n setPagination: (info: Partial<BasicPagerProps>) => void\n setLoading: (loading: boolean) => void\n clearSelectedRowKeys: () => void\n setSelection: () => void\n tableData: Ref<Recordable[]>\n emit: ReturnEmitType\n}\n\ninterface SearchState {\n sortInfo: Recordable\n filterInfo: Record<string, string[]>\n}\n\ninterface TableDataFindRow {\n index: number\n data: any[]\n}\n\nexport function useDataSource(propsRef: ComputedRef<BasicTableProps>, { tableData, getPaginationInfo, setPagination, setSelection, setLoading, emit }: UseDataSourceActionType) {\n const searchState = reactive<SearchState>({\n sortInfo: {},\n filterInfo: {}\n })\n\n const getSortRef = computed((): TableSortFilter | null => {\n const { onSortChange } = unref(propsRef)\n\n return {\n onSortChange: params => {\n searchState.sortInfo.ascSortColumn = params.order === 'asc' ? params.field : ''\n searchState.sortInfo.descSortColumn = params.order === 'desc' ? params.field : ''\n onSortChange && onSortChange(params)\n fetch()\n }\n }\n })\n\n const dataSourceRef = ref<Recordable[]>([])\n const rawDataSourceRef = ref<Recordable>({})\n const searchInfoRef = ref<Recordable>({})\n\n const getDataSourceRef: Ref<Array<Recordable<any>>> = ref([])\n\n const getAutoCreateKey = computed(() => {\n return unref(propsRef).autoCreateKey && !unref(propsRef).rKey\n })\n\n const getRowKey = computed(() => {\n const { rKey } = unref(propsRef)\n return unref(getAutoCreateKey) ? ROW_KEY : rKey\n })\n\n const getRowConfigRef = computed(() => {\n const { rowConfig } = unref(propsRef)\n return {\n rowConfig: {\n ...rowConfig,\n keyField: unref(getRowKey)\n }\n }\n })\n\n watchEffect(() => {\n tableData.value = unref(dataSourceRef)\n })\n\n watch(\n () => unref(propsRef).data,\n () => {\n const { data, api } = unref(propsRef)\n !api && data && (dataSourceRef.value = data)\n },\n {\n immediate: true\n }\n )\n\n watch(\n () => dataSourceRef.value,\n () => {\n const dataSource = unref(dataSourceRef)\n if (!dataSource || dataSource.length === 0) {\n getDataSourceRef.value = unref(dataSourceRef)\n }\n\n if (unref(getAutoCreateKey)) {\n const firstItem = dataSource[0]\n const lastItem = dataSource[dataSource.length - 1]\n\n if (firstItem && lastItem) {\n if (!firstItem[ROW_KEY] || !lastItem[ROW_KEY]) {\n const data = cloneDeep(unref(dataSourceRef))\n data.forEach(item => {\n if (!item[ROW_KEY]) {\n item[ROW_KEY] = guid()\n }\n if (item.children && item.children.length) {\n setTableKey(item.children)\n }\n })\n dataSourceRef.value = data\n }\n }\n }\n getDataSourceRef.value = unref(dataSourceRef)\n },\n {\n deep: true,\n immediate: true\n }\n )\n\n function setTableKey(items: any[]) {\n if (!items || !Array.isArray(items)) return\n items.forEach(item => {\n if (!item[ROW_KEY]) {\n item[ROW_KEY] = guid()\n }\n if (item.children && item.children.length) {\n setTableKey(item.children)\n }\n })\n }\n\n function findTableDataRecord(keyValue: BasicTableRowKey) {\n if (!dataSourceRef.value || dataSourceRef.value.length === 0) return\n const { treeConfig = {} } = unref(propsRef)\n const { childrenField = 'children' } = treeConfig\n\n const findRow = (array: any[]): Record<string, any> | undefined => {\n let ret\n array.some(function iter(r) {\n if (parseRowKeyValue(unref(getRowKey), r) === keyValue) {\n ret = r\n return true\n }\n return r[childrenField] && r[childrenField].some(iter)\n })\n return ret\n }\n\n return findRow(dataSourceRef.value)\n }\n\n async function updateTableData(index: number, key: BasicTableRowKey, value: any) {\n const record = dataSourceRef.value[index]\n if (record) {\n dataSourceRef.value[index][key] = value\n }\n return dataSourceRef.value[index]\n }\n\n function updateTableDataRecord(keyValue: BasicTableRowKey, record: Recordable): Recordable | undefined {\n const row = findTableDataRecord(keyValue)\n\n if (row) {\n for (const field in row) {\n if (Reflect.has(record, field)) row[field] = record[field]\n }\n return row\n }\n }\n\n function deleteTableDataRecord(keyValues: BasicTableRowKey | BasicTableRowKey[]) {\n if (!dataSourceRef.value || dataSourceRef.value.length === 0) return\n const delKeyValues = !Array.isArray(keyValues) ? [keyValues] : keyValues\n\n for (const keyValue of delKeyValues) {\n $deleteRow(dataSourceRef.value, keyValue)\n $deleteRow(unref(propsRef).data, keyValue)\n }\n }\n\n function insertTableDataRecord(record: Recordable | Recordable[], index?: number): Recordable[] | undefined {\n const $index = index || dataSourceRef.value?.length\n const $record: Recordable[] = !Array.isArray(record) ? [record] : record\n unref(dataSourceRef).splice($index, 0, ...$record)\n return unref(dataSourceRef)\n }\n\n function setTableData<T = Recordable>(values: T[]) {\n dataSourceRef.value = values as Recordable[]\n }\n\n function getDataSource<T = Recordable>() {\n return getDataSourceRef.value as T[]\n }\n\n function getRawDataSource<T = Recordable>() {\n return rawDataSourceRef.value as T\n }\n\n async function reload(opt?: FetchParams) {\n return await fetch(opt)\n }\n\n function getSearchInfo<T = Recordable>() {\n return searchInfoRef.value as T\n }\n\n // 获取RowKey\n function getTableRowKey() {\n return unref(getRowKey)\n }\n\n // 批量合并\n function mergeTableDataRecord(records: Recordable[], key: KeyValueType = ROW_KEY) {\n const itemList = cloneDeep(getDataSource() || [])\n const items = mergeArray(itemList, records, key)\n setTableData(items)\n }\n\n async function fetch(opt?: FetchParams) {\n const { api, dynamicApi, searchInfo, defSort, fetchSetting, beforeFetch, afterFetch, useSearchForm, pagination, handleSearchInfoFn } = unref(propsRef)\n\n if (!api && !dynamicApi) return\n\n try {\n setLoading(true)\n const { pageField, sizeField, listField, totalField } = {\n ...FETCH_SETTING,\n ...fetchSetting\n }\n let pageParams: Recordable = {}\n\n const { currentPage = 1, pageSize = PAGE_SIZE } = unref(getPaginationInfo) as BasicPagerProps\n\n if (isBoolean(pagination) && !pagination) {\n pageParams = {}\n } else {\n pageParams[pageField] = (opt && opt.page) || currentPage\n pageParams[sizeField] = pageSize\n }\n\n const { sortInfo = {}, filterInfo } = searchState\n\n const relationForm = unref(propsRef).relationForm?.()\n\n const formValue = relationForm ? relationForm.getFieldsValue() : {}\n\n const searchInfoParams = useSearchForm && handleSearchInfoFn ? handleSearchInfoFn(formValue) : formValue\n\n const isPagination = isBoolean(pagination) && pagination\n\n const pageInfo = {\n ...pageParams,\n pageIndex: pageParams.page,\n paging: Boolean(pagination),\n pageInfo: {\n ...pageParams,\n pageIndex: pageParams.page,\n paging: Boolean(pagination)\n }\n }\n\n let params: Recordable = merge(isPagination ? pageInfo : {}, searchInfoParams, { param: searchInfoParams }, searchInfo, opt?.searchInfo ?? {}, defSort, sortInfo, opt?.sortInfo ?? {}, filterInfo, opt?.filterInfo ?? {})\n\n if (beforeFetch && isFunction(beforeFetch)) {\n params = (await beforeFetch(params)) || params\n }\n\n searchInfoRef.value = params\n\n const apiFn = api || dynamicApi?.(params)\n\n const res = await apiFn?.(params)\n rawDataSourceRef.value = res.data\n\n const isArrayResult = Array.isArray(res.data)\n\n let resultItems: Recordable[] = isArrayResult ? res.data : get(res.data, listField)\n const resultTotal: number = isArrayResult ? res.data.length : get(res.data, totalField)\n\n if (afterFetch && isFunction(afterFetch)) {\n resultItems = (await afterFetch(resultItems)) || resultItems\n }\n\n dataSourceRef.value = resultItems\n setPagination({\n total: resultTotal || 0\n })\n setSelection()\n\n emit('fetch-success', {\n items: unref(resultItems),\n total: resultTotal\n })\n\n return resultItems\n } catch (error) {\n emit('fetch-error', error)\n dataSourceRef.value = []\n setPagination({\n total: 0\n })\n setSelection()\n } finally {\n setLoading(false)\n }\n }\n\n function $findRow(data: any[] | undefined, keyValue: BasicTableRowKey): TableDataFindRow | null {\n if (data === null || data === undefined) {\n return null\n }\n for (let i = 0; i < data.length; i++) {\n const row = data[i]\n if (parseRowKeyValue(unref(getRowKey), row) === keyValue) {\n return { index: i, data }\n }\n if (row.children?.length > 0) {\n const result = $findRow(row.children, keyValue)\n if (result !== null) {\n return result\n }\n }\n }\n return null\n }\n\n function $deleteRow(data: any[] | undefined, keyValue: BasicTableRowKey) {\n const row = $findRow(data, keyValue)\n if (row === null || row.index === -1) {\n return\n }\n row.data.splice(row.index, 1)\n }\n\n const onPageChange: VxePagerEvents.PageChange = params => {\n setPagination({ currentPage: params.currentPage, pageSize: params.pageSize })\n setSelection()\n emit('page-change', params)\n fetch()\n }\n\n onMounted(() => {\n useTimeoutFn(() => {\n unref(propsRef).immediate && fetch()\n }, 16)\n })\n\n return {\n getRowKey,\n getRowConfigRef,\n searchInfoRef,\n getAutoCreateKey,\n getDataSourceRef,\n getSortRef,\n fetch,\n reload,\n onPageChange,\n getDataSource,\n getRawDataSource,\n getSearchInfo,\n setTableData,\n updateTableData,\n updateTableDataRecord,\n deleteTableDataRecord,\n insertTableDataRecord,\n findTableDataRecord,\n getTableRowKey,\n mergeTableDataRecord\n }\n}\n","import type { ComputedRef } from 'vue'\nimport { computed, ref, unref, watch } from 'vue'\nimport type { BasicTableProps } from '../interface'\n\nexport function useLoading(props: ComputedRef<BasicTableProps>) {\n const loadingRef = ref(unref(props).loading)\n\n watch(\n () => unref(props).loading,\n loading => {\n loadingRef.value = loading\n }\n )\n\n const getLoading = computed(() => unref(loadingRef))\n\n function setLoading(loading: boolean) {\n loadingRef.value = loading\n }\n\n return { getLoading, setLoading }\n}\n","import type { ComputedRef } from 'vue'\nimport { ref, unref, watch } from 'vue'\nimport { isBoolean } from 'lodash-es'\nimport { DEFAULT_SIZE, PAGE_SIZE, PAGE_SIZE_OPTIONS } from '../constants'\nimport type { BasicPagerProps, BasicTableEmitType, BasicTableProps } from '../interface'\n\nexport function usePagination(propsRef: ComputedRef<BasicTableProps>, _emit: BasicTableEmitType) {\n const getPaginationInfo = ref<BasicPagerProps>({\n size: DEFAULT_SIZE,\n border: true,\n currentPage: 1,\n pageSize: PAGE_SIZE,\n pageSizes: PAGE_SIZE_OPTIONS,\n layouts: ['PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'Sizes', 'Total'],\n total: 0\n })\n const show = ref(true)\n\n watch(\n () => unref(propsRef).pagination,\n pagination => {\n if (!isBoolean(pagination) && pagination) {\n getPaginationInfo.value = {\n ...unref(getPaginationInfo),\n ...(pagination ?? {})\n }\n }\n },\n {\n immediate: true\n }\n )\n\n function setPagination(info: Partial<BasicPagerProps>) {\n const paginationInfo = unref(getPaginationInfo)\n getPaginationInfo.value = {\n ...(!isBoolean(paginationInfo) ? paginationInfo : {}),\n ...info\n }\n }\n\n function getPagination() {\n return unref(getPaginationInfo)\n }\n\n function getShowPagination() {\n return unref(show)\n }\n\n async function setShowPagination(flag: boolean) {\n show.value = flag\n }\n\n return { getPagination, getPaginationInfo, setShowPagination, getShowPagination, setPagination }\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, nextTick, ref, toRaw, unref, watch } from 'vue'\nimport type { Recordable } from '@maxax/types'\nimport { cloneDeep, findNodeAll } from '@maxax/utils'\nimport { concat } from 'lodash-es'\nimport { ROW_KEY } from '../constants'\nimport { parseRowKey, parseRowKeyValue } from '../helper'\nimport type { BasicTableEmitType, BasicTableProps, GetSelectionReturn, Key, TableRowSelection, VxeGridInstance } from '../interface'\n\nexport function useRowSelection(propsRef: ComputedRef<BasicTableProps>, tableData: Ref<Recordable[]>, emit: BasicTableEmitType, tableElRef: Ref<VxeGridInstance>) {\n const selectedRowKeysRef = ref<Key[]>([])\n const selectedRowRef = ref<Recordable[]>([])\n\n const getRowSelectionRef = computed((): TableRowSelection | null => {\n const { onCheckboxAll, onCheckboxChange } = unref(propsRef)\n\n return {\n onCheckboxAll: params => {\n onSelectionChange()\n onCheckboxAll && onCheckboxAll(params)\n },\n onCheckboxChange: params => {\n onSelectionChange()\n onCheckboxChange && onCheckboxChange(params)\n }\n }\n })\n\n watch(\n () => unref(propsRef).checkboxConfig?.checkRowKeys,\n (v?: Key[]) => {\n nextTick(() => {\n $setSelectedRowKeys(v)\n })\n },\n { immediate: true }\n )\n\n watch(\n () => unref(selectedRowKeysRef),\n () => {\n nextTick(() => {\n emit('selection-change', { keys: getSelectRowKeys(), rows: getSelectRows() })\n })\n },\n { deep: true }\n )\n\n const getAutoCreateKey = computed(() => {\n return unref(propsRef).autoCreateKey && !unref(propsRef).rKey\n })\n\n const getRowKey = computed(() => {\n const { rKey } = unref(propsRef)\n return unref(getAutoCreateKey) ? ROW_KEY : rKey\n })\n\n function getCurrentPageKeys() {\n const { treeConfig } = unref(propsRef)\n const { childrenField = 'children' } = treeConfig || {}\n const keys: Key[] = []\n const extractKeys = (record: Recordable) => {\n keys.push(parseRowKeyValue(unref(getRowKey), record))\n if (record[childrenField]?.length) {\n record[childrenField].forEach(extractKeys)\n }\n }\n tableData.value.forEach(extractKeys)\n return keys\n }\n\n function getSelection(): GetSelectionReturn {\n const tableEl = unref(tableElRef)\n if (!tableEl) return { selectedRowKeys: [], selectedRows: [] }\n const records = tableEl.getCheckboxRecords() || []\n const reserves = tableEl.getCheckboxReserveRecords() || []\n const selection = concat(records, reserves)\n return {\n selectedRowKeys: selection.map(item => parseRowKeyValue(unref(getRowKey), item)),\n selectedRows: selection\n }\n }\n\n async function clearSelection() {\n const tableEl = unref(tableElRef)\n if (!tableEl) return\n await tableEl.clearCheckboxRow()\n await tableEl.clearCheckboxReserve()\n }\n\n async function setSelection() {\n const tableEl = unref(tableElRef)\n if (!tableEl) return\n await clearSelection()\n await tableEl.setCheckboxRow(selectedRowRef.value, true)\n }\n\n function onSelectionChange() {\n const { selectedRowKeys, selectedRows } = getSelection()\n // 取出【当前页】所有 keyValues\n const currentPageKeys = getCurrentPageKeys()\n // 从【所有分页】已选的 keyValues,且属于【当前页】的部分\n const curSelectedRowKeysRef = selectedRowKeysRef.value.filter(k => currentPageKeys.includes(k))\n for (const selectedKey of curSelectedRowKeysRef) {\n // 判断是否已经不存在于【当前页】\n if (selectedRowKeys.findIndex(k => k === selectedKey) < 0) {\n // 不存在 = 取消勾选\n const removeIndex = selectedRowKeysRef.value.findIndex(k => k === selectedKey)\n if (removeIndex > -1) {\n // 取消勾选\n selectedRowKeysRef.value.splice(removeIndex, 1)\n selectedRowRef.value.splice(removeIndex, 1)\n }\n }\n }\n // 存在于【当前页】,但不存在于【所有分页】,则认为是新增的\n for (const selectedKey of selectedRowKeys) {\n const existIndex = selectedRowKeysRef.value.findIndex(k => k === selectedKey)\n if (existIndex < 0) {\n // 新增勾选\n selectedRowKeysRef.value.push(selectedKey)\n const record = selectedRows.find(o => parseRowKeyValue(unref(getRowKey), o) === selectedKey)\n if (record) {\n selectedRowRef.value.push(record)\n }\n }\n }\n\n // 赋值调整过的值\n $setSelectedRowKeys(selectedRowKeysRef.value)\n }\n\n function $setSelectedRowKeys(keyValues?: Key[]) {\n const { treeConfig } = unref(propsRef)\n const { childrenField = 'children' } = treeConfig || {}\n selectedRowKeysRef.value = keyValues || []\n const rows = toRaw(unref(tableData)).concat(toRaw(unref(selectedRowRef)))\n const allSelectedRows = findNodeAll(rows, item => keyValues?.includes(parseRowKeyValue(unref(getRowKey), item)), {\n children: childrenField\n })\n\n const trueSelectedRows: any[] = []\n keyValues?.forEach((keyValue: Key) => {\n const found = allSelectedRows.find(item => parseRowKeyValue(unref(getRowKey), item) === keyValue)\n if (found) {\n trueSelectedRows.push(found)\n } else {\n // 跨页的时候,非本页数据无法得到,暂如此处理\n // TableData or selectedRowRef 总有数据\n rows[0] && trueSelectedRows.push({ [parseRowKey(unref(getRowKey), rows[0])]: keyValue })\n }\n })\n selectedRowRef.value = trueSelectedRows\n }\n\n function setSelectedRowKeys(keyValues?: Key[]) {\n $setSelectedRowKeys(keyValues)\n setSelection()\n }\n\n function $setSelectedRows(rows: Recordable[]) {\n selectedRowRef.value = rows\n selectedRowKeysRef.value = selectedRowRef.value.map(o => parseRowKeyValue(unref(getRowKey), o))\n }\n\n function setSelectedRows(rows: Recordable[]) {\n $setSelectedRows(rows)\n setSelection()\n }\n\n function clearSelectedRowKeys() {\n selectedRowRef.value = []\n selectedRowKeysRef.value = []\n clearSelection()\n }\n\n function deleteSelectRowByKey(key: Key) {\n const selectedRowKeys = unref(selectedRowKeysRef)\n const index = selectedRowKeys.findIndex(item => item === key)\n if (index !== -1) {\n unref(selectedRowKeysRef).splice(index, 1)\n unref(selectedRowRef).splice(index, 1)\n }\n setSelection()\n }\n\n function getSelectRowKeys() {\n return cloneDeep(unref(selectedRowKeysRef))\n }\n\n function getSelectRows<T = Recordable>() {\n return cloneDeep(unref(selectedRowRef)) as T[]\n }\n\n function getRowSelection() {\n return unref(getRowSelectionRef)!\n }\n\n return {\n getSelection,\n setSelection,\n clearSelection,\n getRowSelection,\n selectedRowRef,\n selectedRowKeysRef,\n getRowSelectionRef,\n getSelectRows,\n getSelectRowKeys,\n setSelectedRowKeys,\n clearSelectedRowKeys,\n deleteSelectRowByKey,\n setSelectedRows\n }\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { Nullable, Recordable } from '@maxax/types'\nimport type { BasicTableProps, TableActionType, VxeGridInstance } from '../interface'\n\nconst key = Symbol('basic-table')\n\ntype Instance = TableActionType & {\n wrapRef: Ref<Nullable<VxeGridInstance>>\n getBindValues: ComputedRef<Recordable>\n}\n\ntype RetInstance = Omit<Instance, 'getBindValues'> & {\n getBindValues: ComputedRef<BasicTableProps>\n}\n\nexport function createTableContext(instance: Instance) {\n provide(key, instance)\n}\n\nexport function useTableContext(): RetInstance {\n return inject(key) as RetInstance\n}\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, unref } from 'vue'\nimport type { Recordable } from '@maxax/types'\nimport { calculate } from '@maxax/utils'\nimport { useLocale } from '../../../composable'\nimport type { BasicTableProps, VxeTablePropTypes } from '../interface'\n\nexport function useTableFooter(propsRef: ComputedRef<BasicTableProps>, getDataSourceRef: Ref<Recordable>) {\n const { t } = useLocale()\n\n const getIsEmptyData = computed(() => {\n return (unref(getDataSourceRef) || []).length === 0\n })\n\n const getShowFooter = computed(() => {\n const { showFooter = false, sumFields = [], avgFields = [] } = unref(propsRef)\n return !getIsEmptyData.value && (Boolean(sumFields.length) || Boolean(avgFields.length) || showFooter)\n })\n\n const getFooterMethod = computed(() => {\n const { footerMethod, sumFields = [], avgFields = [] } = unref(propsRef)\n const defaultFooterMethod: VxeTablePropTypes.FooterMethod = params => {\n const { columns, data } = params\n const rows = []\n\n if (sumFields.length) {\n const sumPage = columns.map((column, columnIndex) => {\n if (columnIndex === 0) {\n return t('max.table.sum')\n }\n if (sumFields.includes(column.field)) {\n return calculate.sumBy(data, column.field)\n }\n return null\n })\n rows.push(sumPage)\n }\n\n if (avgFields.length) {\n const avgPage = columns.map((column, columnIndex) => {\n if (columnIndex === 0) {\n return t('max.table.avg')\n }\n if (avgFields.includes(column.field)) {\n return calculate.sumBy(data, column.field) / data.length\n }\n return null\n })\n rows.push(avgPage)\n }\n\n return rows\n }\n\n return footerMethod || defaultFooterMethod\n })\n\n return {\n showFooter: getShowFooter,\n footerMethod: getFooterMethod\n }\n}\n","import type { ComputedRef } from 'vue'\nimport { unref } from 'vue'\nimport type { Recordable } from '@maxax/types'\nimport { isFunction } from '@maxax/utils'\nimport type { BasicPagerProps, BasicTableProps, FetchParams } from '../interface'\n\ninterface UseTableFormActionType {\n fetch: (opt?: FetchParams) => Promise<Recordable[] | undefined>\n setPagination: (info: Partial<BasicPagerProps>) => void\n getLoading: ComputedRef<boolean | undefined>\n setSelection: () => void\n}\n\nexport function useTableForm(propsRef: ComputedRef<BasicTableProps>, { fetch, getLoading, setPagination, setSelection }: UseTableFormActionType) {\n function handleSearchInfoChange(info: Recordable = {}) {\n let searchInfo = info\n const { handleSearchInfoFn } = unref(propsRef)\n if (handleSearchInfoFn && isFunction(handleSearchInfoFn)) {\n searchInfo = handleSearchInfoFn(info) || info\n }\n setPagination({ currentPage: 1 })\n setSelection()\n fetch({ searchInfo, page: 1 })\n }\n\n function handleSearchInfoReload(info: Recordable = {}) {\n let searchInfo = info\n const { handleSearchInfoFn } = unref(propsRef)\n if (handleSearchInfoFn && isFunction(handleSearchInfoFn)) {\n searchInfo = handleSearchInfoFn(info) || info\n }\n setSelection()\n fetch({ searchInfo })\n }\n\n return {\n getLoading,\n handleSearchInfoChange,\n handleSearchInfoReload\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, toRaw, unref, useAttrs, useSlots } from 'vue'\nimport { NButton } from 'naive-ui'\nimport { VxePager } from 'vxe-pc-ui'\nimport { VxeGrid } from 'vxe-table'\nimport { useLocale, useNamespace, useTableConfig } from '../../composable'\nimport { setVxeUIConfig } from './helper'\nimport { createTableContext, useColumns, useDataSource, useLoading, usePagination, useRowSelection, useTableFooter, useTableForm } from './hooks'\nimport type { BasicTableEmitType, BasicTableProps, TableActionType, VxeGridInstance } from './interface'\nimport setting from './setting'\n\nconst props = withDefaults(defineProps<BasicTableProps>(), setting)\n\nconst emit = defineEmits<BasicTableEmitType>()\n\nconst tableConfig = useTableConfig()\n\nsetVxeUIConfig(tableConfig || {})\n\nconst attrs = useAttrs()\nconst { b, e, is } = useNamespace('basic-table')\n\nconst { t } = useLocale()\n\nconst slots = useSlots() as any\n\nconst innerPropsRef = ref<Partial<BasicTableProps>>()\n\nconst getProps = computed(() => {\n return { ...props, ...unref(innerPropsRef) } as BasicTableProps\n})\n\nconst wrapRef = ref<VxeGridInstance | null>(null)\nconst tableElRef = ref()\n\nconst tableData = ref([])\n\nconst getWrapperClass = computed(() => {\n return [b(), { [is('card')]: getProps.value.card }, { [is('toolbar-fixed')]: getProps.value.toolbarFixed }]\n})\n\nconst { getLoading, setLoading } = useLoading(getProps)\nconst { setSelection, getRowSelection, getRowSelectionRef, getSelectRows, setSelectedRows, clearSelectedRowKeys, getSelectRowKeys, deleteSelectRowByKey, setSelectedRowKeys } = useRowSelection(getProps, tableData, emit, tableElRef)\nconst { getPaginationInfo, getPagination, setShowPagination, getShowPagination, setPagination } = usePagination(getProps, emit)\nconst { getViewColumns, getColumns, setCacheColumnsByField, setCacheColumns, setColumns, getCacheColumns } = useColumns(getProps, getPaginationInfo)\nconst { fetch, onPageChange, getDataSourceRef, getSortRef, getRowConfigRef, getDataSource, getRawDataSource, getSearchInfo, setTableData, updateTableDataRecord, deleteTableDataRecord, insertTableDataRecord, findTableDataRecord, reload, updateTableData, getTableRowKey, mergeTableDataRecord } =\n useDataSource(getProps, {\n tableData,\n getPaginationInfo,\n setLoading,\n setPagination,\n clearSelectedRowKeys,\n setSelection,\n emit\n })\nconst { footerMethod, showFooter } = useTableFooter(getProps, getDataSourceRef)\nconst { handleSearchInfoChange, handleSearchInfoReload } = useTableForm(getProps, { fetch, getLoading, setPagination, setSelection })\n\nfunction setProps(_props: Partial<BasicTableProps>) {\n innerPropsRef.value = { ...unref(innerPropsRef), ..._props } as BasicTableProps\n}\n\nfunction getTableProps() {\n return getProps.value\n}\n\nconst getBindValues = computed(() => {\n const propsData = {\n ...attrs,\n ...unref(getProps),\n loading: unref(getLoading),\n data: unref(getDataSourceRef),\n columns: toRaw(unref(getViewColumns)),\n footerMethod: unref(footerMethod),\n showFooter: unref(showFooter),\n ...unref(getRowSelectionRef),\n ...unref(getSortRef),\n ...unref(getRowConfigRef),\n toolbarConfig: {\n zoom: true,\n custom: true,\n ...unref(getProps).toolbarConfig\n }\n }\n return propsData as BasicTableProps\n})\n\nconst tableAction: TableActionType = {\n emit,\n reload,\n setLoading,\n setProps,\n getTableProps,\n\n setPagination,\n setShowPagination,\n getShowPagination,\n getPaginationRef: getPagination,\n\n setTableData,\n updateTableData,\n updateTableDataRecord,\n deleteTableDataRecord,\n insertTableDataRecord,\n findTableDataRecord,\n getTableRowKey,\n mergeTableDataRecord,\n getDataSource,\n getRawDataSource,\n getSearchInfo,\n\n setColumns,\n getColumns,\n getCacheColumns,\n setCacheColumns,\n setCacheColumnsByField,\n\n getSelectRows,\n setSelectedRows,\n clearSelectedRowKeys,\n getSelectRowKeys,\n deleteSelectRowByKey,\n setSelectedRowKeys,\n getRowSelection,\n\n handleSearchInfoChange,\n handleSearchInfoReload,\n setSelection,\n\n instance: () => tableElRef.value\n}\n\ncreateTableContext({ ...tableAction, wrapRef, getBindValues })\n\ndefineExpose(tableAction)\n</script>\n\n<template>\n <div ref=\"wrapRef\" :class=\"getWrapperClass\">\n <div :class=\"e('wrapper-inner')\">\n <VxeGrid v-bind=\"getBindValues\" ref=\"tableElRef\">\n <template v-for=\"item in Object.keys(slots)\" #[item]=\"data\" :key=\"item\">\n <slot :name=\"item\" v-bind=\"data || {}\" />\n </template>\n <template #empty>\n <div :class=\"e('empty')\">\n <svg t=\"1715484957771\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"1727\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"32\" height=\"32\">\n <path d=\"M256 494.933333h477.866667l119.466666 290.133334v238.933333H136.533333V785.066667l119.466667-290.133334z\" fill=\"#DCECFD\" p-id=\"1728\" />\n <path d=\"M256 494.933333h477.866667v221.866667H256z\" fill=\"#BAD7FB\" p-id=\"1729\" />\n <path d=\"M136.533333 785.066667h716.8v238.933333H136.533333V785.066667z m358.4 85.333333c-47.786667 0-85.333333-37.546667-85.333333-85.333333h170.666667c0 47.786667-37.546667 85.333333-85.333334 85.333333z\" fill=\"#EEF5FE\" p-id=\"1730\" />\n <path\n d=\"M1006.933333 494.933333h-17.066666v17.066667c0 10.24-6.826667 17.066667-17.066667 17.066667s-17.066667-6.826667-17.066667-17.066667v-17.066667h-17.066666c-10.24 0-17.066667-6.826667-17.066667-17.066666s6.826667-17.066667 17.066667-17.066667h17.066666v-17.066667c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066667 17.066666v17.066667h17.066666c10.24 0 17.066667 6.826667 17.066667 17.066667s-6.826667 17.066667-17.066667 17.066666zM802.133333 238.933333l153.6-170.666666-51.2 221.866666-102.4-51.2z m-136.533333-51.2l290.133333-119.466666-187.733333 170.666666-102.4-51.2z m5.12 218.453334c3.413333 3.413333 3.413333 6.826667 0 10.24-6.826667 6.826667-13.653333 13.653333-22.186667 20.48-3.413333 1.706667-6.826667 1.706667-10.24 0-3.413333-3.413333-1.706667-8.533333 0-10.24l20.48-20.48c5.12-3.413333 8.533333-3.413333 11.946667 0z m-68.266667 64.853333c-1.706667 1.706667-5.12 1.706667-6.826666 0-1.706667-1.706667-3.413333-3.413333-3.413334-6.826667s1.706667-5.12 3.413334-6.826666c8.533333-5.12 15.36-10.24 23.893333-15.36 3.413333-1.706667 6.826667-1.706667 10.24 1.706666 1.706667 3.413333 1.706667 8.533333-1.706667 10.24-8.533333 6.826667-17.066667 13.653333-25.6 17.066667zM571.733333 443.733333c-3.413333 0-6.826667-3.413333-8.533333-6.826666 0-8.533333-3.413333-17.066667-8.533333-23.893334-1.706667-3.413333-1.706667-8.533333 1.706666-10.24 3.413333-1.706667 6.826667-1.706667 10.24 1.706667 6.826667 10.24 10.24 20.48 10.24 32.426667 1.706667 3.413333-1.706667 6.826667-5.12 6.826666z m-35.84-47.786666c-8.533333-5.12-17.066667-6.826667-25.6-8.533334-3.413333 0-5.12-1.706667-5.12-5.12-1.706667-1.706667 0-5.12 1.706667-6.826666 1.706667-1.706667 3.413333-3.413333 6.826667-3.413334 10.24 1.706667 20.48 5.12 29.013333 10.24 1.706667 1.706667 3.413333 3.413333 3.413333 6.826667s-1.706667 5.12-3.413333 6.826667c-1.706667 1.706667-5.12 1.706667-6.826667 0z m-17.066666 85.333333c-1.706667 3.413333-5.12 6.826667-8.533334 5.12-10.24-3.413333-20.48-6.826667-29.013333-13.653333-3.413333-1.706667-3.413333-6.826667-1.706667-10.24 1.706667-3.413333 6.826667-5.12 10.24-1.706667 6.826667 5.12 15.36 8.533333 23.893334 11.946667 5.12 1.706667 6.826667 5.12 5.12 8.533333z m-35.84-93.866667c-8.533333 1.706667-17.066667 5.12-22.186667 10.24-1.706667 1.706667-5.12 1.706667-6.826667 1.706667-1.706667 0-1.706667-1.706667-3.413333-1.706667-3.413333-3.413333-3.413333-8.533333 0-10.24 8.533333-6.826667 18.773333-11.946667 30.72-13.653333h3.413333c3.413333 1.706667 5.12 5.12 5.12 10.24-1.706667 1.706667-3.413333 3.413333-6.826666 3.413333zM401.066667 85.333333C377.173333 85.333333 358.4 66.56 358.4 42.666667S377.173333 0 401.066667 0 443.733333 18.773333 443.733333 42.666667 424.96 85.333333 401.066667 85.333333z m0-68.266666c-13.653333 0-25.6 11.946667-25.6 25.6S387.413333 68.266667 401.066667 68.266667 426.666667 56.32 426.666667 42.666667 414.72 17.066667 401.066667 17.066667z m58.026666 433.493333c-6.826667-8.533333-13.653333-17.066667-17.066666-29.013333 0-3.413333 0-5.12 1.706666-6.826667 1.706667-1.706667 5.12-3.413333 6.826667-1.706667 1.706667 0 5.12 3.413333 5.12 5.12 3.413333 8.533333 6.826667 15.36 13.653333 22.186667 3.413333 3.413333 1.706667 8.533333 0 10.24-3.413333 3.413333-8.533333 3.413333-10.24 0 0 1.706667 0 0 0 0z m221.866667-56.32c-3.413333-3.413333-3.413333-6.826667-1.706667-10.24 6.826667-6.826667 11.946667-15.36 17.066667-23.893333 1.706667-3.413333 6.826667-3.413333 10.24-1.706667 3.413333 1.706667 3.413333 6.826667 1.706667 10.24-5.12 8.533333-11.946667 15.36-18.773334 23.893333 0 3.413333-5.12 3.413333-8.533333 1.706667z m39.253333-47.786667c-3.413333 0-5.12-1.706667-6.826666-3.413333-1.706667-1.706667-1.706667-5.12 0-6.826667l15.36-25.6c1.706667-3.413333 6.826667-5.12 10.24-3.413333 3.413333 1.706667 5.12 6.826667 1.706666 10.24l-15.36 25.6c0 3.413333-1.706667 5.12-5.12 3.413333z m27.306667-51.2c-3.413333-1.706667-5.12-6.826667-3.413333-10.24 3.413333-5.12 5.12-10.24 8.533333-15.36 1.706667-3.413333 5.12-5.12 8.533333-3.413333 3.413333 1.706667 5.12 6.826667 3.413334 10.24-3.413333 5.12-5.12 11.946667-8.533334 17.066667-1.706667 1.706667-5.12 3.413333-8.533333 1.706666zM819.2 273.066667l-34.133333 51.2v-68.266667l34.133333 17.066667zM551.253333 491.52c0-1.706667 0-1.706667 1.706667-3.413333-3.413333 0-6.826667 1.706667-10.24 1.706666-3.413333 0-6.826667-3.413333-6.826667-6.826666s3.413333-6.826667 6.826667-6.826667c5.12 0 11.946667-1.706667 17.066667-1.706667 1.706667-3.413333 1.706667-5.12 1.706666-8.533333 1.706667-3.413333 5.12-6.826667 8.533334-5.12 3.413333 1.706667 5.12 5.12 5.12 8.533333v3.413334h1.706666c3.413333 3.413333 3.413333 6.826667 0 10.24-1.706667 1.706667-1.706667 1.706667-3.413333 1.706666s-1.706667 0-3.413333 1.706667c-1.706667 3.413333-1.706667 6.826667-3.413334 8.533333H733.866667l117.76 290.133334h1.706666v238.933333H136.533333V785.066667h1.706667L256 494.933333h295.253333v-3.413333zM733.866667 537.6V716.8l27.306666 68.266667h71.68L733.866667 537.6z m-477.866667 0L157.013333 785.066667h71.68l27.306667-68.266667V537.6zM245.76 785.066667H426.666667v17.066666H153.6v204.8h682.666667V802.133333H563.2v-17.066666h180.906667L716.8 716.8H273.066667l-27.306667 68.266667z m27.306667-85.333334h443.733333V512H273.066667v187.733333z m256-150.186666c-1.706667 3.413333-6.826667 3.413333-10.24 0-3.413333-3.413333-3.413333-6.826667 0-10.24 6.826667-6.826667 11.946667-15.36 17.066666-22.186667 1.706667-3.413333 6.826667-3.413333 10.24-1.706667 3.413333 1.706667 3.413333 6.826667 1.706667 10.24-5.12 8.533333-11.946667 17.066667-18.773333 23.893334z m-42.666667 40.96c-3.413333 1.706667-6.826667 1.706667-10.24-1.706667-1.706667-3.413333-1.706667-8.533333 1.706667-10.24 8.533333-6.826667 15.36-11.946667 22.186666-18.773333 3.413333-3.413333 6.826667-1.706667 10.24 0 3.413333 3.413333 1.706667 8.533333 0 10.24-8.533333 8.533333-17.066667 15.36-23.893333 20.48z m-49.493333 34.133333c-3.413333 1.706667-6.826667 1.706667-10.24-1.706667-1.706667-3.413333-1.706667-8.533333 1.706666-10.24 8.533333-5.12 17.066667-10.24 23.893334-15.36 3.413333-1.706667 8.533333-1.706667 10.24 1.706667 1.706667 3.413333 1.706667 8.533333-1.706667 10.24-6.826667 5.12-15.36 10.24-23.893333 15.36z m-51.2 29.013333c-3.413333 1.706667-6.826667 0-10.24-3.413333-1.706667-3.413333 0-8.533333 3.413333-10.24 8.533333-3.413333 17.066667-8.533333 25.6-13.653333 3.413333-1.706667 8.533333 0 10.24 3.413333 1.706667 3.413333 0 8.533333-3.413333 10.24-8.533333 5.12-17.066667 10.24-25.6 13.653333zM494.933333 887.466667c-47.786667 0-85.333333-37.546667-85.333333-85.333334h17.066667c0 37.546667 30.72 68.266667 68.266666 68.266667s68.266667-30.72 68.266667-68.266667h17.066667c0 47.786667-37.546667 85.333333-85.333334 85.333334zM25.6 256C11.946667 256 0 244.053333 0 230.4S11.946667 204.8 25.6 204.8s25.6 11.946667 25.6 25.6S39.253333 256 25.6 256z\"\n fill=\"#409EFF\"\n p-id=\"1731\"\n />\n </svg>\n <p :class=\"e('empty-text')\">{{ t('max.table.empty') }}</p>\n </div>\n </template>\n <template #pager>\n <div :class=\"e('bottom')\">\n <div :class=\"e('selection-wrapper')\">\n <slot name=\"selection-wrapper-before\" />\n <div v-if=\"showSelection\" :class=\"e('selection-wrapper-inner')\">\n <div :class=\"e('selection-operation')\">\n <NButton type=\"primary\" size=\"tiny\" quaternary @click=\"clearSelectedRowKeys\"> {{ t('max.basic.clear') }} </NButton>\n </div>\n <div :class=\"e('selection-count')\">\n <span> {{ t('max.basic.selected') }} </span>\n <span class=\"max-table-selection-count\">{{ getSelectRows().length }}</span>\n <span> {{ t('max.basic.item') }} </span>\n </div>\n </div>\n <slot name=\"selection-wrapper-after\" />\n </div>\n <VxePager v-if=\"getPaginationInfo?.total && pagination\" v-bind=\"getPaginationInfo\" @page-change=\"onPageChange\" />\n </div>\n </template>\n </VxeGrid>\n </div>\n </div>\n</template>\n","import { calculate } from '@maxax/utils'\nimport dayjs from 'dayjs'\nimport type { VxeTableFormatter } from './interface'\n\nexport const vxeTableFormatter: VxeTableFormatter = {\n money: {\n cellFormatMethod({ cellValue }) {\n return calculate.number(cellValue).toFormat(2)\n }\n },\n count: {\n cellFormatMethod({ cellValue }) {\n return calculate.number(cellValue).toFormat()\n }\n },\n date: {\n cellFormatMethod({ cellValue }) {\n return cellValue ? dayjs(cellValue).format('YYYY-MM-DD') : ''\n }\n },\n time: {\n cellFormatMethod({ cellValue }) {\n return cellValue ? dayjs(cellValue).format('YYYY-MM-DD HH:mm:ss') : ''\n }\n },\n FCN: {\n cellFormatMethod({ row }, field: string) {\n if (!row[`${field}Code`]) {\n return ''\n }\n return row[`${field}Name`] ? `${row[`${field}Code`]} - ${row[`${field}Name`]}` : row[`${field}Code`]\n }\n },\n FCR: {\n cellFormatMethod({ row }, field: string) {\n if (!row[`${field}Code`]) {\n return ''\n }\n return row[`${field}Rid`] ? `${row[`${field}Code`]} - ${row[`${field}Rid`]}` : row[`${field}Code`]\n }\n }\n}\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicTable from './BasicTable.vue'\nimport { vxeTableFormatter } from './format'\nimport { setVxeTableTheme, setVxeUIConfig, setVxeUIFormat } from './helper'\nimport { VxeUI } from './vxe-table'\n\nVxeUI.formats.mixin(vxeTableFormatter)\n\nexport const XBasicTable: SFCWithInstall<typeof BasicTable> = withInstall(BasicTable)\nexport type BasicTableInstance = InstanceType<typeof BasicTable>\n\nexport default XBasicTable\n\nexport * from './interface'\nexport * from './vxe-table'\n\nexport { setVxeTableTheme, setVxeUIConfig, setVxeUIFormat, VxeUI }\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useNamespace } from '../../composable'\nimport { XBasicSvgIcon } from '../basic-svg-icon'\nimport type { BasicTagProps } from './interface'\n\nconst props = defineProps<BasicTagProps>()\n\nconst { b, m } = useNamespace('basic-tag')\n\nconst icon = computed(() => {\n return props.tagType ? 'ri:checkbox-circle-fill' : 'ri:close-circle-fill'\n})\n\nconst basicTagClass = computed(() => {\n return [b(), props.tagType ? m('success') : m('error'), props.size ? m(props.size) : '']\n})\n</script>\n\n<template>\n <div :class=\"basicTagClass\">\n <XBasicSvgIcon :icon=\"icon\" />\n <slot />\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicTag from './BasicTag.vue'\n\nexport const XBasicTag: SFCWithInstall<typeof BasicTag> = withInstall(BasicTag)\nexport type BasicTagInstance = InstanceType<typeof BasicTag>\n\nexport default XBasicTag\n\nexport * from './interface'\n","import type { RcFile } from './interface'\n\nexport default (file: RcFile, acceptedFiles: string | string[]) => {\n if (file && acceptedFiles) {\n const acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',')\n const fileName = file.name || ''\n const mimeType = file.type || ''\n const baseMimeType = mimeType.replace(/\\/.*$/, '')\n\n return acceptedFilesArray.some(type => {\n const validType = type.trim()\n // This is something like */*,* allow all files\n if (/^\\*(\\/\\*)?$/.test(type)) {\n return true\n }\n\n // like .jpg, .png\n if (validType.charAt(0) === '.') {\n const lowerFileName = fileName.toLowerCase()\n const lowerType = validType.toLowerCase()\n\n let affixList = [lowerType]\n if (lowerType === '.jpg' || lowerType === '.jpeg') {\n affixList = ['.jpg', '.jpeg']\n }\n\n return affixList.some(affix => lowerFileName.endsWith(affix))\n }\n\n // This is something like a image/* mime type\n if (/\\/\\*$/.test(validType)) {\n return baseMimeType === validType.replace(/\\/.*$/, '')\n }\n\n // Full match\n if (mimeType === validType) {\n return true\n }\n\n // Invalidate type should skip\n if (/^\\w+$/.test(validType)) {\n console.warn(false, `Upload takes an invalidate 'accept' type '${validType}'.Skip for check.`)\n return true\n }\n\n return false\n })\n }\n return true\n}\n","/* eslint-disable prettier/prettier */\nimport type { ExtractPropTypes, PropType } from 'vue'\n\nexport const basicUploadCoreProps = {\n capture: {\n type: [Boolean, String] as PropType<boolean | 'user' | 'environment'>\n },\n multipart: {\n type: Boolean,\n default: false\n },\n name: {\n type: String,\n default: 'file'\n },\n disabled: {\n type: Boolean\n },\n componentTag: {\n type: String as PropType<any>,\n default: 'span'\n },\n action: {\n type: [String, Function] as PropType<Action>\n },\n method: {\n type: String as PropType<UploadRequestMethod>\n },\n directory: {\n type: Boolean\n },\n data: {\n type: [Object, Function] as PropType<Record<string, unknown> | ((file: RcFile | string | Blob) => Record<string, unknown>)>,\n default: () => ({})\n },\n headers: {\n type: Object as PropType<UploadRequestHeader>,\n default: () => ({})\n },\n accept: {\n type: String\n },\n multiple: {\n type: Boolean\n },\n onBatchStart: {\n type: Function as PropType<(fileList: Array<{ file: RcFile; parsedFile: Exclude<BeforeUploadFileType, boolean> }>) => void>\n },\n onReject: {\n type: Function as PropType<(fileList: RcFile[]) => void>\n },\n onStart: {\n type: Function as PropType<(file: RcFile) => void>,\n default: () => { }\n },\n onError: {\n type: Function as PropType<(error: Error, ret: Record<string, unknown>, file: RcFile) => void>,\n default: () => { }\n },\n onSuccess: {\n type: Function as PropType<(response: Record<string, unknown>, file: RcFile, xhr: XMLHttpRequest) => void>,\n default: () => { }\n },\n onProgress: {\n type: Function as PropType<(event: UploadProgressEvent, file: RcFile) => void>\n },\n beforeUpload: {\n type: Function as PropType<(file: RcFile, FileList: RcFile[]) => BeforeUploadFileType | Promise<unknown | BeforeUploadFileType>>,\n default: null\n },\n customRequest: {\n type: Function as PropType<(option: UploadRequestOption) => void>,\n default: null\n },\n withCredentials: {\n type: Boolean,\n default: false\n },\n openFileDialogOnClick: {\n type: Boolean,\n default: true\n },\n prefixCls: {\n type: String,\n default: 'rc-upload'\n },\n id: {\n type: String\n },\n onMouseenter: {\n type: Function as PropType<(e: MouseEvent) => void>\n },\n onMouseleave: {\n type: Function as PropType<(e: MouseEvent) => void>\n },\n onClick: {\n type: Function as PropType<(e: MouseEvent | KeyboardEvent) => void>\n }\n}\n\nexport type BeforeUploadFileType = File | Blob | boolean | string\n\nexport type Action = string | ((file: RcFile) => string | PromiseLike<string>)\n\nexport const uploadProps = () => {\n return {\n capture: [Boolean, String] as PropType<boolean | 'user' | 'environment'>,\n multipart: { type: Boolean, default: undefined },\n name: String,\n disabled: { type: Boolean, default: undefined },\n componentTag: String as PropType<any>,\n action: [String, Function] as PropType<Action>,\n method: String as PropType<UploadRequestMethod>,\n directory: { type: Boolean, default: undefined },\n data: [Object, Function] as PropType<Record<string, unknown> | ((file: RcFile | string | Blob) => Record<string, unknown>)>,\n headers: Object as PropType<UploadRequestHeader>,\n accept: String,\n multiple: { type: Boolean, default: undefined },\n onBatchStart: Function as PropType<(fileList: Array<{ file: RcFile; parsedFile: Exclude<BeforeUploadFileType, boolean> }>) => void>,\n onReject: Function as PropType<(fileList: RcFile[]) => void>,\n onStart: Function as PropType<(file: RcFile) => void>,\n onError: Function as PropType<(error: Error, ret: Record<string, unknown>, file: RcFile) => void>,\n onSuccess: Function as PropType<(response: Record<string, unknown>, file: RcFile, xhr: XMLHttpRequest) => void>,\n onProgress: Function as PropType<(event: UploadProgressEvent, file: RcFile) => void>,\n beforeUpload: Function as PropType<(file: RcFile, FileList: RcFile[]) => BeforeUploadFileType | Promise<unknown | BeforeUploadFileType>>,\n customRequest: Function as PropType<(option: UploadRequestOption) => void>,\n withCredentials: { type: Boolean, default: undefined },\n openFileDialogOnClick: { type: Boolean, default: undefined },\n prefixCls: String,\n id: String,\n onMouseenter: Function as PropType<(e: MouseEvent) => void>,\n onMouseleave: Function as PropType<(e: MouseEvent) => void>,\n onClick: Function as PropType<(e: MouseEvent | KeyboardEvent) => void>\n }\n}\n\nexport type UploadProps = Partial<ExtractPropTypes<ReturnType<typeof uploadProps>>>\n\nexport interface UploadProgressEvent extends Partial<ProgressEvent> {\n percent?: number\n}\n\nexport type UploadRequestMethod = 'POST' | 'PUT' | 'PATCH' | 'post' | 'put' | 'patch'\n\nexport type UploadRequestHeader = Record<string, string>\n\nexport interface UploadRequestError extends Error {\n status?: number\n method?: UploadRequestMethod\n url?: string\n}\n\nexport interface UploadRequestOption<T = any> {\n onProgress?: (event: UploadProgressEvent) => void\n onError?: (event: UploadRequestError | ProgressEvent, body?: T) => void\n onSuccess?: (body: T, xhr?: XMLHttpRequest) => void\n data?: Record<string, unknown>\n filename?: string\n file: Exclude<BeforeUploadFileType, File | boolean> | RcFile\n withCredentials?: boolean\n action: string\n headers?: UploadRequestHeader\n method: UploadRequestMethod\n}\n\nexport interface RcFile extends File {\n uid: string\n}\n\nexport interface BasicUploadCoreContext {\n name: string\n}\n","const attributes = `accept acceptcharset accesskey action allowfullscreen allowtransparency\nalt async autocomplete autofocus autoplay capture cellpadding cellspacing challenge\ncharset checked classid classname colspan cols content contenteditable contextmenu\ncontrols coords crossorigin data datetime default defer dir disabled download draggable\nenctype form formaction formenctype formmethod formnovalidate formtarget frameborder\nheaders height hidden high href hreflang htmlfor for httpequiv icon id inputmode integrity\nis keyparams keytype kind label lang list loop low manifest marginheight marginwidth max maxlength media\nmediagroup method min minlength multiple muted name novalidate nonce open\noptimum pattern placeholder poster preload radiogroup readonly rel required\nreversed role rowspan rows sandbox scope scoped scrolling seamless selected\nshape size sizes span spellcheck src srcdoc srclang srcset start step style\nsummary tabindex target title type usemap value width wmode wrap`\n\nconst eventsName = `onCopy onCut onPaste onCompositionend onCompositionstart onCompositionupdate onKeydown\n onKeypress onKeyup onFocus onBlur onChange onInput onSubmit onClick onContextmenu onDoubleclick onDblclick\n onDrag onDragend onDragenter onDragexit onDragleave onDragover onDragstart onDrop onMousedown\n onMouseenter onMouseleave onMousemove onMouseout onMouseover onMouseup onSelect onTouchcancel\n onTouchend onTouchmove onTouchstart onTouchstartPassive onTouchmovePassive onScroll onWheel onAbort onCanplay onCanplaythrough\n onDurationchange onEmptied onEncrypted onEnded onError onLoadeddata onLoadedmetadata\n onLoadstart onPause onPlay onPlaying onProgress onRatechange onSeeked onSeeking onStalled onSuspend onTimeupdate onVolumechange onWaiting onLoad onError`\n\nconst propList = `${attributes} ${eventsName}`.split(/[\\s\\n]+/)\n\nconst ariaPrefix = 'aria-'\nconst dataPrefix = 'data-'\n\nfunction match(key: string, prefix: string) {\n return key.indexOf(prefix) === 0\n}\n\nexport interface PickConfig {\n aria?: boolean\n data?: boolean\n attr?: boolean\n}\n\n/**\n * Picker props from exist props with filter\n * @param props Passed props\n * @param ariaOnly boolean | { aria?: boolean; data?: boolean; attr?: boolean; } filter config\n */\nexport default function pickAttrs(props: object, ariaOnly: boolean | PickConfig = false) {\n let mergedConfig\n if (ariaOnly === false) {\n mergedConfig = {\n aria: true,\n data: true,\n attr: true\n }\n } else if (ariaOnly === true) {\n mergedConfig = {\n aria: true\n }\n } else {\n mergedConfig = {\n ...ariaOnly\n }\n }\n\n const attrs: Record<string, any> = {}\n Object.keys(props).forEach(key => {\n if (\n // Aria\n (mergedConfig.aria && (key === 'role' || match(key, ariaPrefix))) ||\n // Data\n (mergedConfig.data && match(key, dataPrefix)) ||\n // Attr\n (mergedConfig.attr && (propList.includes(key) || propList.includes(key.toLowerCase())))\n ) {\n attrs[key] = (props as any)[key]\n }\n })\n return attrs\n}\n","import type { UploadProgressEvent, UploadRequestError, UploadRequestOption } from './interface'\n\nfunction getError(option: UploadRequestOption, xhr: XMLHttpRequest) {\n const msg = `cannot ${option.method} ${option.action} ${xhr.status}'`\n const err = new Error(msg) as UploadRequestError\n err.status = xhr.status\n err.method = option.method\n err.url = option.action\n return err\n}\n\nfunction getBody(xhr: XMLHttpRequest) {\n const text = xhr.responseText || xhr.response\n if (!text) {\n return text\n }\n\n try {\n return JSON.parse(text)\n } catch (e) {\n console.warn(e)\n return text\n }\n}\n\nexport default function upload(option: UploadRequestOption) {\n const xhr = new XMLHttpRequest()\n\n if (option.onProgress && xhr.upload) {\n xhr.upload.onprogress = function onprogress(e: UploadProgressEvent) {\n if (e.total && e.total > 0) {\n e.percent = ((e.loaded || 0) / e.total) * 100\n }\n option.onProgress?.(e)\n }\n }\n\n const formData = new FormData()\n\n if (option.data) {\n Object.keys(option.data).forEach(key => {\n const value = option.data ? option.data[key] : undefined\n // support key-value array data\n if (Array.isArray(value)) {\n value.forEach(item => {\n // { list: [ 11, 22 ] }\n // formData.append('list[]', 11);\n formData.append(`${key}[]`, item)\n })\n return\n }\n\n formData.append(key, value as string | Blob)\n })\n }\n\n if (option.file instanceof Blob) {\n formData.append(option.filename || '', option.file, (option.file as any).name)\n } else {\n formData.append(option.filename || '', option.file)\n }\n\n xhr.onerror = function onerror(e) {\n option.onError?.(e)\n }\n\n xhr.onload = function onload() {\n // allow success when 2xx status\n // see https://github.com/react-component/upload/issues/34\n if (xhr.status < 200 || xhr.status >= 300) {\n return option.onError?.(getError(option, xhr), getBody(xhr))\n }\n\n return option.onSuccess?.(getBody(xhr), xhr)\n }\n\n xhr.open(option.method, option.action, true)\n\n // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true\n }\n\n const headers = option.headers || {}\n\n // when set headers['X-Requested-With'] = null , can close default XHR header\n // see https://github.com/react-component/upload/issues/33\n if (headers['X-Requested-With'] !== null) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest')\n }\n\n Object.keys(headers).forEach(h => {\n if (headers[h] !== null) {\n xhr.setRequestHeader(h, headers[h])\n }\n })\n\n xhr.send(formData)\n\n return {\n abort() {\n xhr.abort()\n }\n }\n}\n","/* eslint-disable prettier/prettier */\nimport type { RcFile } from './interface'\n\ninterface InternalDataTransferItem extends DataTransferItem {\n isFile: boolean\n file: (cd: (file: RcFile & { webkitRelativePath?: string }) => void) => void\n createReader: () => any\n fullPath: string\n isDirectory: boolean\n name: string\n path: string\n}\n\nfunction loopFiles(item: InternalDataTransferItem, callback: any) {\n const dirReader = item.createReader()\n let fileList: any[] = []\n\n function sequence() {\n dirReader.readEntries((entries: InternalDataTransferItem[]) => {\n const entryList = Array.prototype.slice.apply(entries)\n fileList = fileList.concat(entryList)\n\n // Check if all the file has been viewed\n const isFinished = !entryList.length\n\n if (isFinished) {\n callback(fileList)\n } else {\n sequence()\n }\n })\n }\n\n sequence()\n}\n\nconst traverseFileTree = (files: InternalDataTransferItem[], callback: any, isAccepted: any) => {\n const $_traverseFileTree = (item: InternalDataTransferItem, path?: string) => {\n item.path = path || ''\n if (item.isFile) {\n item.file(file => {\n if (isAccepted(file)) {\n // https://github.com/ant-design/ant-design/issues/16426\n if (item.fullPath && !file.webkitRelativePath) {\n Object.defineProperties(file, {\n webkitRelativePath: {\n writable: true\n }\n })\n ; (file as any).webkitRelativePath = item.fullPath.replace(/^\\//, '')\n Object.defineProperties(file, {\n webkitRelativePath: {\n writable: false\n }\n })\n }\n callback([file])\n }\n })\n } else if (item.isDirectory) {\n loopFiles(item, (entries: InternalDataTransferItem[]) => {\n entries.forEach(entryItem => {\n $_traverseFileTree(entryItem, `${path}${item.name}/`)\n })\n })\n }\n }\n files.forEach(file => {\n $_traverseFileTree(file.webkitGetAsEntry() as any)\n })\n}\n\nexport default traverseFileTree\n","const now = Number(new Date())\nlet index = 0\n\nexport default function uid() {\n return `vc-upload-${now}-${++index}`\n}\n","/* eslint-disable prettier/prettier */\n \nimport { defineComponent, onBeforeUnmount, onMounted, ref } from 'vue'\nimport { partition } from 'lodash-es'\nimport attrAccept from './attr-accept'\nimport type { BeforeUploadFileType, RcFile, UploadProgressEvent, UploadRequestError } from './interface'\nimport { basicUploadCoreProps } from './interface'\nimport pickAttrs from './pickAttrs'\nimport defaultRequest from './request'\nimport traverseFileTree from './traverseFileTree'\nimport getUid from './uid'\n\nexport type ChangeEvent = Event & {\n target: {\n value?: string | undefined\n }\n}\n\ninterface ParsedFileInfo {\n origin: RcFile\n action: string\n data: Record<string, unknown>\n parsedFile: RcFile\n}\nexport default defineComponent({\n compatConfig: { MODE: 3 },\n name: 'AjaxUploader',\n inheritAttrs: false,\n props: basicUploadCoreProps,\n setup(props, { slots, attrs, expose }) {\n const uid = ref(getUid())\n const reqs: any = {}\n\n const fileInput = ref<HTMLInputElement>()\n\n let isMounted = false\n\n /**\n * Process file before upload. When all the file is ready, we start upload.\n */\n const processFile = async (file: RcFile, fileList: RcFile[]): Promise<ParsedFileInfo> => {\n const { beforeUpload } = props\n\n let transformedFile: BeforeUploadFileType | unknown = file\n if (beforeUpload) {\n try {\n transformedFile = await beforeUpload(file, fileList)\n } catch (e) {\n console.warn('max-ajax-uploader', e)\n // Rejection will also trade as false\n transformedFile = false\n }\n if (transformedFile === false) {\n return {\n origin: file,\n parsedFile: null as unknown as RcFile,\n action: null as unknown as string,\n data: null as unknown as Record<string, unknown>\n }\n }\n }\n\n // Get latest action\n const { action } = props\n let mergedAction: string\n if (typeof action === 'function') {\n mergedAction = await action(file)\n } else {\n mergedAction = action as string\n }\n\n // Get latest data\n const { data } = props\n let mergedData: Record<string, unknown>\n if (typeof data === 'function') {\n mergedData = await data(file)\n } else {\n mergedData = data as Record<string, unknown>\n }\n\n const parsedData =\n // string type is from legacy `transformFile`.\n // Not sure if this will work since no related test case works with it\n (typeof transformedFile === 'object' || typeof transformedFile === 'string') && transformedFile ? transformedFile : file\n\n let parsedFile: File\n if (parsedData instanceof File) {\n parsedFile = parsedData\n } else {\n parsedFile = new File([parsedData as BlobPart], file.name, { type: file.type })\n }\n\n const mergedParsedFile: RcFile = parsedFile as RcFile\n mergedParsedFile.uid = file.uid\n\n return {\n origin: file,\n data: mergedData,\n parsedFile: mergedParsedFile,\n action: mergedAction\n }\n }\n\n const post = ({ data, origin, action, parsedFile }: ParsedFileInfo) => {\n if (!isMounted) {\n return\n }\n\n const { onStart, customRequest, name, headers, withCredentials, method } = props\n\n const { uid } = origin\n const request = customRequest || defaultRequest\n\n const requestOption = {\n action,\n filename: name,\n data,\n file: parsedFile,\n headers,\n withCredentials,\n method: method || 'post',\n onProgress: (e: UploadProgressEvent) => {\n const { onProgress } = props\n onProgress?.(e, parsedFile)\n },\n onSuccess: (ret: any, xhr: XMLHttpRequest) => {\n const { onSuccess } = props\n onSuccess?.(ret, parsedFile, xhr)\n\n delete reqs[uid]\n },\n onError: (err: UploadRequestError, ret: any) => {\n const { onError } = props\n onError?.(err, ret, parsedFile)\n\n delete reqs[uid]\n }\n }\n\n onStart?.(origin)\n reqs[uid] = request(requestOption as any)\n }\n\n const reset = () => {\n uid.value = getUid()\n }\n\n const abort = (file?: any) => {\n if (file) {\n const uid = file.uid ? file.uid : file\n if (reqs[uid] && reqs[uid].abort) {\n reqs[uid].abort()\n }\n delete reqs[uid]\n } else {\n Object.keys(reqs).forEach(uid => {\n if (reqs[uid] && reqs[uid].abort) {\n reqs[uid].abort()\n }\n delete reqs[uid]\n })\n }\n }\n\n onMounted(() => {\n isMounted = true\n })\n\n onBeforeUnmount(() => {\n isMounted = false\n abort()\n })\n const uploadFiles = (files: File[]) => {\n const originFiles = [...files] as RcFile[]\n const postFiles = originFiles.map((file: RcFile & { uid?: string }) => {\n file.uid = getUid()\n return processFile(file, originFiles)\n })\n\n // Batch upload files\n Promise.all(postFiles).then(fileList => {\n const { onBatchStart } = props\n\n onBatchStart?.(fileList.map(({ origin, parsedFile }) => ({ file: origin, parsedFile })))\n\n fileList\n .filter(file => file.parsedFile !== null)\n .forEach(file => {\n post(file)\n })\n })\n }\n\n const onChange = (e: ChangeEvent) => {\n const { accept, directory } = props\n const { files } = e.target as any\n const acceptedFiles = [...files].filter((file: RcFile) => !directory || attrAccept(file, accept as string))\n uploadFiles(acceptedFiles)\n reset()\n }\n\n const onClick = (e: MouseEvent | KeyboardEvent) => {\n const el = fileInput.value\n if (!el) {\n return\n }\n const { onClick } = props\n // if (children && (children as any).type === 'button') {\n // const parent = el.parentNode as HTMLInputElement;\n // parent.focus();\n // parent.querySelector('button').blur();\n // }\n el.click()\n if (onClick) {\n onClick(e)\n }\n }\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onClick(e)\n }\n }\n\n const onFileDrop = (e: DragEvent) => {\n const { multiple } = props\n\n e.preventDefault()\n\n if (e.type === 'dragover') {\n return\n }\n\n if (props.directory) {\n traverseFileTree(Array.prototype.slice.call(e.dataTransfer?.items ?? []), uploadFiles, (_file: RcFile) => attrAccept(_file, props.accept as string))\n } else {\n const files: [RcFile[], RcFile[]] = partition(Array.prototype.slice.call(e.dataTransfer?.files ?? []), (file: RcFile) => attrAccept(file, props.accept as string))\n let successFiles = files[0]\n const errorFiles = files[1]\n if (multiple === false) {\n successFiles = successFiles.slice(0, 1)\n }\n\n uploadFiles(successFiles)\n if (errorFiles.length && props.onReject) props.onReject(errorFiles)\n }\n }\n expose({\n abort\n })\n return () => {\n const { componentTag: Tag, prefixCls = 'max-upload', disabled, id, multiple, accept, capture, directory, openFileDialogOnClick, onMouseenter, onMouseleave, ...otherProps } = props\n const cls = {\n [prefixCls]: true,\n [`${prefixCls}-disabled`]: disabled,\n [attrs.class as string]: Boolean(attrs.class)\n }\n // because input don't have directory/webkitdirectory type declaration\n const dirProps: any = directory ? { directory: 'directory', webkitdirectory: 'webkitdirectory' } : {}\n\n const eventsFat = {\n onClick: openFileDialogOnClick ? onClick : () => { },\n onKeydown: openFileDialogOnClick ? onKeyDown : () => { },\n onMouseenter,\n onMouseleave,\n onDrop: onFileDrop,\n onDragover: onFileDrop,\n tabindex: '0'\n }\n const events = disabled ? {} : eventsFat\n return (\n <Tag {...events} class={cls} role=\"button\" style={attrs.style}>\n <input\n {...pickAttrs(otherProps, { aria: true, data: true })}\n id={id}\n type=\"file\"\n ref={fileInput}\n onClick={e => e.stopPropagation()} // https://github.com/ant-design/ant-design/issues/19948\n onCancel={(e: any) => e.stopPropagation()}\n key={uid.value}\n style={{ display: 'none' }}\n accept={accept}\n {...dirProps}\n multiple={multiple}\n onChange={onChange}\n {...(capture !== null ? { capture } : {})}\n />\n {slots.default?.()}\n </Tag>\n )\n }\n }\n})\n","import { defineComponent, ref } from 'vue'\nimport { useNamespace } from '../../composable'\nimport AjaxUpload from './AjaxUploader'\nimport type { RcFile } from './interface'\nimport { basicUploadCoreProps } from './interface'\n\nexport default defineComponent({\n compatConfig: { MODE: 3 },\n name: 'XBasicUploadCore',\n props: basicUploadCoreProps,\n setup(props, { slots, attrs, expose }) {\n const { b } = useNamespace('basic-upload-core')\n const uploader = ref()\n\n const abort = (file: RcFile) => {\n uploader.value?.abort(file)\n }\n expose({\n abort\n })\n\n return () => {\n return <AjaxUpload class={b()} {...props} {...attrs} v-slots={slots} ref={uploader} />\n }\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicUploadCore from './BasicUploadCore'\n\nexport const XBasicUploadCore: SFCWithInstall<typeof BasicUploadCore> = withInstall(BasicUploadCore)\nexport type BasicUploadCoreInstance = InstanceType<typeof BasicUploadCore>\n\nexport default XBasicUploadCore\n\nexport * from './interface'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { ItemRender, UploadFile, UploadListProgressProps, UploadListType, VueNode } from '../basic-upload'\n\nexport const basicUploadListItemProps = {\n file: Object as PropType<UploadFile>,\n items: Array as PropType<UploadFile[]>,\n listType: String as PropType<UploadListType>,\n isImgUrl: Function as PropType<(file: UploadFile) => boolean>,\n showRemoveIcon: Boolean,\n showDownloadIcon: Boolean,\n showPreviewIcon: Boolean,\n removeIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n downloadIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n previewIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n iconRender: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n\n actionIconRender: Function as PropType<(opt: { customIcon: VueNode; callback: () => void; prefixCls: string; title?: string | undefined }) => VueNode>,\n itemRender: Function as PropType<ItemRender>,\n onPreview: Function as PropType<(file: UploadFile, e?: Event) => void>,\n onClose: Function as PropType<(file: UploadFile) => void>,\n onDownload: Function as PropType<(file: UploadFile) => void>,\n progress: Object as PropType<UploadListProgressProps>\n}\n\nexport type BasicUploadListItemProps = ExtractPropTypes<typeof basicUploadListItemProps>\n\nexport interface BasicUploadListItemContext {\n name: string\n}\n","/* eslint-disable prettier/prettier */\nimport type { CSSProperties } from 'vue'\nimport { computed, defineComponent, onBeforeUnmount, onMounted, shallowRef, Transition, watch } from 'vue'\nimport { NProgress } from 'naive-ui'\nimport { useLocale, useNamespace } from '../../composable'\nimport { getTransitionProps } from '../../utils'\nimport { XBasicSvgIcon } from '../basic-svg-icon'\nimport type { UploadFile, UploadListProgressProps } from '../basic-upload'\nimport { basicUploadListItemProps } from './interface'\n\nexport default defineComponent({\n name: 'XBasicUploadListItem',\n inheritAttrs: false,\n props: basicUploadListItemProps,\n compatConfig: { MODE: 3 },\n setup(props, { slots, attrs }) {\n const { b, namespace } = useNamespace('basic-upload-list-item')\n const { t } = useLocale()\n const prefixCls = b()\n\n const showProgress = shallowRef(false)\n const progressRafRef = shallowRef()\n onMounted(() => {\n progressRafRef.value = setTimeout(() => {\n showProgress.value = true\n }, 300)\n })\n onBeforeUnmount(() => {\n clearTimeout(progressRafRef.value)\n })\n const mergedStatus = shallowRef(props.file?.status)\n watch(\n () => props.file?.status,\n status => {\n if (status !== 'removed') {\n mergedStatus.value = status\n }\n }\n )\n\n const transitionProps = computed(() => getTransitionProps(`${namespace.value}-fade`))\n return () => {\n const {\n listType,\n file,\n items,\n progress: progressProps,\n iconRender = slots.iconRender,\n actionIconRender = slots.actionIconRender,\n itemRender = slots.itemRender,\n isImgUrl,\n showPreviewIcon,\n showRemoveIcon,\n showDownloadIcon,\n previewIcon: customPreviewIcon = slots.previewIcon,\n removeIcon: customRemoveIcon = slots.removeIcon,\n downloadIcon: customDownloadIcon = slots.downloadIcon,\n onPreview,\n onDownload,\n onClose\n } = props\n const { class: className, style } = attrs\n // This is used for legacy span make scrollHeight the wrong value.\n // We will force these to be `display: block` with non `picture-card`\n\n const iconNode = iconRender ? iconRender({ file: file as UploadFile }) : null\n let icon = <div class={`${prefixCls}-text-icon`}>{iconNode}</div>\n if (listType === 'picture' || listType === 'picture-card') {\n if (mergedStatus.value === 'uploading' || (!file?.thumbUrl && !file?.url)) {\n const uploadingClassName = {\n [`${prefixCls}-thumbnail`]: true,\n [`${prefixCls}-file`]: mergedStatus.value !== 'uploading'\n }\n icon = <div class={uploadingClassName}>{iconNode}</div>\n } else {\n const thumbnail = isImgUrl?.(file) ? <img src={file?.thumbUrl || file?.url} alt={file?.name} class={`${prefixCls}-image`} crossorigin={file?.crossOrigin} /> : iconNode\n const aClassName = {\n [`${prefixCls}-thumbnail`]: true,\n [`${prefixCls}-file`]: isImgUrl && !isImgUrl(file)\n }\n icon = (\n <a class={aClassName} onClick={e => onPreview?.(file, e)} href={file?.url || file?.thumbUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {thumbnail}\n </a>\n )\n }\n }\n\n const infoUploadingClass = {\n [`${prefixCls}`]: true,\n [`${prefixCls}-${mergedStatus.value}`]: true\n }\n const linkProps = typeof file?.linkProps === 'string' ? JSON.parse(file?.linkProps) : file?.linkProps\n\n const removeActionIconRenderer = actionIconRender\n ? actionIconRender({\n customIcon: customRemoveIcon ? customRemoveIcon({ file: file as UploadFile }) : <XBasicSvgIcon icon=\"ri:delete-bin-line\" />,\n callback: () => onClose?.(file as UploadFile),\n prefixCls: prefixCls as string,\n title: t('max.upload.removeFile')\n })\n : null\n\n const downloadActionIconRenderer = actionIconRender\n ? actionIconRender({\n customIcon: customDownloadIcon ? customDownloadIcon({ file: file as UploadFile }) : <XBasicSvgIcon icon=\"ri:download-line\" />,\n callback: () => onDownload?.(file as UploadFile),\n prefixCls: prefixCls as string,\n title: t('max.upload.downloadFile')\n })\n : null\n\n const removeIcon = showRemoveIcon ? removeActionIconRenderer : null\n const downloadIcon = showDownloadIcon && mergedStatus.value === 'done' ? downloadActionIconRenderer : null\n\n const downloadOrDelete = listType !== 'picture-card' && (\n <span key=\"download-delete\" class={[`${prefixCls}-actions`, { picture: listType === 'picture' }]}>\n {downloadIcon}\n {removeIcon}\n </span>\n )\n const listItemNameClass = `${prefixCls}-name`\n const fileName = file?.url\n ? [\n <a key=\"view\" target=\"_blank\" rel=\"noopener noreferrer\" class={listItemNameClass} title={file?.name} {...linkProps} href={file?.url} onClick={e => onPreview?.(file as UploadFile, e)}>\n {file?.name}\n </a>,\n downloadOrDelete\n ]\n : [\n <span key=\"view\" class={listItemNameClass} onClick={e => onPreview?.(file as UploadFile, e)} title={file?.name}>\n {file?.name}\n </span>,\n downloadOrDelete\n ]\n const previewStyle: CSSProperties = {\n pointerEvents: 'none',\n opacity: 0.5\n }\n const previewIcon = showPreviewIcon ? (\n <a href={file?.url || file?.thumbUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={file?.url || file?.thumbUrl ? undefined : previewStyle} onClick={e => onPreview?.(file as UploadFile, e)} title={t('max.upload.previewFile')} class={[`${prefixCls}-action`, { picture: listType === 'picture' }]}>\n {customPreviewIcon ? customPreviewIcon({ file: file as UploadFile }) : <XBasicSvgIcon icon=\"ri:eye-line\" />}\n </a>\n ) : null\n\n const pictureCardActions = listType === 'picture-card' && mergedStatus.value !== 'uploading' && (\n <span class={`${prefixCls}-actions`}>\n {previewIcon}\n {mergedStatus.value === 'done' && downloadIcon}\n {removeIcon}\n </span>\n )\n\n const dom = (\n <div class={infoUploadingClass}>\n {icon}\n {fileName}\n {pictureCardActions}\n {showProgress.value && (\n <Transition {...transitionProps.value}>\n <div v-show={mergedStatus.value === 'uploading'} class={`${prefixCls}-progress`}>\n {file && 'percent' in file ? <NProgress {...(progressProps as UploadListProgressProps)} type=\"line\" percentage={file?.percent} height={2} /> : null}\n </div>\n </Transition>\n )}\n </div>\n )\n const listContainerNameClass = {\n [`${prefixCls}-${listType}`]: true,\n [`${prefixCls}-container`]: true,\n [`${className}`]: Boolean(className)\n }\n const message = file?.response && typeof file?.response === 'string' ? file?.response : file?.error?.statusText || file?.error?.message || t('max.upload.uploadFailed')\n const item = mergedStatus.value === 'error' ? [dom, <span class={`${prefixCls}-error-tooltip`} title={message} />] : dom\n\n return (\n <div class={listContainerNameClass} style={style as CSSProperties}>\n {itemRender\n ? itemRender({\n originNode: item,\n file: file as UploadFile,\n fileList: items as UploadFile[],\n actions: {\n download: onDownload ? onDownload.bind(null, file as UploadFile) : () => { },\n preview: onPreview ? onPreview.bind(null, file as UploadFile) : () => { },\n remove: onClose ? onClose.bind(null, file as UploadFile) : () => { }\n }\n })\n : item}\n </div>\n )\n }\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicUploadListItem from './BasicUploadListItem'\n\nexport const XBasicUploadListItem: SFCWithInstall<typeof BasicUploadListItem> = withInstall(BasicUploadListItem)\nexport type BasicUploadListItemInstance = InstanceType<typeof BasicUploadListItem>\n\nexport default XBasicUploadListItem\n\nexport * from './interface'\n","import type { FileType, InternalUploadFile, UploadFile } from './interface'\n\nexport function file2Obj(file: FileType): InternalUploadFile {\n return {\n ...file,\n lastModified: file.lastModified,\n lastModifiedDate: file.lastModifiedDate,\n name: file.name,\n size: file.size,\n type: file.type,\n uid: file.uid,\n percent: 0,\n originFileObj: file\n }\n}\n\n/** Upload fileList. Replace file if exist or just push into it. */\nexport function updateFileList(file: UploadFile<any>, fileList: Array<UploadFile<any>>) {\n const nextFileList = [...fileList]\n const fileIndex = nextFileList.findIndex(({ uid }: UploadFile) => uid === file.uid)\n if (fileIndex === -1) {\n nextFileList.push(file)\n } else {\n nextFileList[fileIndex] = file\n }\n return nextFileList\n}\n\nexport function getFileItem(file: FileType, fileList: UploadFile[]) {\n const matchKey = file.uid !== undefined ? 'uid' : 'name'\n return fileList.filter(item => item[matchKey] === file[matchKey])[0]\n}\n\nexport function removeFileItem(file: UploadFile, fileList: UploadFile[]) {\n const matchKey = file.uid !== undefined ? 'uid' : 'name'\n const removed = fileList.filter(item => item[matchKey] !== file[matchKey])\n if (removed.length === fileList.length) {\n return null\n }\n return removed\n}\n\n// ==================== Default Image Preview ====================\nconst extname = (url = '') => {\n const temp = url.split('/')\n const filename = temp[temp.length - 1]\n const filenameWithoutSuffix = filename.split(/#|\\?/)[0]\n return (/\\.[^./\\\\]*$/.exec(filenameWithoutSuffix) || [''])[0]\n}\n\nconst isImageFileType = (type: string): boolean => type.indexOf('image/') === 0\n\nexport const isImageUrl = (file: UploadFile): boolean => {\n if (file.type && !file.thumbUrl) {\n return isImageFileType(file.type)\n }\n const url: string = (file.thumbUrl || file.url || '') as string\n const extension = extname(url)\n if (/^data:image\\//.test(url) || /(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i.test(extension)) {\n return true\n }\n if (/^data:/.test(url)) {\n // other file types of base64\n return false\n }\n if (extension) {\n // other file types which have extension\n return false\n }\n return true\n}\n\nconst MEASURE_SIZE = 200\nexport function previewImage(file: File | Blob): Promise<string> {\n return new Promise(resolve => {\n if (!file.type || !isImageFileType(file.type)) {\n resolve('')\n return\n }\n\n const canvas = document.createElement('canvas')\n canvas.width = MEASURE_SIZE\n canvas.height = MEASURE_SIZE\n canvas.style.cssText = `position: fixed; left: 0; top: 0; width: ${MEASURE_SIZE}px; height: ${MEASURE_SIZE}px; z-index: 9999; display: none;`\n document.body.appendChild(canvas)\n const ctx = canvas.getContext('2d')\n const img = new Image()\n img.onload = () => {\n const { width, height } = img\n\n let drawWidth = MEASURE_SIZE\n let drawHeight = MEASURE_SIZE\n let offsetX = 0\n let offsetY = 0\n\n if (width > height) {\n drawHeight = height * (MEASURE_SIZE / width)\n offsetY = -(drawHeight - drawWidth) / 2\n } else {\n drawWidth = width * (MEASURE_SIZE / height)\n offsetX = -(drawWidth - drawHeight) / 2\n }\n\n ctx!.drawImage(img, offsetX, offsetY, drawWidth, drawHeight)\n const dataURL = canvas.toDataURL()\n document.body.removeChild(canvas)\n\n resolve(dataURL)\n }\n img.crossOrigin = 'anonymous'\n if (file.type.startsWith('image/svg+xml')) {\n const reader = new FileReader()\n reader.addEventListener('load', () => {\n if (reader.result) img.src = reader.result as string\n })\n reader.readAsDataURL(file)\n } else {\n img.src = window.URL.createObjectURL(file)\n }\n })\n}\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { ItemRender, PreviewFileHandler, UploadFile, UploadListProgressProps, UploadListType, VueNode } from '../basic-upload'\nimport { isImageUrl, previewImage } from '../basic-upload/utils'\n\nexport const basicUploadListProps = {\n listType: {\n type: String as PropType<UploadListType>,\n default: 'text'\n },\n onPreview: Function as PropType<(file: UploadFile, e?: Event) => void>,\n onDownload: Function as PropType<(file: UploadFile<any>) => void>,\n onRemove: Function as PropType<(file: UploadFile<any>) => unknown | boolean>,\n items: {\n type: Array as PropType<Array<UploadFile<any>>>,\n default: () => []\n },\n progress: {\n type: Object as PropType<UploadListProgressProps>,\n default: () => ({\n strokeWidth: 2,\n showInfo: false\n })\n },\n showRemoveIcon: {\n type: Boolean,\n default: true\n },\n showDownloadIcon: {\n type: Boolean,\n default: false\n },\n showPreviewIcon: {\n type: Boolean,\n default: true\n },\n removeIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n downloadIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n previewIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n previewFile: {\n type: Function as PropType<PreviewFileHandler>,\n default: previewImage\n },\n iconRender: Function as PropType<(opt: { file: UploadFile<any>; listType?: UploadListType }) => VueNode>,\n isImageUrl: {\n type: Function as PropType<(file: UploadFile) => boolean>,\n default: isImageUrl\n },\n appendAction: Function as PropType<() => VueNode>,\n appendActionVisible: {\n type: Boolean,\n default: true\n },\n itemRender: Function as PropType<ItemRender<any>>\n}\n\nexport type BasicUploadListProps = ExtractPropTypes<typeof basicUploadListProps>\n\nexport interface BasicUploadListContext {\n name: string\n}\n","import { computed, defineComponent, onMounted, shallowRef, TransitionGroup, triggerRef, watch, watchEffect } from 'vue'\nimport { useLocale, useNamespace } from '../../composable'\nimport { collapseMotion, filterEmpty, getTransitionGroupProps } from '../../utils'\nimport { XBasicSvgIcon } from '../basic-svg-icon'\nimport type { UploadFile, VueNode } from '../basic-upload'\nimport { XBasicUploadListItem } from '../basic-upload-list-item'\nimport { basicUploadListProps } from './interface'\n\nconst HackSlot = (_: any, { slots }: { slots: any }) => {\n return filterEmpty(slots.default?.())[0]\n}\n\nexport default defineComponent({\n name: 'XBasicUploadList',\n props: basicUploadListProps,\n setup(props, { slots, expose }) {\n const { t } = useLocale()\n const motionAppear = shallowRef(false)\n onMounted(() => {\n motionAppear.value === true\n })\n const mergedItems = shallowRef<Array<UploadFile<any>>>([])\n watch(\n () => props.items,\n (val = []) => {\n mergedItems.value = val.slice()\n },\n {\n immediate: true,\n deep: true\n }\n )\n watchEffect(() => {\n if (props.listType !== 'picture' && props.listType !== 'picture-card') {\n return\n }\n let hasUpdate = false\n const items = props.items || []\n items.forEach((file, index) => {\n if (typeof document === 'undefined' || typeof window === 'undefined' || !(window as any).FileReader || !(window as any).File || !(file.originFileObj instanceof File || (file.originFileObj as unknown as Blob) instanceof Blob) || file.thumbUrl !== undefined) {\n return\n }\n file.thumbUrl = ''\n if (props.previewFile) {\n props.previewFile(file.originFileObj as File).then((previewDataUrl: string) => {\n // Need append '' to avoid dead loop\n const thumbUrl = previewDataUrl || ''\n if (thumbUrl !== file.thumbUrl) {\n mergedItems.value[index].thumbUrl = thumbUrl\n hasUpdate = true\n }\n })\n }\n })\n if (hasUpdate) {\n triggerRef(mergedItems)\n }\n })\n\n // ============================= Events =============================\n const onInternalPreview = (file: UploadFile, e?: Event) => {\n if (!props.onPreview) {\n return\n }\n e?.preventDefault()\n return props.onPreview(file)\n }\n\n const onInternalDownload = (file: UploadFile) => {\n if (typeof props.onDownload === 'function') {\n props.onDownload(file)\n } else if (file.url) {\n window.open(file.url)\n }\n }\n\n const onInternalClose = (file: UploadFile) => {\n props.onRemove?.(file)\n }\n\n const internalIconRender = ({ file }: { file: UploadFile }) => {\n const iconRender = props.iconRender || slots.iconRender\n if (iconRender) {\n return iconRender({ file, listType: props.listType })\n }\n const isLoading = file.status === 'uploading'\n const fileIcon =\n props.isImageUrl && props.isImageUrl(file) ? (\n <span class='anticon anticon-picture'>\n <XBasicSvgIcon icon='ri:image-fill' />\n </span>\n ) : (\n <span class='anticon anticon-file'>\n <XBasicSvgIcon icon='ri:file-fill' />\n </span>\n )\n let icon: VueNode = isLoading ? <XBasicSvgIcon icon='ri:loader-2-line' /> : <XBasicSvgIcon icon='ri:bookmark-line' />\n if (props.listType === 'picture') {\n icon = isLoading ? (\n <span class='anticon anticon-loading'>\n <XBasicSvgIcon icon='ri:loader-2-line' />\n </span>\n ) : (\n fileIcon\n )\n } else if (props.listType === 'picture-card') {\n icon = isLoading ? t('max.upload.uploading') : fileIcon\n }\n return icon\n }\n\n const actionIconRender = (opt: { customIcon: VueNode; callback: () => void; prefixCls: string; title?: string }) => {\n const { customIcon, callback, prefixCls, title } = opt\n\n return (\n <span title={title} onClick={callback} class={`${prefixCls}-action`}>\n {customIcon}\n </span>\n )\n }\n\n expose({\n handlePreview: onInternalPreview,\n handleDownload: onInternalDownload\n })\n\n const { b, namespace } = useNamespace('basic-upload-list')\n\n const prefixCls = computed(() => b())\n\n const listClassNames = computed(() => ({\n [`${prefixCls.value}`]: true,\n [`${prefixCls.value}-${props.listType}`]: true\n }))\n const transitionGroupProps = computed(() => {\n const motion = {\n ...collapseMotion(`${namespace.value}-motion-collapse`)\n }\n delete motion.onAfterAppear\n delete motion.onAfterEnter\n delete motion.onAfterLeave\n const motionConfig = {\n ...getTransitionGroupProps(`${prefixCls.value}-${props.listType === 'picture-card' ? 'animate-inline' : 'animate'}`),\n class: listClassNames.value,\n appear: motionAppear.value\n }\n return props.listType !== 'picture-card' ? { ...motion, ...motionConfig } : motionConfig\n })\n\n return () => {\n const { listType, isImageUrl: isImgUrl, showPreviewIcon, showRemoveIcon, showDownloadIcon, removeIcon, previewIcon, downloadIcon, progress, appendAction, itemRender, appendActionVisible } = props\n const appendActionDom = appendAction?.()\n const items = mergedItems.value\n return (\n <TransitionGroup {...transitionGroupProps.value} tag='div'>\n {items.map(file => {\n const { uid: key } = file\n return (\n <XBasicUploadListItem\n key={key}\n file={file}\n items={items}\n progress={progress}\n listType={listType}\n isImgUrl={isImgUrl}\n showPreviewIcon={showPreviewIcon}\n showRemoveIcon={showRemoveIcon}\n showDownloadIcon={showDownloadIcon}\n onPreview={onInternalPreview}\n onDownload={onInternalDownload}\n onClose={onInternalClose}\n removeIcon={removeIcon}\n previewIcon={previewIcon}\n downloadIcon={downloadIcon}\n itemRender={itemRender}\n v-slots={{\n ...slots,\n iconRender: internalIconRender,\n actionIconRender\n }}\n />\n )\n })}\n {appendAction ? <HackSlot key='__ant_upload_appendAction' v-show={Boolean(appendActionVisible)} v-slots={{ default: () => appendActionDom }}></HackSlot> : null}\n </TransitionGroup>\n )\n }\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicUploadList from './BasicUploadList'\n\nexport const XBasicUploadList: SFCWithInstall<typeof BasicUploadList> = withInstall(BasicUploadList)\nexport type BasicUploadListInstance = InstanceType<typeof BasicUploadList>\n\nexport default XBasicUploadList\n\nexport * from './interface'\n","import type { CSSProperties, ExtractPropTypes, ImgHTMLAttributes, PropType, VNode } from 'vue'\nimport type { ProgressProps } from 'naive-ui'\nimport type { UploadProgressEvent } from '../basic-upload-core'\nimport type { RcFile as OriRcFile, UploadRequestOption as RcCustomRequestOptions } from '../basic-upload-core/interface'\n\nexport const basicUploadProps = {\n capture: [Boolean, String] as PropType<boolean | 'user' | 'environment'>,\n type: {\n type: String as PropType<UploadType>,\n default: 'select'\n },\n name: String,\n defaultFileList: Array as PropType<Array<UploadFile<any>>>,\n fileList: Array as PropType<Array<UploadFile<any>>>,\n action: {\n type: [String, Function] as PropType<string | ((file: FileType) => string) | ((file: FileType) => PromiseLike<string>)>,\n default: ''\n },\n directory: Boolean,\n data: {\n type: [Object, Function] as PropType<Record<string, unknown> | ((file: UploadFile<any>) => Record<string, unknown> | Promise<Record<string, unknown>>)>,\n default: () => ({})\n },\n method: {\n type: String as PropType<'POST' | 'PUT' | 'PATCH' | 'post' | 'put' | 'patch'>,\n default: 'POST'\n },\n headers: Object as PropType<HttpRequestHeader>,\n showUploadList: {\n type: [Boolean, Object] as PropType<boolean | ShowUploadListInterface>,\n default: true\n },\n multiple: {\n type: Boolean,\n default: false\n },\n accept: {\n type: [String, Array] as PropType<string | string[]>,\n default: ''\n },\n beforeUpload: Function as PropType<(file: FileType, FileList: FileType[]) => BeforeUploadValueType | Promise<BeforeUploadValueType>>,\n onChange: Function as PropType<(info: UploadChangeParam<UploadFile<any>>) => void>,\n 'onUpdate:fileList': Function as PropType<(fileList: UploadChangeParam<UploadFile<any>>['fileList']) => void>,\n onDrop: Function as PropType<(event: DragEvent) => void>,\n listType: {\n type: String as PropType<UploadListType>,\n default: 'text'\n },\n onPreview: Function as PropType<(file: UploadFile<any>) => void>,\n onDownload: Function as PropType<(file: UploadFile<any>) => void>,\n onReject: Function as PropType<(fileList: FileType[]) => void>,\n onRemove: Function as PropType<(file: UploadFile<any>) => unknown | boolean | Promise<unknown | boolean>>,\n remove: Function as PropType<(file: UploadFile<any>) => unknown | boolean | Promise<unknown | boolean>>,\n supportServerRender: {\n type: Boolean,\n default: true\n },\n disabled: Boolean,\n prefixCls: String,\n customRequest: Function as PropType<(options: RcCustomRequestOptions) => void>,\n withCredentials: Boolean,\n openFileDialogOnClick: {\n type: Boolean,\n default: true\n },\n id: String,\n previewFile: Function as PropType<PreviewFileHandler>,\n transformFile: Function as PropType<TransformFileHandler>,\n iconRender: Function as PropType<(opt: { file: UploadFile<any>; listType?: UploadListType }) => VueNode>,\n isImageUrl: Function as PropType<(file: UploadFile) => boolean>,\n progress: Object as PropType<UploadListProgressProps>,\n itemRender: Function as PropType<ItemRender<any>>,\n maxCount: Number,\n height: [Number, String],\n removeIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n downloadIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n previewIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>\n}\n\nexport type BasicUploadProps = ExtractPropTypes<typeof basicUploadProps>\n\nexport interface BasicUploadContext {\n name: string\n}\n\ntype VNodeChildAtom = VNode | string | number | boolean | null | undefined\nexport type VueNode = VNodeChildAtom | VNodeChildAtom[] | VNode\n\nexport interface FileType extends OriRcFile {\n readonly lastModifiedDate?: Date\n}\n\nexport type UploadFileStatus = 'error' | 'success' | 'done' | 'uploading' | 'removed'\n\nexport interface HttpRequestHeader {\n [key: string]: string\n}\n\nexport interface UploadFile<T = any> {\n uid: string\n size?: number\n name: string\n fileName?: string\n lastModified?: number\n lastModifiedDate?: Date\n url?: string\n status?: UploadFileStatus\n percent?: number\n thumbUrl?: string\n crossOrigin?: ImgHTMLAttributes['crossorigin']\n originFileObj?: FileType\n response?: T\n error?: any\n linkProps?: any\n type?: string\n xhr?: T\n preview?: string\n}\n\nexport interface InternalUploadFile<T = any> extends UploadFile<T> {\n originFileObj: FileType\n}\n\nexport interface ShowUploadListInterface {\n showRemoveIcon?: boolean\n showPreviewIcon?: boolean\n showDownloadIcon?: boolean\n}\n\nexport interface UploadChangeParam<T = UploadFile> {\n // https://github.com/ant-design/ant-design/issues/14420\n file: T\n fileList: T[]\n event?: UploadProgressEvent\n}\n\nexport type UploadType = 'drag' | 'select'\nexport type UploadListType = 'text' | 'picture' | 'picture-card'\nexport type UploadListProgressProps = Omit<ProgressProps, 'percentage' | 'type'> & {\n class?: string\n style?: CSSProperties\n}\n\nexport type ItemRender<T = any> = (opt: {\n originNode: VueNode\n file: UploadFile\n fileList: Array<UploadFile<T>>\n actions: {\n download: () => void\n preview: () => void\n remove: () => void\n }\n}) => VueNode\n\nexport type PreviewFileHandler = (file: FileType | Blob) => PromiseLike<string>\nexport type TransformFileHandler = (file: FileType) => string | Blob | FileType | PromiseLike<string | Blob | FileType>\nexport type BeforeUploadValueType = boolean | string | Blob | FileType\n\nexport interface UploadState<T = any> {\n fileList: Array<UploadFile<T>>\n dragState: string\n}\n","import type { CSSProperties } from 'vue'\nimport { computed, defineComponent, ref, toRef } from 'vue'\nimport { classNames } from '@maxax/utils'\nimport { useMergedState, useNamespace } from '../../composable'\nimport { flattenChildren } from '../../utils'\nimport type { UploadProgressEvent, UploadProps as RcUploadProps } from '../basic-upload-core'\nimport { XBasicUploadCore } from '../basic-upload-core'\nimport { XBasicUploadList } from '../basic-upload-list'\nimport type { FileType, ShowUploadListInterface, UploadChangeParam, UploadFile, VueNode } from './interface'\nimport { basicUploadProps } from './interface'\nimport { file2Obj, getFileItem, removeFileItem, updateFileList } from './utils'\n\nexport const LIST_IGNORE = `__LIST_IGNORE_${Date.now()}__`\n\nexport default defineComponent({\n compatConfig: { MODE: 3 },\n name: 'XBasicUpload',\n inheritAttrs: false,\n props: basicUploadProps,\n setup(props, { slots, attrs, expose }) {\n const { b } = useNamespace('basic-upload')\n\n const prefixCls = computed(() => b())\n\n const mergedDisabled = computed(() => props.disabled)\n\n const [mergedFileList, setMergedFileList] = useMergedState(props.defaultFileList || [], {\n value: toRef(props, 'fileList'),\n postState: list => {\n const timestamp = Date.now()\n return (list ?? []).map((file, index) => {\n if (!file.uid && !Object.isFrozen(file)) {\n file.uid = `__AUTO__${timestamp}_${index}__`\n }\n return file\n })\n }\n })\n const dragState = ref('drop')\n\n const upload = ref()\n\n const onInternalChange = (file: UploadFile, changedFileList: UploadFile[], event?: UploadProgressEvent) => {\n let cloneList = [...changedFileList]\n\n // Cut to match count\n if (props.maxCount === 1) {\n cloneList = cloneList.slice(-1)\n } else if (props.maxCount) {\n cloneList = cloneList.slice(0, props.maxCount)\n }\n\n setMergedFileList(cloneList)\n\n const changeInfo: UploadChangeParam<UploadFile> = {\n file: file as UploadFile,\n fileList: cloneList\n }\n\n if (event) {\n changeInfo.event = event\n }\n props['onUpdate:fileList']?.(changeInfo.fileList)\n props.onChange?.(changeInfo)\n }\n\n const mergedBeforeUpload = async (file: FileType, fileListArgs: FileType[]) => {\n const { beforeUpload, transformFile } = props\n let parsedFile: FileType | Blob | string = file\n if (beforeUpload) {\n const result = await beforeUpload(file, fileListArgs)\n\n if (result === false) {\n return false\n }\n\n // Hack for LIST_IGNORE, we add additional info to remove from the list\n delete (file as any)[LIST_IGNORE]\n if ((result as any) === LIST_IGNORE) {\n Object.defineProperty(file, LIST_IGNORE, {\n value: true,\n configurable: true\n })\n return false\n }\n\n if (typeof result === 'object' && result) {\n parsedFile = result as File\n }\n }\n\n if (transformFile) {\n parsedFile = await transformFile(parsedFile as any)\n }\n\n return parsedFile as File\n }\n\n const onBatchStart: RcUploadProps['onBatchStart'] = batchFileInfoList => {\n // Skip file which marked as `LIST_IGNORE`, these file will not add to file list\n const filteredFileInfoList = batchFileInfoList.filter(info => !(info.file as any)[LIST_IGNORE])\n\n // Nothing to do since no file need upload\n if (!filteredFileInfoList.length) {\n return\n }\n\n const objectFileList = filteredFileInfoList.map(info => file2Obj(info.file as FileType))\n\n // Concat new files with prev files\n let newFileList = [...(mergedFileList.value ?? [])]\n\n objectFileList.forEach(fileObj => {\n // Replace file if exist\n newFileList = updateFileList(fileObj, newFileList)\n })\n\n objectFileList.forEach((fileObj, index) => {\n // Repeat trigger `onChange` event for compatible\n let triggerFileObj: UploadFile = fileObj\n\n if (!filteredFileInfoList[index].parsedFile) {\n // `beforeUpload` return false\n const { originFileObj } = fileObj\n let clone\n\n try {\n clone = new File([originFileObj], originFileObj.name, {\n type: originFileObj.type\n }) as any as UploadFile\n } catch (e) {\n console.warn(e)\n clone = new Blob([originFileObj], {\n type: originFileObj.type\n }) as any as UploadFile\n clone.name = originFileObj.name\n clone.lastModifiedDate = new Date()\n clone.lastModified = new Date().getTime()\n }\n\n clone.uid = fileObj.uid\n triggerFileObj = clone\n } else {\n // Inject `uploading` status\n fileObj.status = 'uploading'\n }\n\n onInternalChange(triggerFileObj, newFileList)\n })\n }\n\n const onSuccess = (response: any, file: FileType, xhr: any) => {\n try {\n if (typeof response === 'string') {\n response = JSON.parse(response)\n }\n } catch (e) {\n console.warn(e)\n }\n\n // removed\n if (!getFileItem(file, mergedFileList.value ?? [])) {\n return\n }\n\n const targetItem = file2Obj(file)\n targetItem.status = 'done'\n targetItem.percent = 100\n targetItem.response = response\n targetItem.xhr = xhr\n\n const nextFileList = updateFileList(targetItem, mergedFileList.value ?? [])\n\n onInternalChange(targetItem, nextFileList)\n }\n\n const onProgress = (e: UploadProgressEvent, file: FileType) => {\n // removed\n if (!getFileItem(file, mergedFileList.value ?? [])) {\n return\n }\n\n const targetItem = file2Obj(file)\n targetItem.status = 'uploading'\n targetItem.percent = e.percent\n\n const nextFileList = updateFileList(targetItem, mergedFileList.value ?? [])\n\n onInternalChange(targetItem, nextFileList, e)\n }\n\n const onError = (error: Error, response: any, file: FileType) => {\n // removed\n if (!getFileItem(file, mergedFileList.value ?? [])) {\n return\n }\n\n const targetItem = file2Obj(file)\n targetItem.error = error\n targetItem.response = response\n targetItem.status = 'error'\n\n const nextFileList = updateFileList(targetItem, mergedFileList.value ?? [])\n\n onInternalChange(targetItem, nextFileList)\n }\n\n const handleRemove = (file: UploadFile) => {\n let currentFile: UploadFile\n const mergedRemove = props.onRemove || props.remove\n Promise.resolve(typeof mergedRemove === 'function' ? mergedRemove(file) : mergedRemove).then(ret => {\n // Prevent removing file\n if (ret === false) {\n return\n }\n\n const removedFileList = removeFileItem(file, mergedFileList.value ?? [])\n\n if (removedFileList) {\n currentFile = { ...file, status: 'removed' }\n mergedFileList.value?.forEach(item => {\n const matchKey = currentFile.uid !== undefined ? 'uid' : 'name'\n if (item[matchKey] === currentFile[matchKey] && !Object.isFrozen(item)) {\n item.status = 'removed'\n }\n })\n upload.value?.abort(currentFile)\n\n onInternalChange(currentFile, removedFileList)\n }\n })\n }\n\n const onFileDrop = (e: DragEvent) => {\n dragState.value = e.type\n if (e.type === 'drop') {\n props.onDrop?.(e)\n }\n }\n expose({\n onBatchStart,\n onSuccess,\n onProgress,\n onError,\n fileList: mergedFileList,\n upload,\n LIST_IGNORE\n })\n\n const renderUploadList = (button?: () => VueNode, buttonVisible?: boolean) => {\n const { removeIcon, previewIcon, downloadIcon, previewFile, onPreview, onDownload, isImageUrl, progress, itemRender, iconRender, showUploadList } = props\n const { showDownloadIcon, showPreviewIcon, showRemoveIcon } = typeof showUploadList === 'boolean' ? ({} as ShowUploadListInterface) : (showUploadList as ShowUploadListInterface)\n return showUploadList ? (\n <XBasicUploadList\n listType={props.listType}\n items={mergedFileList.value}\n previewFile={previewFile}\n onPreview={onPreview}\n onDownload={onDownload}\n onRemove={handleRemove}\n showRemoveIcon={!mergedDisabled.value && showRemoveIcon}\n showPreviewIcon={showPreviewIcon}\n showDownloadIcon={showDownloadIcon}\n removeIcon={removeIcon}\n previewIcon={previewIcon}\n downloadIcon={downloadIcon}\n iconRender={iconRender}\n isImageUrl={isImageUrl}\n progress={progress}\n itemRender={itemRender}\n appendActionVisible={buttonVisible}\n appendAction={button}\n v-slots={{ ...slots }}\n />\n ) : (\n button?.()\n )\n }\n\n return () => {\n const { listType, type } = props\n const { class: className, style: styleName, ...transAttrs } = attrs\n const rcUploadProps = {\n onBatchStart,\n onError,\n onProgress,\n onSuccess,\n ...transAttrs,\n ...(props as RcUploadProps),\n id: props.id,\n prefixCls: prefixCls.value,\n beforeUpload: mergedBeforeUpload,\n onChange: undefined,\n disabled: mergedDisabled.value\n }\n delete (rcUploadProps as any).remove\n\n if (!slots.default || mergedDisabled.value) {\n delete rcUploadProps.id\n }\n\n const rtlCls = {\n [`${prefixCls.value}-rtl`]: false\n }\n\n if (type === 'drag') {\n const dragCls = classNames(\n {\n [`${prefixCls.value}-dragger`]: true,\n [`${prefixCls.value}-dragger-uploading`]: mergedFileList.value?.some(file => file.status === 'uploading'),\n [`${prefixCls.value}-dragger-hover`]: dragState.value === 'dragover',\n [`${prefixCls.value}-dragger-disabled`]: mergedDisabled.value,\n [`${prefixCls.value}-dragger-rtl`]: false\n },\n attrs.class\n )\n\n return (\n <span {...attrs} class={classNames(rtlCls, className)}>\n <div class={dragCls} onDrop={onFileDrop} onDragover={onFileDrop} onDragleave={onFileDrop} style={attrs.style as CSSProperties}>\n <XBasicUploadCore {...rcUploadProps} ref={upload} class={`${prefixCls.value}-dragger-btn`} v-slots={slots}>\n <div class={`${prefixCls.value}-dragger-container`}>{slots.default?.()}</div>\n </XBasicUploadCore>\n </div>\n {renderUploadList()}\n </span>\n )\n }\n\n const uploadButtonCls = classNames(prefixCls.value, {\n [`${prefixCls.value}-select`]: true,\n [`${prefixCls.value}-select-${listType}`]: true,\n [`${prefixCls.value}-disabled`]: mergedDisabled.value,\n [`${prefixCls.value}-rtl`]: false\n })\n const children = flattenChildren(slots.default?.())\n\n const renderUploadButton = (uploadButtonStyle?: CSSProperties) => (\n <div class={uploadButtonCls} style={uploadButtonStyle}>\n <XBasicUploadCore {...rcUploadProps} ref={upload} v-slots={slots} />\n </div>\n )\n if (listType === 'picture-card') {\n return (\n <span {...attrs} class={classNames(`${prefixCls.value}`, `${prefixCls.value}-picture-card-wrapper`, rtlCls, attrs.class)}>\n {renderUploadList(renderUploadButton, Boolean(children && children.length))}\n </span>\n )\n }\n return (\n <span {...attrs} class={classNames(`${prefixCls.value}`, rtlCls, attrs.class)}>\n {renderUploadButton(children && children.length ? undefined : { display: 'none' })}\n {renderUploadList()}\n </span>\n )\n }\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicUpload, { LIST_IGNORE } from './BasicUpload'\n\nexport { LIST_IGNORE }\n\nexport const XBasicUpload: SFCWithInstall<typeof BasicUpload> = withInstall(BasicUpload)\nexport type BasicUploadInstance = InstanceType<typeof BasicUpload>\n\nexport default XBasicUpload\n\nexport * from './interface'\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport type { BeforeUploadValueType, FileType, HttpRequestHeader, ItemRender, PreviewFileHandler, ShowUploadListInterface, TransformFileHandler, UploadChangeParam, UploadFile, UploadListProgressProps, UploadListType, UploadType, VueNode } from '../basic-upload'\nimport type { UploadRequestOption as RcCustomRequestOptions } from '../basic-upload-core/interface'\n\nexport const basicUploadDraggerProps = {\n capture: [Boolean, String] as PropType<boolean | 'user' | 'environment'>,\n type: String as PropType<UploadType>,\n name: String,\n defaultFileList: Array as PropType<Array<UploadFile<any>>>,\n fileList: Array as PropType<Array<UploadFile<any>>>,\n action: [String, Function] as PropType<string | ((file: FileType) => string) | ((file: FileType) => PromiseLike<string>)>,\n directory: Boolean,\n data: [Object, Function] as PropType<Record<string, unknown> | ((file: UploadFile<any>) => Record<string, unknown> | Promise<Record<string, unknown>>)>,\n method: String as PropType<'POST' | 'PUT' | 'PATCH' | 'post' | 'put' | 'patch'>,\n headers: Object as PropType<HttpRequestHeader>,\n showUploadList: [Boolean, Object] as PropType<boolean | ShowUploadListInterface>,\n multiple: Boolean,\n accept: String,\n beforeUpload: Function as PropType<(file: FileType, FileList: FileType[]) => BeforeUploadValueType | Promise<BeforeUploadValueType>>,\n onChange: Function as PropType<(info: UploadChangeParam<UploadFile<any>>) => void>,\n 'onUpdate:fileList': Function as PropType<(fileList: UploadChangeParam<UploadFile<any>>['fileList']) => void>,\n onDrop: Function as PropType<(event: DragEvent) => void>,\n listType: String as PropType<UploadListType>,\n onPreview: Function as PropType<(file: UploadFile<any>) => void>,\n onDownload: Function as PropType<(file: UploadFile<any>) => void>,\n onReject: Function as PropType<(fileList: FileType[]) => void>,\n onRemove: Function as PropType<(file: UploadFile<any>) => boolean | Promise<undefined | boolean>>,\n /** @deprecated Please use `onRemove` directly */\n remove: Function as PropType<(file: UploadFile<any>) => boolean | Promise<undefined | boolean>>,\n supportServerRender: Boolean,\n disabled: Boolean,\n prefixCls: String,\n customRequest: Function as PropType<(options: RcCustomRequestOptions) => void>,\n withCredentials: Boolean,\n openFileDialogOnClick: {\n type: Boolean,\n default: true\n },\n id: String,\n previewFile: Function as PropType<PreviewFileHandler>,\n transformFile: Function as PropType<TransformFileHandler>,\n iconRender: Function as PropType<(opt: { file: UploadFile<any>; listType?: UploadListType }) => VueNode>,\n isImageUrl: Function as PropType<(file: UploadFile) => boolean>,\n progress: Object as PropType<UploadListProgressProps>,\n itemRender: Function as PropType<ItemRender<any>>,\n maxCount: Number,\n height: [Number, String],\n removeIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n downloadIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>,\n previewIcon: Function as PropType<(opt: { file: UploadFile }) => VueNode>\n}\n\nexport type BasicUploadDraggerProps = ExtractPropTypes<typeof basicUploadDraggerProps>\n\nexport interface BasicUploadDraggerContext {\n name: string\n}\n","import { defineComponent } from 'vue'\nimport XBasicUpload from '../basic-upload'\nimport { basicUploadDraggerProps } from './interface'\n\nexport default defineComponent({\n compatConfig: { MODE: 3 },\n name: 'XBasicUploadDragger',\n inheritAttrs: false,\n props: basicUploadDraggerProps,\n setup(props, { slots, attrs }) {\n return () => {\n const { height, ...restProps } = props\n const { style, ...restAttrs } = attrs\n\n const draggerProps = {\n ...restProps,\n ...restAttrs,\n type: 'drag',\n style: { ...(style as any), height: typeof height === 'number' ? `${height}px` : height }\n } as any\n\n return <XBasicUpload {...draggerProps} v-slots={slots}></XBasicUpload>\n }\n }\n})\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicUploadDragger from './BasicUploadDragger'\n\nexport const XBasicUploadDragger: SFCWithInstall<typeof BasicUploadDragger> = withInstall(BasicUploadDragger)\nexport type BasicUploadDraggerInstance = InstanceType<typeof BasicUploadDragger>\n\nexport default XBasicUploadDragger\n\nexport * from './interface'\n","<script lang=\"ts\" setup>\nimport { computed, nextTick, onMounted, ref } from 'vue'\nimport elementResizeDetectorMaker from 'element-resize-detector'\nimport { useLocale, useNamespace } from '../../composable'\nimport { XBasicSvgIcon } from '../basic-svg-icon'\nimport type { BasicViewBarProps } from './interface'\n\nconst props = defineProps<BasicViewBarProps>()\nconst { b, e, is } = useNamespace('basic-view-bar')\nconst { t } = useLocale()\nconst navWrap = ref<HTMLElement>()\nconst navScroll = ref<HTMLElement>()\n\nconst scrollable = ref(false)\n\nconst getClasses = computed(() => {\n return {\n [b()]: true,\n [is('fix')]: props.fixed\n }\n})\n\nconst getChangeStyle = computed(() => {\n return {\n left: 0,\n width: '100%',\n maxWidth: props.maxWidth || '100%'\n }\n})\n\n/**\n * @param value 要滚动到的位置\n * @param amplitude 每次滚动的长度\n */\nfunction scrollTo(value: number, amplitude: number) {\n if (!navScroll.value) return\n const currentScroll = navScroll.value.scrollLeft\n const scrollWidth = (amplitude > 0 && currentScroll + amplitude >= value) || (amplitude < 0 && currentScroll + amplitude <= value) ? value : currentScroll + amplitude\n navScroll.value.scrollTo(scrollWidth, 0)\n if (scrollWidth === value) return\n return window.requestAnimationFrame(() => scrollTo(value, amplitude))\n}\n\nfunction scrollPrev() {\n if (!navScroll.value) return\n const containerWidth = navScroll.value.offsetWidth\n const currentScroll = navScroll.value.scrollLeft\n\n if (!currentScroll) return\n const scrollLeft = currentScroll > containerWidth ? currentScroll - containerWidth : 0\n scrollTo(scrollLeft, (scrollLeft - currentScroll) / 20)\n}\n\nfunction scrollNext() {\n if (!navScroll.value) return\n const containerWidth = navScroll.value.offsetWidth\n const navWidth = navScroll.value.scrollWidth\n const currentScroll = navScroll.value.scrollLeft\n\n if (navWidth - currentScroll <= containerWidth) return\n const scrollLeft = navWidth - currentScroll > containerWidth * 2 ? currentScroll + containerWidth : navWidth - containerWidth\n scrollTo(scrollLeft, (scrollLeft - currentScroll) / 20)\n}\n\n/**\n * @param autoScroll 是否开启自动滚动功能\n */\nasync function updateNavScroll(autoScroll?: boolean) {\n await nextTick()\n if (!navScroll.value) return\n const containerWidth = navScroll.value.offsetWidth\n const navWidth = navScroll.value.scrollWidth\n\n if (containerWidth < navWidth) {\n scrollable.value = true\n if (autoScroll) {\n // 自动滚动\n }\n } else {\n scrollable.value = false\n }\n}\n\nfunction handleResize() {\n updateNavScroll(true)\n}\n\nfunction onElementResize() {\n const observer = elementResizeDetectorMaker()\n navWrap.value && observer.listenTo(navWrap.value, handleResize)\n}\n\nonMounted(() => {\n onElementResize()\n})\n</script>\n\n<template>\n <div :class=\"getClasses\" :style=\"getChangeStyle\">\n <div :class=\"e('main')\">\n <div ref=\"navWrap\" :class=\"{ [is('scrollable')]: scrollable, [e('wrap')]: true }\">\n <div :class=\"{ [is('hide')]: !scrollable, [e('prev')]: true }\" :title=\"t('max.viewBar.prev')\" @click=\"scrollPrev\">\n <XBasicSvgIcon icon=\"ri:arrow-left-s-line\" />\n </div>\n <div :class=\"{ [is('hide')]: !scrollable, [e('next')]: true }\" :title=\"t('max.viewBar.next')\" @click=\"scrollNext\">\n <XBasicSvgIcon icon=\"ri:arrow-right-s-line\" />\n </div>\n <div ref=\"navScroll\" :class=\"e('scroll')\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport BasicViewBar from './BasicViewBar.vue'\n\nexport const XBasicViewBar: SFCWithInstall<typeof BasicViewBar> = withInstall(BasicViewBar)\nexport type BasicViewBarInstance = InstanceType<typeof BasicViewBar>\n\nexport default XBasicViewBar\n\nexport * from './interface'\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'CLoadingIcon'\n})\n</script>\n\n<template>\n <svg viewBox=\"0 0 50 50\">\n <circle class=\"imax-loading-icon__circle\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"5\" stroke-miterlimit=\"10\" />\n </svg>\n</template>\n","/* eslint-disable @typescript-eslint/naming-convention */\n// #region ignoreMode\nexport enum ignoreEnum {\n none = 'none',\n parents = 'parents',\n children = 'children'\n}\n// #endregion ignoreMode\n\n// #region API\n// Tree API\nexport const TREE_API_METHODS = [\n 'setData',\n 'setChecked',\n 'setCheckedKeys',\n 'checkAll',\n 'clearChecked',\n 'setSelected',\n 'clearSelected',\n 'setExpand',\n 'setExpandKeys',\n 'setExpandAll',\n 'getCheckedNodes',\n 'getCheckedKeys',\n 'getIndeterminateNodes',\n 'getSelectedNode',\n 'getSelectedKey',\n 'getExpandNodes',\n 'getExpandKeys',\n 'getCurrentVisibleNodes',\n 'getNode',\n 'getTreeData',\n 'getFlatData',\n 'getNodesCount',\n 'insertBefore',\n 'insertAfter',\n 'append',\n 'prepend',\n 'remove',\n 'filter',\n 'showCheckedNodes',\n 'loadRootNodes',\n 'updateNode',\n 'updateNodes',\n 'scrollTo'\n] as const\n\n// #region Scroll position\nexport enum verticalPositionEnum {\n top = 'top',\n center = 'center',\n bottom = 'bottom'\n}\n\nexport type VerticalPositionType = keyof typeof verticalPositionEnum\n// #endregion Scroll position\n\n// #region Drag\nexport enum dragHoverPartEnum {\n before = 'before',\n body = 'body',\n after = 'after'\n}\n// #endregion Drag\n\nexport enum showLineType {\n // Dotted = 'dotted',\n dashed = 'dashed',\n solid = 'solid'\n}\n\nexport const DEFAULT_TREE_PROPS = {\n showLeftArrow: false,\n showRightArrow: true,\n data: () => [],\n unloadDataList: () => [],\n showUnloadCheckedNodes: true,\n emptyText: '暂无数据',\n titleField: 'title',\n keyField: 'id',\n separator: ',',\n checkable: false,\n selectable: false,\n filteredNodeCheckable: false,\n cascade: true,\n enableLeafOnly: false,\n disableAll: false,\n defaultExpandAll: false,\n defaultExpandedKeys: () => [],\n expandedKeys: () => [],\n draggable: false,\n droppable: false,\n beforeDropMethod: () => () => true,\n ignoreMode: ignoreEnum.none,\n autoLoad: true,\n expandOnFilter: true,\n unselectOnClick: true,\n loading: false,\n\n nodeMinHeight: 30,\n nodeIndent: 20,\n renderNodeAmount: 100,\n bufferNodeAmount: 20\n}\n","import type { IEventNames } from '../interface'\n\nexport const TREE_NODE_EVENTS = ['expand', 'check', 'click', 'select', 'node-dblclick', 'node-right-click', 'node-dragstart', 'node-dragenter', 'node-dragover', 'node-dragleave', 'node-drop']\n\nexport const STORE_EVENTS: Array<keyof IEventNames> = ['expand', 'select', 'unselect', 'selected-change', 'check', 'uncheck', 'checked-change', 'set-data']\n\nexport const TREE_EVENTS = [...TREE_NODE_EVENTS, ...STORE_EVENTS]\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport { useNamespace } from '../../../composable'\nimport type { TreeNodeProps } from '../interface'\n\nexport const useTreeNodeCls = (\n props: TreeNodeProps,\n dragoverRefs: {\n dragoverBody: Ref<boolean>\n dragoverBefore: Ref<boolean>\n dragoverAfter: Ref<boolean>\n }\n) => {\n const { dragoverBody, dragoverBefore, dragoverAfter } = dragoverRefs\n\n const { b } = useNamespace('tree-node')\n\n const prefixCls = b()\n\n const indentWrapperCls = computed(() => {\n return [`${prefixCls}__indent-wrapper`, { [`${prefixCls}-active`]: props.data?.selected }]\n })\n const wrapperCls = computed(() => {\n return [\n `${prefixCls}__wrapper`,\n {\n [`${prefixCls}__wrapper_is-leaf`]: props.data?.isLeaf,\n [`${prefixCls}_disabled`]: props.disableAll || props.data?.disabled\n },\n // 复选\n {\n [`${prefixCls}_checked`]: props.checkable && props.data?.checked,\n [`${prefixCls}_indeterminate`]: props.checkable && props.data?.indeterminate\n },\n // 单选\n {\n [`${prefixCls}_selected`]: props.data?.selected\n }\n ]\n })\n const nodeBodyCls = computed(() => {\n return [\n `${prefixCls}__node-body`,\n {\n [`${prefixCls}__drop_active`]: dragoverBody.value\n }\n ]\n })\n const dropBeforeCls = computed(() => {\n return [\n `${prefixCls}__drop`,\n {\n [`${prefixCls}__drop_active`]: dragoverBefore.value\n }\n ]\n })\n const dropAfterCls = computed(() => {\n return [\n `${prefixCls}__drop`,\n {\n [`${prefixCls}__drop_active`]: dragoverAfter.value\n }\n ]\n })\n const squareCls = computed(() => {\n return [`${prefixCls}__square`]\n })\n // 复选框图标\n const checkboxWrapperCls = computed(() => {\n return [`${prefixCls}__square`, `${prefixCls}__checkbox_wrapper`]\n })\n const expandCls = computed(() => {\n return [\n `${prefixCls}__square`,\n `${prefixCls}__expand`,\n {\n [`${prefixCls}__expand_active`]: props.data?.expand\n }\n ]\n })\n const loadingIconCls = computed(() => {\n return [`${prefixCls}__loading-icon`]\n })\n const checkboxCls = computed(() => {\n return [\n `${prefixCls}__checkbox`,\n {\n [`${prefixCls}__checkbox_checked`]: props.data?.checked,\n [`${prefixCls}__checkbox_indeterminate`]: props.data?.indeterminate,\n [`${prefixCls}__checkbox_disabled`]: props.disableAll || props.data?.disabled\n }\n ]\n })\n const titleCls = computed(() => {\n return [\n `${prefixCls}__title`,\n {\n [`${prefixCls}__title_selected`]: props.data?.selected,\n [`${prefixCls}__title_disabled`]: props.disableAll || props.data?.disabled\n }\n ]\n })\n\n return {\n squareCls,\n indentWrapperCls,\n wrapperCls,\n nodeBodyCls,\n dropBeforeCls,\n dropAfterCls,\n checkboxWrapperCls,\n expandCls,\n loadingIconCls,\n checkboxCls,\n titleCls\n }\n}\n","<!-- eslint-disable vue/component-api-style -->\n<!-- eslint-disable no-underscore-dangle -->\n<!-- eslint-disable vue/custom-event-name-casing -->\n<script setup lang=\"ts\">\nimport { computed, defineComponent, getCurrentInstance, h, ref } from 'vue'\nimport LoadingIcon from '../tree/components/LoadingIcon.vue'\nimport { dragHoverPartEnum, showLineType } from '../tree/constants'\nimport { TREE_NODE_EVENTS } from '../tree/constants/events'\nimport type { ShowLine } from '../tree/interface'\nimport type { TreeNode } from '../tree/store'\nimport { useTreeNodeCls } from './composable'\nimport type { TreeNodeProps } from './interface'\n\ndefineOptions({\n name: 'VTreeNode'\n})\n\nconst props = defineProps<TreeNodeProps>()\n\n// eslint-disable-next-line vue/define-emits-declaration\nconst emit = defineEmits([...TREE_NODE_EVENTS])\n\nconst dragoverBody = ref(false)\nconst dragoverBefore = ref(false)\nconst dragoverAfter = ref(false)\n\nconst showLineParams = computed(() => {\n const defaultParams: Required<ShowLine> = {\n width: 1,\n type: showLineType.solid,\n color: '#D3D3D3',\n polyline: false,\n dashDensity: 3\n }\n let params: Required<ShowLine> = defaultParams\n if (typeof props.showLine === 'object') {\n let dashDensity = defaultParams.dashDensity\n if (typeof props.showLine.dashDensity === 'number' && props.showLine.dashDensity >= 1 && props.showLine.dashDensity <= 10) {\n dashDensity = props.showLine.dashDensity\n }\n\n params = {\n width: props.showLine.width ?? defaultParams.width,\n type: props.showLine.type ?? defaultParams.type,\n color: props.showLine.color ?? defaultParams.color,\n polyline: props.showLine.polyline ?? defaultParams.polyline,\n dashDensity\n }\n }\n return params\n})\n\nconst strokeWidth = computed(() => (showLineParams.value.width * 100) / props.nodeIndent)\n\nconst strokeDasharray = computed(() => {\n switch (showLineParams.value.type) {\n case showLineType.dashed:\n return 100 / (showLineParams.value.dashDensity * 2)\n default:\n break\n }\n return 'none'\n})\n\nconst polylinePoints = (isDirectParentLine: boolean) => {\n if (!showLineParams.value.polyline || !isDirectParentLine) return 'M50,0 L50,100'\n const parent = props.getNode(props.data[props.keyField])?._parent\n if (parent && props.noSiblingNodeMap[parent[props.keyField]] && props.noSiblingNodeMap[props.data[props.keyField]]) return 'M50,0 L50,50 M100,50 L50,50'\n return 'M50,0 L50,100 M100,50 L50,50'\n}\n\nconst { indentWrapperCls, wrapperCls, nodeBodyCls, dropBeforeCls, dropAfterCls, checkboxWrapperCls, expandCls, loadingIconCls, checkboxCls, titleCls } = useTreeNodeCls(props, {\n dragoverBody,\n dragoverBefore,\n dragoverAfter\n})\n\nconst fullData = computed(() => {\n return props.getNode(props.data ? props.data[props.keyField] : '') || props.data || ({} as TreeNode)\n})\nconst showCheckbox = computed(() => {\n return props.checkable\n})\nconst renderFunction = props.data?.render || props.render || null\nconst renderComponent = computed(() => {\n return defineComponent({\n name: 'Render',\n functional: true,\n render() {\n if (typeof renderFunction !== 'function') return h('div')\n return renderFunction(fullData.value)\n }\n })\n})\nconst dragListeners = computed(() => {\n let result = {}\n if (props.draggable && !props.disableAll && !props.data?.disabled) {\n result = {\n dragstart: handleDragStart\n }\n }\n return result\n})\nconst dropListeners = computed(() => {\n let result = {}\n if (props.droppable) {\n result = {\n dragenter: handleDragEnter.bind(getCurrentInstance()),\n dragover: handleDragOver.bind(getCurrentInstance()),\n dragleave: handleDragLeave.bind(getCurrentInstance()),\n drop: handleDrop.bind(getCurrentInstance())\n }\n }\n return result\n})\n\nfunction handleExpand(): void {\n if (props.data?.isLeaf) return\n emit('expand', fullData.value)\n}\n\nfunction handleCheck(): void {\n if (props.disableAll || props.data?.disabled || !props.checkable) return\n emit('check', fullData.value)\n}\n\nfunction handleSelect(e: MouseEvent): void {\n emit('click', fullData.value, e)\n if (props.selectable) {\n if (props.disableAll || props.data?.disabled) return\n emit('select', fullData.value)\n } else if (props.checkable) {\n handleCheck()\n } else {\n handleExpand()\n }\n}\n\nfunction handleDblclick(e: MouseEvent): void {\n emit('node-dblclick', fullData.value, e)\n}\n\nfunction handleRightClick(e: MouseEvent): void {\n emit('node-right-click', fullData.value, e)\n}\n\n// #region Drag handlers\n/** 计算拖拽到节点的哪个部分 */\nconst nodeBody = ref()\nfunction getHoverPart(e: DragEvent) {\n const boundingClientRect = nodeBody.value.getBoundingClientRect()\n const height = boundingClientRect.height\n const y = e.clientY - boundingClientRect.top\n if (y <= height * 0.3) return dragHoverPartEnum.before\n if (y <= height * (0.3 + 0.4)) return dragHoverPartEnum.body\n return dragHoverPartEnum.after\n}\n\n/**\n * 重置 dragover 标志位\n * @param hoverPart 计算出的拖拽部分\n * @param isLeaveOrDrop 是否是 dragleave 或者 drop 事件,如果是则不再把标志位置为 true\n */\nfunction resetDragoverFlags(hoverPart: dragHoverPartEnum, isLeaveOrDrop = false) {\n dragoverBefore.value = false\n dragoverBody.value = false\n dragoverAfter.value = false\n if (!isLeaveOrDrop) {\n if (hoverPart === dragHoverPartEnum.before) dragoverBefore.value = true\n else if (hoverPart === dragHoverPartEnum.body) dragoverBody.value = true\n else if (hoverPart === dragHoverPartEnum.after) dragoverAfter.value = true\n }\n}\n\nfunction handleDragStart(e: DragEvent): void {\n if (e.dataTransfer) {\n e.dataTransfer.setData('node', JSON.stringify(props.data))\n }\n if (props.data?.expand) handleExpand()\n emit('node-dragstart', fullData.value, e)\n}\n\nfunction handleDragEnter(e: DragEvent): void {\n e.preventDefault()\n const hoverPart = getHoverPart(e)\n resetDragoverFlags(hoverPart)\n emit('node-dragenter', fullData.value, e, hoverPart)\n}\n\nfunction handleDragOver(e: DragEvent): void {\n e.preventDefault()\n const hoverPart = getHoverPart(e)\n resetDragoverFlags(hoverPart)\n emit('node-dragover', fullData.value, e, hoverPart)\n}\n\nfunction handleDragLeave(e: DragEvent): void {\n const hoverPart = getHoverPart(e)\n resetDragoverFlags(hoverPart, true)\n emit('node-dragleave', fullData.value, e, hoverPart)\n}\n\nfunction handleDrop(e: DragEvent): void {\n const hoverPart = getHoverPart(e)\n resetDragoverFlags(hoverPart, true)\n emit('node-drop', fullData.value, e, hoverPart)\n}\n\nconst svgStyle = computed(() => ({\n alignSelf: 'stretch',\n width: `${props.nodeIndent}px`\n}))\n</script>\n\n<template>\n <div :class=\"indentWrapperCls\">\n <template v-if=\"showLine\">\n <template v-for=\"(level, index) in data._level\" :key=\"level\">\n <svg viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\" :style=\"svgStyle\">\n <path fill=\"none\" :d=\"polylinePoints(index === data._level - 1)\" :stroke-width=\"strokeWidth\" :stroke=\"showLineParams.color\" :stroke-dasharray=\"strokeDasharray\" />\n </svg>\n </template>\n </template>\n <div\n :class=\"wrapperCls\"\n :style=\"{\n paddingLeft: showLine ? 'none' : `${data._level * nodeIndent}px`\n }\"\n >\n <div :class=\"dropBeforeCls\" />\n <div ref=\"nodeBody\" :class=\"nodeBodyCls\" v-on=\"dropListeners\">\n <!-- 展开按钮 -->\n\n <div v-if=\"showLeftArrow\" :class=\"expandCls\">\n <i v-show=\"!data?.isLeaf && !data?._loading\" class=\"left-arrow\" @click=\"handleExpand\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"m16 12l-6 6V6z\" />\n </svg>\n </i>\n <LoadingIcon v-if=\"data?._loading\" :class=\"loadingIconCls\" />\n </div>\n\n <!-- 复选框 -->\n <div v-if=\"showCheckbox\" :class=\"checkboxWrapperCls\">\n <div :class=\"checkboxCls\" @click=\"handleCheck\" />\n </div>\n\n <!-- 标题 -->\n <div :class=\"titleCls\" :draggable=\"draggable && !disableAll && !data?.disabled\" @click=\"handleSelect\" @dblclick=\"handleDblclick\" @contextmenu=\"handleRightClick\" v-on=\"dragListeners\">\n <slot :node=\"fullData\">\n <component :is=\"renderComponent\" v-if=\"renderFunction\" />\n <template v-else>{{ data ? data[titleField] : '' }}</template>\n </slot>\n </div>\n\n <div v-if=\"showRightArrow\" :class=\"expandCls\">\n <!-- 外层用于占位,icon 用于点击 -->\n <i v-show=\"!data?.isLeaf && !data?._loading\" class=\"right-arrow\" @click=\"handleExpand\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\n <path fill=\"currentColor\" d=\"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z\" />\n </svg>\n </i>\n <LoadingIcon v-if=\"data?._loading\" :class=\"loadingIconCls\" />\n </div>\n </div>\n <div :class=\"dropAfterCls\" />\n </div>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport TreeNode from './TreeNode.vue'\n\nexport const XTreeNode: SFCWithInstall<typeof TreeNode> = withInstall(TreeNode)\nexport type TreeNodeInstance = InstanceType<typeof TreeNode>\n\nexport default XTreeNode\n\nexport * from './interface'\n","import type { Ref } from 'vue'\nimport { nextTick, ref } from 'vue'\nimport type { IUseExpandAnimationProps } from '../interface'\nimport type { TreeNode } from '../store'\n\nexport const useExpandAnimation = (renderNodesRef: Ref<TreeNode[]>, renderStartRef: Ref<number>, props: IUseExpandAnimationProps) => {\n const expandAnimationStart = ref(false)\n const expandAnimationReady = ref(false)\n const expandNodeIndex = ref(-1)\n const expandNodeLevel = ref(-1)\n const expandNodeCurrentState = ref(false)\n const expandNodeNextState = ref(false)\n\n const expandRenderStart = ref(0)\n const expandTopNodes = ref<TreeNode[]>([])\n const expandMiddleNodes = ref<TreeNode[]>([])\n const expandBottomNodes = ref<TreeNode[]>([])\n\n const resetExpandAnimation = () => {\n expandAnimationStart.value = false\n expandAnimationReady.value = false\n expandNodeIndex.value = -1\n expandNodeLevel.value = -1\n\n expandRenderStart.value = 0\n expandTopNodes.value = []\n expandMiddleNodes.value = []\n expandBottomNodes.value = []\n }\n\n const updateMiddleNodes = () => {\n const nodeToExpandLevel = expandNodeLevel.value\n const middleNodes: TreeNode[] = []\n const renderNodesLength = renderNodesRef.value.length\n const expandRenderStartDiff = renderStartRef.value - expandRenderStart.value\n for (let i = expandNodeIndex.value - expandRenderStartDiff + 1; i < renderNodesLength; i++) {\n if (renderNodesRef.value[i]._level > nodeToExpandLevel) {\n middleNodes.push(renderNodesRef.value[i])\n } else break\n }\n expandMiddleNodes.value = middleNodes\n }\n\n const updateBeforeExpand = (nodeToExpand: TreeNode) => {\n if (!props.animation) return\n resetExpandAnimation()\n\n const key = nodeToExpand[props.keyField]\n const index = renderNodesRef.value.findIndex(renderNode => renderNode[props.keyField] === key)\n if (index > -1) {\n expandNodeIndex.value = index\n expandNodeLevel.value = nodeToExpand._level\n expandAnimationStart.value = true\n expandNodeCurrentState.value = nodeToExpand.expand\n expandNodeNextState.value = !nodeToExpand.expand\n expandRenderStart.value = renderStartRef.value\n\n if (expandNodeNextState.value) {\n expandBottomNodes.value = renderNodesRef.value.slice(expandNodeIndex.value + 1)\n } else {\n updateMiddleNodes()\n }\n }\n }\n\n const updateAfterExpand = () => {\n if (!props.animation) return\n\n if (!expandAnimationStart.value) {\n expandAnimationStart.value = false\n return\n }\n\n if (expandNodeIndex.value === -1) return\n\n nextTick(() => {\n const expandRenderStartDiff = renderStartRef.value - expandRenderStart.value\n expandTopNodes.value = renderNodesRef.value.slice(0, expandNodeIndex.value - expandRenderStartDiff + 1)\n if (expandNodeNextState.value) {\n updateMiddleNodes()\n } else {\n expandBottomNodes.value = renderNodesRef.value.slice(expandNodeIndex.value - expandRenderStartDiff + 1)\n }\n expandAnimationReady.value = true\n nextTick(() => {\n expandNodeCurrentState.value = !expandNodeCurrentState.value\n })\n })\n }\n\n const onExpandAnimationFinish = () => {\n resetExpandAnimation()\n }\n\n return {\n ready: expandAnimationReady,\n currentExpandState: expandNodeCurrentState,\n\n topNodes: expandTopNodes,\n middleNodes: expandMiddleNodes,\n bottomNodes: expandBottomNodes,\n\n updateBeforeExpand,\n updateAfterExpand,\n onExpandAnimationFinish\n }\n}\n","import { onBeforeUnmount, onMounted, ref } from 'vue'\n\nexport const useIframeResize = (resizeCallback: () => void) => {\n const iframe = ref<HTMLIFrameElement | undefined>()\n\n onMounted(() => {\n const $iframe = iframe.value\n if ($iframe?.contentWindow) {\n $iframe.contentWindow.addEventListener('resize', resizeCallback)\n }\n })\n\n onBeforeUnmount(() => {\n const $iframe = iframe.value\n if ($iframe?.contentWindow) {\n $iframe.contentWindow.removeEventListener('resize', resizeCallback)\n }\n })\n}\n","import type { ITreeNodeOptions, TreeNodeKeyType } from '../interface'\n\nconst notAllowOverrideList: string[] = ['_level', '_filterVisible', '_parent', '_loading', '_loaded', '_remote', '_keyField', 'children', 'setChildren']\n\nexport default class TreeNode {\n // #region Properties\n\n [key: string]: any | TreeNodeKeyType\n\n /** 节点层级 */\n _level = 0\n\n /** 多选是否选中 */\n checked = false\n\n /** 单选是否选中 */\n selected = false\n\n /** 是否半选状态 */\n indeterminate = false\n\n /** 是否禁用 */\n disabled = false\n\n /** 是否展开 */\n expand = false\n\n /** 是否可见 */\n visible = true\n\n /** 过滤后是否可见,如果为 false 则在其他可见情况下也是不可见的 */\n _filterVisible = true\n\n /** 父节点 */\n _parent: null | TreeNode = null\n\n /** 子节点 */\n children: TreeNode[] = []\n\n /** 是否是子节点 */\n isLeaf = false\n\n /** 节点是否正在加载 */\n _loading = false\n\n /** 子节点是否已加载 */\n _loaded = false\n\n // #endregion Properties\n\n constructor(\n options: ITreeNodeOptions,\n parent: null | TreeNode = null,\n readonly _keyField = 'id',\n readonly _remote = false\n ) {\n for (const option in options) {\n if (!notAllowOverrideList.includes(option)) {\n this[option] = options[option]\n }\n }\n\n if (this[_keyField] == null) {\n // 如果没有 id 字段,随机赋值一个\n this[_keyField] = Math.random().toString(36).substring(2)\n }\n\n this._parent = parent\n\n if (this._parent) {\n this._level = this._parent._level + 1\n }\n\n this.visible = this._parent === null || (this._parent.expand && this._parent.visible)\n\n if (Array.isArray(options.children)) {\n this.setChildren(options.children)\n }\n\n if (this.children.length) {\n this._loaded = true\n }\n\n if (!this._remote) {\n this.isLeaf = !this.children.length\n }\n }\n\n /**\n * 设置子节点\n * @param children 子节点数据数组\n */\n setChildren(children: ITreeNodeOptions[]): void {\n this.children = children.map(child => {\n return new TreeNode({ ...child }, this, this._keyField, this._remote)\n })\n }\n}\n","import type { IEventNames, IListenersMap, ListenerType } from '../interface'\n\nexport default class TreeEventTarget {\n /** 事件 listeners */\n private listenersMap: IListenersMap = {}\n\n on<T extends keyof IEventNames>(eventName: T, listener: ListenerType<T> | Array<ListenerType<T>>): void {\n if (!this.listenersMap[eventName]) {\n this.listenersMap[eventName] = []\n }\n let listeners: Array<ListenerType<T>> = []\n if (!Array.isArray(listener)) {\n listeners = [listener]\n } else {\n listeners = listener\n }\n listeners.forEach(lis => {\n if (!this.listenersMap[eventName].includes(lis)) {\n this.listenersMap[eventName].push(lis)\n }\n })\n }\n\n off<T extends keyof IEventNames>(eventName: T, listener?: ListenerType<T>): void {\n if (!this.listenersMap[eventName]) return\n if (!listener) {\n this.listenersMap[eventName] = []\n } else {\n const index = this.listenersMap[eventName].indexOf(listener)\n if (index > -1) {\n this.listenersMap[eventName].splice(index, 1)\n }\n }\n }\n\n emit<T extends keyof IEventNames>(eventName: T, ...args: Parameters<IEventNames[T]>): void {\n if (!this.listenersMap[eventName]) return\n const length: number = this.listenersMap[eventName].length\n for (let i = 0; i < length; i++) {\n this.listenersMap[eventName][i](...args)\n }\n }\n\n disposeListeners(): void {\n for (const eventName in this.listenersMap) {\n this.listenersMap[eventName] = []\n }\n }\n}\n","import { ignoreEnum } from '../constants'\nimport type { FilterFunctionType, IMapData, ITreeNodeOptions, ITreeStoreOptions, TreeNodeKeyType } from '../interface'\nimport TreeEventTarget from './tree-event-target'\nimport TreeNode from './tree-node'\n\nexport default class TreeStore extends TreeEventTarget {\n // #region Properties\n\n /** 树数据 */\n data: TreeNode[] = []\n\n /** 扁平化的树数据 */\n flatData: TreeNode[] = []\n\n /** 树数据 map */\n mapData: IMapData = Object.create(null)\n\n /** 未加载但已选中的节点 key ,每次 flattenData 的时候进行检查,将加载的节点从此数组中剔除 */\n private unloadCheckedKeys: TreeNodeKeyType[] = []\n\n /** 未加载但选中的单选节点 key */\n private unloadSelectedKey: TreeNodeKeyType | null = null\n\n /** 当前单选选中节点 key */\n private currentSelectedKey: TreeNodeKeyType | null = null\n\n // #endregion Properties\n\n constructor(private readonly options: ITreeStoreOptions) {\n super()\n }\n\n /**\n * Use this function to insert nodes into flatData to avoid 'maximun call stack size exceeded' error\n * @param insertIndex The index to insert, the same usage as `this.flatData.splice(insertIndex, 0, insertNodes)`\n * @param insertNodes Tree nodes to insert\n */\n private insertIntoFlatData(insertIndex: number, insertNodes: TreeNode[]) {\n this.flatData = this.flatData.slice(0, insertIndex).concat(insertNodes, this.flatData.slice(insertIndex))\n }\n\n setData(data: ITreeNodeOptions[], selectableUnloadKey: TreeNodeKeyType | null = null, checkableUnloadKeys: TreeNodeKeyType[] | null = null): void {\n this.data = data.map((nodeData: ITreeNodeOptions): TreeNode => new TreeNode(nodeData, null, this.options.keyField, Boolean(this.options.load)))\n // 清空 mapData\n for (const key in this.mapData) {\n Reflect.deleteProperty(this.mapData, key)\n }\n // 扁平化之前清空单选选中,如果 value 有值,则是 selectableUnloadKey 有值,会重新设置 currentSelectedKey ;多选选中没有存储在 store 中,因此不必事先清空。\n this.currentSelectedKey = null\n // 扁平化节点数据\n this.flatData = this.flattenData(this.data)\n // 更新未载入多选选中节点\n this.setUnloadCheckedKeys(checkableUnloadKeys || [])\n if (selectableUnloadKey) {\n // 更新未载入单选选中节点\n this.currentSelectedKey = null\n this.setUnloadSelectedKey(selectableUnloadKey)\n }\n this.emit('visible-data-change')\n this.emit('set-data')\n }\n\n // #region Set api\n\n /**\n * 设置单个节点多选选中\n * @param key 设置的节点 key\n * @param value 是否选中\n * @param triggerEvent 是否触发事件\n * @param triggerDataChange 是否触发 `data-change` 事件以通知外部刷新视图\n * @param filtering 是否正在过滤,如果是,则考虑 `filteredNodeCheckable` Prop,用于判断是否是用户点击节点触发的勾选\n */\n setChecked(key: TreeNodeKeyType, value: boolean, triggerEvent = true, triggerDataChange = true, filtering = false): void {\n const node = this.mapData[key]\n if (!node) return this.setUnloadChecked(key, value, triggerEvent, triggerDataChange)\n if (node.disabled) return\n\n // 首先确定没有变化的情况\n if (node.checked && value) return // 已经勾选的再次勾选,直接返回\n if (!node.checked && !node.indeterminate && !value) return // 未勾选且不是半选状态再次设置未勾选,直接返回\n\n if (this.options.cascade) {\n // 向下勾选,包括自身\n this.checkNodeDownward(node, value, filtering)\n // 向上勾选父节点直到根节点\n this.checkNodeUpward(node)\n } else {\n node.checked = value\n }\n\n if (triggerEvent) {\n if (node.checked) {\n this.emit('check', node)\n } else {\n this.emit('uncheck', node)\n }\n }\n\n this.triggerCheckedChange(triggerEvent, triggerDataChange)\n }\n\n /**\n * 设置单个未加载节点选中,不公开此 API\n */\n private setUnloadChecked(key: TreeNodeKeyType, value: boolean, triggerEvent = true, triggerDataChange = true): void {\n const index = this.findIndex(key, this.unloadCheckedKeys)\n if (value) {\n if (index === -1) {\n this.unloadCheckedKeys.push(key)\n }\n } else if (index !== -1) {\n this.unloadCheckedKeys.splice(index, 1)\n }\n\n this.triggerCheckedChange(triggerEvent, triggerDataChange)\n }\n\n /**\n * 批量选中/取消多选选中节点\n * @param keys 选中的节点 key 数组\n * @param value 是否选中\n * @param triggerEvent 是否触发事件\n */\n setCheckedKeys(keys: TreeNodeKeyType[], value: boolean, triggerEvent = true, triggerDataChange = true): void {\n keys.forEach(key => {\n this.setChecked(key, value, false, false)\n })\n\n this.triggerCheckedChange(triggerEvent, triggerDataChange)\n }\n\n /**\n * 多选勾选全部节点\n * @param triggerEvent 是否触发事件\n * @param triggerDataChange 是否触发视图刷新\n */\n checkAll(triggerEvent = true, triggerDataChange = true): void {\n if (this.options.cascade) {\n // 级联时,只要勾选第一层节点即可,如果第一层被禁用了,则往下一层勾选\n const checkCascade = (nodes: TreeNode[]): void => {\n nodes.forEach(node => {\n if (node.disabled) {\n checkCascade(node.children)\n } else {\n this.setChecked(node[this.options.keyField], true, false, false)\n }\n })\n }\n checkCascade(this.data)\n } else {\n const length = this.flatData.length\n for (let i = 0; i < length; i++) {\n const node = this.flatData[i]\n this.setChecked(node[this.options.keyField], true, false, false)\n }\n }\n\n this.triggerCheckedChange(triggerEvent, triggerDataChange)\n }\n\n /**\n * 清除所有多选已选\n * @param triggerEvent 是否触发事件\n * @param triggerDataChange 是否触发视图刷新\n */\n clearChecked(triggerEvent = true, triggerDataChange = true): void {\n const currentCheckedNodes = this.getCheckedNodes()\n currentCheckedNodes.forEach(checkedNode => {\n this.setChecked(checkedNode[this.options.keyField], false, false, false)\n })\n // 清空未加载多选选中节点\n this.unloadCheckedKeys = []\n\n this.triggerCheckedChange(triggerEvent, triggerDataChange)\n }\n\n /**\n * 触发 checked-change 的快捷方法\n * @param triggerEvent 是否触发事件\n * @param triggerDataChange 是否触发视图刷新\n */\n private triggerCheckedChange(triggerEvent = true, triggerDataChange = true) {\n if (triggerEvent) {\n this.emit('checked-change', this.getCheckedNodes(), this.getCheckedKeys())\n }\n\n if (triggerDataChange) {\n this.emit('render-data-change')\n }\n }\n\n /**\n * 触发 selected-change 的快捷方法\n * @param triggerEvent 是否触发事件\n * @param triggerDataChange 是否触发视图刷新\n */\n private triggerSelectedChange(triggerEvent = true, triggerDataChange = true) {\n if (triggerEvent) {\n this.emit('selected-change', this.getSelectedNode(), this.getSelectedKey())\n }\n\n if (triggerDataChange) {\n this.emit('render-data-change')\n }\n }\n\n /**\n * 设置单选选中\n * @param key 选中节点 key\n * @param value 是否选中\n * @param triggerEvent 是否触发事件\n */\n setSelected(key: TreeNodeKeyType, value: boolean, triggerEvent = true, triggerDataChange = true): void {\n const node = this.mapData[key]\n if (!node) return this.setUnloadSelected(key, value, triggerEvent, triggerDataChange)\n if (node.disabled) return\n\n if (node.selected === value) return // 当前节点已经是将要设置的状态,直接返回\n\n if (key === this.currentSelectedKey) {\n // 设置的节点即当前已选中节点\n if (!value) {\n // 取消当前选中节点\n node.selected = value\n this.currentSelectedKey = null\n }\n } else {\n // 设置的节点不是当前已选中节点,要么当前没有选中节点,要么当前有选中节点\n if (value) {\n if (this.currentSelectedKey !== null) {\n // 取消当前已选中,设置新的选中节点\n if (this.mapData[this.currentSelectedKey]) {\n this.mapData[this.currentSelectedKey].selected = false\n }\n }\n node.selected = value\n this.currentSelectedKey = node[this.options.keyField]\n this.unloadSelectedKey = null\n }\n }\n\n if (triggerEvent) {\n if (node.selected) {\n this.emit('select', node)\n } else {\n this.emit('unselect', node)\n }\n }\n\n this.triggerSelectedChange(triggerEvent, triggerDataChange)\n }\n\n /**\n * 设置未加载单选选中节点,不公开此 API\n */\n private setUnloadSelected(key: TreeNodeKeyType, value: boolean, triggerEvent = true, triggerDataChange = true): void {\n if (value) {\n this.currentSelectedKey = null\n this.unloadSelectedKey = key\n } else if (this.unloadSelectedKey === key) {\n this.unloadSelectedKey = null\n }\n\n this.triggerSelectedChange(triggerEvent, triggerDataChange)\n }\n\n /**\n * 清除当前单选选中\n * @param triggerEvent 是否触发事件\n * @param triggerDataChange 是否触发视图刷新\n */\n clearSelected(triggerEvent = true, triggerDataChange = true): void {\n if (this.currentSelectedKey && this.mapData[this.currentSelectedKey]) {\n this.setSelected(this.currentSelectedKey, false, triggerEvent, triggerDataChange)\n } else if (this.unloadSelectedKey !== null) {\n this.unloadSelectedKey = null\n\n this.triggerSelectedChange(triggerEvent, triggerDataChange)\n }\n }\n\n /**\n * 设置节点展开\n * @param key 节点 key\n * @param value 是否展开\n * @param expandParent 展开节点时是否同时展开父节点\n * @param triggerEvent 是否触发事件\n * @param triggerDataChange 是否触发 `data-change` 事件以通知外部刷新视图\n */\n setExpand(key: TreeNodeKeyType, value: boolean, expandParent = false, triggerEvent = true, triggerDataChange = true): void {\n const node = this.mapData[key]\n if (!node || (!expandParent && node.isLeaf)) return\n\n if (node.expand === value) return // 当前节点已经是将要设置的状态,直接返回\n\n if (!node.isLeaf) {\n if (typeof this.options.load === 'function') {\n // 如果节点未加载过且将要设置为加载,则调用 load 方法\n if (!node._loaded && !node._loading && value) {\n node._loading = true\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n new Promise((resolve, reject) => {\n const load = this.options.load as Function\n load(node, resolve, reject)\n })\n .then(children => {\n if (Array.isArray(children)) {\n this.loadChildren(node, children, value)\n this.emit('set-data')\n }\n })\n .catch((e: Error | string) => {\n let err = e\n if (!(e instanceof Error)) {\n err = new Error(e)\n }\n console.error('[VTree] load tree nodes error.', err)\n })\n .then(() => {\n node._loading = false\n\n if (triggerEvent) {\n this.emit('expand', node)\n }\n\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n })\n return\n } else if (node._loading) return // 正在加载的节点,直接返回\n }\n\n node.expand = value\n // Set children visibility\n let queue = node.children.concat()\n while (queue.length) {\n const nodeFromQueue = queue.pop()\n if (!nodeFromQueue) continue\n if (nodeFromQueue.expand && nodeFromQueue.children.length) {\n queue = nodeFromQueue.children.concat(queue)\n }\n if (nodeFromQueue._filterVisible === false) {\n nodeFromQueue.visible = false\n } else {\n nodeFromQueue.visible = nodeFromQueue._parent === null || (nodeFromQueue._parent.expand && nodeFromQueue._parent.visible)\n }\n }\n\n if (triggerEvent) {\n this.emit('expand', node)\n }\n\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n }\n\n if (expandParent && node._parent && value) {\n this.setExpand(node._parent[this.options.keyField], value, expandParent, false, triggerDataChange)\n }\n }\n\n /**\n * 批量设置节点展开/折叠\n * @param keys 展开的节点 key 数组\n * @param value 是否展开\n */\n setExpandKeys(keys: TreeNodeKeyType[], value: boolean, triggerDataChange = true): void {\n keys.forEach(key => {\n this.setExpand(key, value, false, false, false)\n })\n\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n }\n\n setExpandAll(value: boolean, triggerDataChange = true): void {\n this.flatData.forEach(node => {\n if (!this.options.load || node._loaded) {\n this.setExpand(node[this.options.keyField], value, false, false, false)\n }\n })\n\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n }\n\n private isChildrenChanged(node: TreeNode, newNode: ITreeNodeOptions): boolean {\n return 'children' in newNode && (Boolean(node.children.length) || Boolean(newNode.children?.length))\n }\n\n updateNode(key: TreeNodeKeyType, newNode: ITreeNodeOptions, triggerEvent = true, triggerDataChange = true) {\n const node = this.mapData[key]\n if (!node) return\n\n const newNodeCopy: ITreeNodeOptions = {}\n const notAllowedFields = [this.options.keyField, 'indeterminate', 'visible', 'isLeaf']\n\n // Exclude key field and fields starting with '_'\n Object.keys(newNode).forEach(field => {\n if (!field.startsWith('_') && !notAllowedFields.includes(field)) {\n newNodeCopy[field] = newNode[field]\n }\n })\n\n const previousCheckedKeys = this.getCheckedKeys()\n const previousSelectedKey = this.getSelectedKey()\n const triggerSetDataFlag = this.isChildrenChanged(node, newNodeCopy)\n\n if ('children' in newNodeCopy && (Boolean(node.children.length) || Boolean(newNodeCopy.children?.length))) {\n // Remove all children\n this.removeChildren(key, false, false)\n\n // Add new children\n if (Array.isArray(newNodeCopy.children)) {\n this.loadChildren(node, newNodeCopy.children, node.expand)\n }\n\n delete newNodeCopy.children\n }\n if ('checked' in newNodeCopy) {\n this.setChecked(key, newNodeCopy.checked, false, false)\n delete newNodeCopy.checked\n }\n if ('selected' in newNodeCopy) {\n this.setSelected(key, newNodeCopy.selected, false, false)\n delete newNodeCopy.selected\n }\n if ('expand' in newNodeCopy) {\n this.setExpand(key, newNodeCopy.expand, false, false, false)\n delete newNodeCopy.expand\n }\n Object.keys(newNodeCopy).forEach(field => {\n node[field] = newNodeCopy[field]\n })\n\n const currentCheckedKeys = this.getCheckedKeys()\n const currentSelectedKey = this.getSelectedKey()\n\n if (triggerEvent) {\n if (JSON.stringify(currentCheckedKeys.sort()) !== JSON.stringify(previousCheckedKeys.sort())) {\n this.triggerCheckedChange(true, false)\n }\n\n if (currentSelectedKey !== previousSelectedKey) {\n this.triggerSelectedChange(true, false)\n }\n }\n\n if (triggerDataChange) {\n if (triggerSetDataFlag) {\n this.emit('set-data')\n }\n this.emit('visible-data-change')\n }\n }\n\n updateNodes(newNodes: ITreeNodeOptions[]) {\n const validNodes = newNodes.filter(node => node[this.options.keyField] !== null)\n if (!validNodes.length) return\n\n const previousCheckedKeys = this.getCheckedKeys()\n const previousSelectedKey = this.getSelectedKey()\n let triggerSetDataFlag = false\n\n validNodes.forEach(newNode => {\n const key = newNode[this.options.keyField]\n const node = this.mapData[key]\n if (node) {\n triggerSetDataFlag ||= this.isChildrenChanged(node, newNode)\n this.updateNode(key, newNode, false, false)\n }\n })\n\n const currentCheckedKeys = this.getCheckedKeys()\n const currentSelectedKey = this.getSelectedKey()\n\n if (JSON.stringify(currentCheckedKeys.sort()) !== JSON.stringify(previousCheckedKeys.sort())) {\n this.triggerCheckedChange(true, false)\n }\n\n if (currentSelectedKey !== previousSelectedKey) {\n this.triggerSelectedChange(true, false)\n }\n\n if (triggerSetDataFlag) {\n this.emit('set-data')\n }\n\n this.emit('visible-data-change')\n }\n\n // #endregion Set api\n\n // #region Get api\n\n /**\n * 获取多选选中节点\n * @param ignoreMode 忽略模式,可选择忽略父节点或子节点,默认值是 VTree 的 ignoreMode Prop\n */\n getCheckedNodes(ignoreMode = this.options.ignoreMode): TreeNode[] {\n if (ignoreMode === ignoreEnum.children) {\n const result: TreeNode[] = []\n const traversal = (nodes: TreeNode[]) => {\n nodes.forEach(node => {\n if (node.checked) {\n result.push(node)\n } else if (!node.isLeaf && node.indeterminate) {\n traversal(node.children)\n }\n })\n }\n traversal(this.data)\n return result\n }\n return this.flatData.filter(node => {\n if (ignoreMode === ignoreEnum.parents) return node.checked && node.isLeaf\n return node.checked\n })\n }\n\n /**\n * 获取多选选中的节点 key ,包括未加载的 key\n * @param ignoreMode 忽略模式,同 `getCheckedNodes`\n */\n getCheckedKeys(ignoreMode = this.options.ignoreMode): TreeNodeKeyType[] {\n return this.getCheckedNodes(ignoreMode)\n .map(checkedNodes => checkedNodes[this.options.keyField])\n .concat(this.unloadCheckedKeys)\n }\n\n /**\n * 获取多选半选状态节点\n */\n getIndeterminateNodes(): TreeNode[] {\n return this.flatData.filter(node => node.indeterminate)\n }\n\n /**\n * 获取当前单选选中节点\n */\n getSelectedNode(): TreeNode | null {\n if (this.currentSelectedKey === null) return null\n return this.mapData[this.currentSelectedKey] || null\n }\n\n /**\n * 获取当前单选选中节点 key ,有可能是未加载的选中项\n */\n getSelectedKey(): TreeNodeKeyType | null {\n return this.currentSelectedKey || this.unloadSelectedKey || null\n }\n\n /**\n * 获取未加载但多选选中的节点\n */\n getUnloadCheckedKeys(): TreeNodeKeyType[] {\n return this.unloadCheckedKeys\n }\n\n /**\n * 获取展开节点\n */\n getExpandNodes(): TreeNode[] {\n return this.flatData.filter(node => !node.isLeaf && node.expand)\n }\n\n /**\n * 获取展开节点 keys\n */\n getExpandKeys(): TreeNodeKeyType[] {\n return this.getExpandNodes().map(node => node[this.options.keyField])\n }\n\n /**\n * 根据节点 key 获取节点\n * @param key 节点 key\n */\n getNode(key: TreeNodeKeyType): TreeNode | null {\n return this.mapData[key] || null\n }\n\n // #endregion Get api\n\n // #region Node transfer api\n\n // 这边的 referenceKey 都是被执行的节点,比如 insertBefore ,在这里 referenceKey 就是指要插入到 referenceKey 节点前面\n\n insertBefore(insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType, triggerEvent = true, triggerDataChange = true): TreeNode | null {\n const node = this.getInsertedNode(insertedNode, referenceKey)\n if (!node) return null\n\n this.remove(node[this.options.keyField], false, false)\n\n const referenceNode = this.mapData[referenceKey]\n const parentNode = referenceNode._parent\n const childIndex = this.findIndex(referenceKey, parentNode && parentNode.children)\n const flatIndex = this.findIndex(referenceKey)\n\n const dataIndex = (parentNode && -1) || this.findIndex(referenceKey, this.data)\n\n this.insertIntoStore(node, parentNode, childIndex, flatIndex, dataIndex, triggerEvent, triggerDataChange)\n\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n\n return node\n }\n\n insertAfter(insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType, triggerEvent = true, triggerDataChange = true): TreeNode | null {\n const node = this.getInsertedNode(insertedNode, referenceKey)\n if (!node) return null\n\n this.remove(node[this.options.keyField], false, false)\n\n const referenceNode = this.mapData[referenceKey]\n const parentNode = referenceNode._parent\n const childIndex = this.findIndex(referenceKey, parentNode && parentNode.children) + 1\n\n const length = this.flatData.length\n const referenceIndex = this.findIndex(referenceKey)\n\n // 找到待插入节点应该插入 flatData 的索引\n let flatIndex = referenceIndex + 1\n for (let i = referenceIndex + 1; i <= length; i++) {\n if (i === length) {\n flatIndex = i\n break\n }\n if (this.flatData[i]._level <= referenceNode._level) {\n flatIndex = i\n break\n }\n }\n\n const dataIndex = (parentNode && -1) || this.findIndex(referenceKey, this.data) + 1\n\n this.insertIntoStore(node, parentNode, childIndex, flatIndex, dataIndex, triggerEvent, triggerDataChange)\n\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n\n return node\n }\n\n append(insertedNode: TreeNodeKeyType | ITreeNodeOptions, parentKey: TreeNodeKeyType, triggerEvent = true, triggerDataChange = true): TreeNode | null {\n const parentNode = this.mapData[parentKey]\n if (!parentNode.isLeaf) {\n const childrenLength = parentNode.children.length\n return this.insertAfter(insertedNode, parentNode.children[childrenLength - 1][this.options.keyField], triggerEvent, triggerDataChange)\n }\n\n const node = this.getInsertedNode(insertedNode, parentKey, true)\n if (!node) return null\n\n this.remove(node[this.options.keyField], false, false)\n\n const flatIndex = this.findIndex(parentKey) + 1\n\n this.insertIntoStore(node, parentNode, 0, flatIndex, undefined, triggerEvent, triggerDataChange)\n\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n\n return node\n }\n\n prepend(insertedNode: TreeNodeKeyType | ITreeNodeOptions, parentKey: TreeNodeKeyType, triggerEvent = true, triggerDataChange = true): TreeNode | null {\n const parentNode = this.mapData[parentKey]\n if (!parentNode.isLeaf) {\n return this.insertBefore(insertedNode, parentNode.children[0][this.options.keyField], triggerEvent, triggerDataChange)\n }\n\n const node = this.getInsertedNode(insertedNode, parentKey, true)\n if (!node) return null\n\n this.remove(node[this.options.keyField], false, false)\n\n const flatIndex = this.findIndex(parentKey) + 1\n\n this.insertIntoStore(node, parentNode, 0, flatIndex, undefined, triggerEvent, triggerDataChange)\n\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n\n return node\n }\n\n /**\n * 删除节点\n * @param removedKey 要删除的节点 key\n */\n remove(removedKey: TreeNodeKeyType, triggerEvent = true, triggerDataChange = true): TreeNode | null {\n const node = this.mapData[removedKey]\n if (!node) return null\n\n // 从 flatData 中移除\n const index = this.findIndex(node)\n if (index === -1) return null\n let deleteCount = 1\n const length = this.flatData.length\n for (let i = index + 1; i < length; i++) {\n if (this.flatData[i]._level > node._level) {\n deleteCount++\n } else break\n }\n this.flatData.splice(index, deleteCount)\n\n // 从 mapData 中移除\n const deleteInMap = (key: TreeNodeKeyType): void => {\n const targetNode = this.mapData[key]\n delete this.mapData[key]\n targetNode.children.forEach(child => deleteInMap(child[this.options.keyField]))\n }\n deleteInMap(removedKey)\n\n // 从 data 中移除\n if (!node._parent) {\n const $index = this.findIndex(node, this.data)\n if ($index > -1) {\n this.data.splice($index, 1)\n }\n }\n\n // 从父节点 children 中移除\n if (node._parent) {\n const childIndex = this.findIndex(node, node._parent.children)\n if (childIndex !== -1) {\n node._parent.children.splice(childIndex, 1)\n }\n // 处理父节点 isLeaf\n node._parent.isLeaf = !node._parent.children.length\n // 处理父节点 expand\n if (node._parent.isLeaf) {\n node._parent.expand = false\n node._parent.indeterminate = false\n }\n // 更新被移除处父节点状态\n this.updateMovingNodeStatus(node, triggerEvent, triggerDataChange)\n }\n\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n\n return node\n }\n\n private removeChildren(parentKey: TreeNodeKeyType, triggerEvent = true, triggerDataChange = true) {\n const node = this.mapData[parentKey]\n if (!node || !node.children.length) return null\n\n const firstChild = node.children[0]\n let movingNode = firstChild\n\n // 从 flatData 中移除\n const index = this.findIndex(node)\n if (index === -1) return null\n let deleteCount = 0\n const length = this.flatData.length\n for (let i = index + 1; i < length; i++) {\n if (this.flatData[i]._level > node._level) {\n // 从 mapData 中移除\n delete this.mapData[this.flatData[i][this.options.keyField]]\n deleteCount++\n\n // 如果是 Selected 的节点,则记录\n if (this.flatData[i].selected) {\n movingNode = this.flatData[i]\n }\n } else break\n }\n this.flatData.splice(index + 1, deleteCount)\n\n // 从父节点 children 中移除\n node.children.splice(0, node.children.length)\n node.isLeaf = true\n node.indeterminate = false\n\n // 更新被移除处父节点状态\n this.updateMovingNodeStatus(movingNode, triggerEvent, triggerDataChange)\n\n if (triggerDataChange) {\n this.emit('visible-data-change')\n }\n\n return node\n }\n\n private loadChildren(node: TreeNode, children: any[], expand: boolean) {\n const parentIndex: number = this.findIndex(node)\n if (parentIndex === -1) return\n node._loaded = true\n node.expand = expand\n node.setChildren(children)\n node.isLeaf = !node.children.length\n // 如果单选选中的值为空,则允许后续数据覆盖单选 value\n const currentCheckedKeys = this.getCheckedKeys()\n const flattenChildren = this.flattenData(node.children, this.getSelectedKey() === null)\n this.insertIntoFlatData(parentIndex + 1, flattenChildren)\n // 如果有未加载的选中节点,判断其是否已加载\n this.setUnloadCheckedKeys(currentCheckedKeys)\n if (this.unloadSelectedKey !== null) {\n this.setUnloadSelectedKey(this.unloadSelectedKey)\n }\n\n this.checkNodeUpward(node, true)\n }\n\n private getInsertedNode(insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType, isParent = false): TreeNode | null {\n const referenceNode = this.mapData[referenceKey]\n if (!referenceNode) return null\n const parentNode = isParent ? referenceNode : referenceNode._parent\n if (insertedNode instanceof TreeNode) {\n // 与参照节点是同一个节点\n if (insertedNode[this.options.keyField] === referenceKey) return null\n return insertedNode\n } else if (typeof insertedNode === 'object') {\n if (insertedNode[this.options.keyField] === referenceKey) return null\n const mapNode = this.mapData[insertedNode[this.options.keyField]]\n if (mapNode) return mapNode\n return new TreeNode(insertedNode, parentNode, this.options.keyField, Boolean(this.options.load))\n }\n if (!this.mapData[insertedNode] || insertedNode === referenceKey) return null\n return this.mapData[insertedNode]\n }\n\n /**\n * 将一个节点插入 store 记录中\n * @param node 要插入的节点\n * @param parentNode 要插入节点的父节点\n * @param childIndex 如果有父节点,则需提供要插入的节点在同级节点中的顺序\n * @param flatIndex 在 flatData 中的索引\n * @param dataIndex 如果没有父节点,需要提供节点在 data 中的索引\n */\n private insertIntoStore(node: TreeNode, parentNode: TreeNode | null, childIndex: number, flatIndex: number, dataIndex?: number, triggerEvent = true, triggerDataChange = true): void {\n if (flatIndex === -1) return\n\n // 插入父节点 children 中\n if (childIndex !== -1 && parentNode) {\n parentNode.children.splice(childIndex, 0, node)\n }\n\n // 更新 _parent\n node._parent = parentNode\n\n // 更新父节点 isLeaf, expand\n if (parentNode) {\n parentNode.isLeaf = false\n this.setExpand(parentNode[this.options.keyField], true, false, false, false)\n } else if (typeof dataIndex === 'number' && dataIndex > -1) {\n // 没有父节点,则需要插入到 this.data 中以保证数据正确\n this.data.splice(dataIndex, 0, node)\n }\n\n // 入 flatData 与 mapData\n const nodes: TreeNode[] = this.flattenData([node])\n // 处理自身及子节点 _level\n node._level = parentNode ? parentNode._level + 1 : 0\n nodes.forEach(childNode => (childNode._level = childNode._parent ? childNode._parent._level + 1 : 0))\n this.insertIntoFlatData(flatIndex, nodes)\n\n // 更新插入节点父节点状态\n this.updateMovingNodeStatus(node, triggerEvent, triggerDataChange)\n }\n\n private updateMovingNodeStatus(movingNode: TreeNode, triggerEvent = true, triggerDataChange = true): void {\n // 处理多选\n this.checkNodeUpward(movingNode)\n this.triggerCheckedChange(triggerEvent, triggerDataChange)\n // 处理单选\n if (movingNode.selected) {\n this.setSelected(movingNode[this.options.keyField], true, triggerEvent, triggerDataChange)\n }\n }\n\n // #endregion Node transfer api\n\n /**\n * 过滤本地节点数据\n * @param keyword 过滤关键词\n * @param filterMethod 过滤方法\n */\n filter(keyword: string, filterMethod: FilterFunctionType): void {\n // 使用树形结构数据进行遍历\n const filterVisibleNodes: TreeNode[] = []\n this.flatData.forEach(node => {\n node._filterVisible = (node._parent && node._parent._filterVisible) || filterMethod(keyword, node)\n node.visible = node._filterVisible\n\n if (node._filterVisible) {\n filterVisibleNodes.push(node)\n }\n })\n // 对于临时列表中的节点,都是可见的,因此将它们的父节点都设为可见并展开\n filterVisibleNodes.forEach(node => {\n const stack = []\n let parent = node._parent\n while (parent) {\n stack.unshift(parent)\n parent = parent._parent\n }\n stack.forEach(p => {\n p._filterVisible = true\n // Parent.visible = parent._filterVisible\n // _filterVisible 且 无父级或者父级展开且可见,则设为可见\n p.visible = (p._parent === null || (p._parent.expand && p._parent.visible)) && p._filterVisible\n this.options.expandOnFilter && this.setExpand(p[this.options.keyField], true, false, false, false)\n })\n node.visible = node._parent === null || (node._parent.expand && node._parent.visible)\n })\n\n this.emit('visible-data-change')\n }\n\n /**\n * 过滤未加载多选节点,对比最终勾选节点是否有变化并触发 checked-change 事件\n * @param keys 全量选中节点 key 数组,包括加载与未加载选中节点\n */\n private setUnloadCheckedKeys(keys: TreeNodeKeyType[]): void {\n this.unloadCheckedKeys = keys\n const checkedKeysCache = keys.concat()\n const length = this.unloadCheckedKeys.length\n for (let i = length - 1; i >= 0; i--) {\n const key = this.unloadCheckedKeys[i]\n if (this.mapData[key]) {\n this.setChecked(key, true, false, false)\n this.unloadCheckedKeys.splice(i, 1)\n }\n }\n\n const newCheckedKeys = this.getCheckedKeys()\n if (newCheckedKeys.length === checkedKeysCache.length && newCheckedKeys.every(val => (checkedKeysCache as TreeNodeKeyType[]).includes(val))) return\n // 因为多选模式下,value 传过来的数据跟数据上标识 checked: true 的结果可能不一致,因此需要触发一个事件告诉外部最终勾选了哪些节点\n this.emit('checked-change', this.getCheckedNodes(), newCheckedKeys)\n }\n\n /**\n * 过滤未加载单选选中节点,对比是否有变化并触发 selected-change 事件\n * @param key 节点 key\n */\n private setUnloadSelectedKey(key: TreeNodeKeyType): void {\n const selectedKeyCache = this.getSelectedKey()\n if (this.mapData[key]) {\n // 如果节点已加载\n this.setSelected(key, true, false)\n this.unloadSelectedKey = null\n } else {\n // 节点未加载\n this.currentSelectedKey && this.setSelected(this.currentSelectedKey, false, false)\n this.unloadSelectedKey = key\n }\n\n const newSelectedKey = this.getSelectedKey()\n if (newSelectedKey === selectedKeyCache) return\n this.emit('selected-change', this.getSelectedNode(), newSelectedKey)\n }\n\n /**\n * 保存扁平化的节点数据 `flatData` 与节点数据 Map `mapData`\n * @param nodes 树状节点数据\n * @param overrideSelected 是否根据数据设置 `selected`\n */\n private flattenData(nodes: TreeNode[], overrideSelected = true, result: TreeNode[] = []): TreeNode[] {\n const length = nodes.length\n for (let i = 0; i < length; i++) {\n const node = nodes[i]\n const key: TreeNodeKeyType = node[this.options.keyField]\n result.push(node)\n if (this.mapData[key]) {\n throw new Error('[VTree] Duplicate tree node key.')\n }\n this.mapData[key] = node\n\n // 如果数据上就是选中的,则更新节点状态\n if (node.checked && this.options.cascade) {\n // 向下勾选,包括自身\n this.checkNodeDownward(node, true)\n }\n\n if (node.selected && overrideSelected) {\n this.clearSelected(false, false)\n this.currentSelectedKey = node[this.options.keyField]\n this.emit('selected-change', node, this.currentSelectedKey)\n }\n\n if ((this.options.defaultExpandAll || node.expand) && !this.options.load && !node.isLeaf) {\n node.expand = false\n this.setExpand(node[this.options.keyField], true, false, false, false)\n }\n\n if (node.children.length) {\n this.flattenData(node.children, overrideSelected, result)\n }\n }\n\n if (this.options.cascade && Boolean(length)) {\n // 向上勾选父节点直到根节点\n this.checkNodeUpward(nodes[0])\n }\n\n return result\n }\n\n // #region Check nodes\n\n /**\n * 向下勾选/取消勾选节点,包括自身\n * @param node 需要向下勾选的节点\n * @param value 勾选或取消勾选\n * @param filtering 是否正在过滤,如果是,则考虑 `filteredNodeCheckable` Prop\n */\n private checkNodeDownward(node: TreeNode, value: boolean, filtering = false): void {\n node.children.forEach(child => {\n this.checkNodeDownward(child, value, filtering)\n })\n if (node.isLeaf || (this.options.load && !node.children.length)) {\n if (!node.disabled) {\n // 正在过滤,若被过滤节点不可勾选,且节点过滤后不可见,则直接返回\n if (filtering && !this.options.filteredNodeCheckable && !node._filterVisible) return\n node.checked = value\n node.indeterminate = false\n }\n } else {\n this.checkParentNode(node)\n }\n }\n\n /**\n * 向上勾选/取消勾选父节点,不包括自身\n * @param node 需要勾选的节点\n * @param fromCurrentNode 是否从当前节点开始处理\n */\n private checkNodeUpward(node: TreeNode, fromCurrentNode = false) {\n let parent = fromCurrentNode ? node : node._parent\n while (parent) {\n this.checkParentNode(parent)\n parent = parent._parent\n }\n }\n\n /**\n * 根据子节点的勾选状态更新当前父节点的勾选状态\n * @param node 需要勾选的节点\n */\n private checkParentNode(node: TreeNode): void {\n const length = node.children.length\n if (!length) return\n let hasChecked = false\n let hasUnchecked = false\n let isInterrupted = false\n for (let i = 0; i < length; i++) {\n const child = node.children[i]\n if (child.checked) {\n hasChecked = true\n } else {\n hasUnchecked = true\n }\n if ((hasChecked && hasUnchecked) || child.indeterminate) {\n isInterrupted = true\n node.checked = false\n node.indeterminate = true\n break\n }\n }\n if (!isInterrupted) {\n node.checked = hasChecked\n node.indeterminate = false\n }\n }\n\n // #endregion Check nodes\n\n // #region Utils\n\n /**\n * 搜索节点在指定数组中的位置\n */\n private findIndex(keyOrNode: TreeNode | TreeNodeKeyType, searchList: TreeNode[] | TreeNodeKeyType[] | null = this.flatData): number {\n if (searchList !== null) {\n const key: TreeNodeKeyType = keyOrNode instanceof TreeNode ? keyOrNode[this.options.keyField] : keyOrNode\n const length = searchList.length\n for (let i = 0; i < length; i++) {\n if (searchList[0] instanceof TreeNode) {\n if (key === (searchList as TreeNode[])[i][this.options.keyField]) {\n return i\n }\n } else if (key === searchList[i]) {\n return i\n }\n }\n }\n return -1\n }\n\n // #endregion Utils\n}\n","/* eslint-disable prettier/prettier */\n \nimport { ref } from 'vue'\nimport type { AnyPropsArrayType, FilterFunctionType, IgnoreType, INonReactiveData, ITreeNodeOptions, IUsePublicTreeAPIProps, TreeNodeKeyType } from '../interface'\nimport { TreeNode } from '../store'\n\nexport const usePublicTreeAPI = (\n nonReactive: INonReactiveData,\n props: IUsePublicTreeAPIProps,\n options: {\n resetSpaceHeights: () => void\n updateExpandedKeys: () => void\n updateBlockData: () => void\n updateRender: () => void\n }\n) => {\n const { resetSpaceHeights, updateExpandedKeys, updateBlockData, updateRender } = options\n\n const unloadCheckedNodes = ref<TreeNode[]>([])\n const isRootLoading = ref(false)\n\n /** 使用此方法重置树数据,可避免大量数据被 vue 监听 */\n function setData(data: AnyPropsArrayType): void {\n resetSpaceHeights()\n let checkableUnloadKeys: TreeNodeKeyType | TreeNodeKeyType[] | null = null\n let selectableUnloadKey: TreeNodeKeyType | null = null\n if (props.checkable) {\n if (Array.isArray(props.modelValue)) {\n checkableUnloadKeys = props.modelValue.concat()\n } else if (typeof props.modelValue === 'string') {\n checkableUnloadKeys = props.modelValue === '' ? [] : props.modelValue.split(props.separator)\n }\n } else if (props.selectable && !Array.isArray(props.modelValue)) {\n selectableUnloadKey = props.modelValue as TreeNodeKeyType | null\n }\n nonReactive.store.setData(data, selectableUnloadKey, checkableUnloadKeys as TreeNodeKeyType[])\n updateExpandedKeys()\n }\n function setChecked(key: TreeNodeKeyType, value: boolean): void {\n nonReactive.store.setChecked(key, value)\n }\n function setCheckedKeys(keys: TreeNodeKeyType[], value: boolean): void {\n nonReactive.store.setCheckedKeys(keys, value)\n }\n function checkAll(): void {\n nonReactive.store.checkAll()\n }\n function clearChecked(): void {\n nonReactive.store.clearChecked()\n }\n function setSelected(key: TreeNodeKeyType, value: boolean): void {\n nonReactive.store.setSelected(key, value)\n }\n function clearSelected(): void {\n nonReactive.store.clearSelected()\n }\n function setExpand(key: TreeNodeKeyType, value: boolean, expandParent = true): void {\n nonReactive.store.setExpand(key, value, expandParent)\n }\n function setExpandKeys(keys: TreeNodeKeyType[], value: boolean): void {\n nonReactive.store.setExpandKeys(keys, value)\n }\n function setExpandAll(value: boolean): void {\n nonReactive.store.setExpandAll(value)\n }\n function getCheckedNodes(ignoreMode?: IgnoreType): TreeNode[] {\n ignoreMode ||= props.ignoreMode\n return nonReactive.store.getCheckedNodes(ignoreMode)\n }\n function getCheckedKeys(ignoreMode?: IgnoreType): TreeNodeKeyType[] {\n ignoreMode ||= props.ignoreMode\n return nonReactive.store.getCheckedKeys(ignoreMode)\n }\n function getIndeterminateNodes(): TreeNode[] {\n return nonReactive.store.getIndeterminateNodes()\n }\n function getSelectedNode(): TreeNode | null {\n return nonReactive.store.getSelectedNode()\n }\n function getSelectedKey(): TreeNodeKeyType | null {\n return nonReactive.store.getSelectedKey()\n }\n function getExpandNodes(): TreeNode[] {\n return nonReactive.store.getExpandNodes()\n }\n function getExpandKeys(): TreeNodeKeyType[] {\n return nonReactive.store.getExpandKeys()\n }\n function getCurrentVisibleNodes(): TreeNode[] {\n return nonReactive.store.flatData.filter(node => node._filterVisible)\n }\n function getNode(key: TreeNodeKeyType): TreeNode | null {\n return nonReactive.store.getNode(key)\n }\n /** 返回树形结构的节点数据 */\n function getTreeData(): TreeNode[] {\n return nonReactive.store.data\n }\n /** 返回扁平化后的节点数据 */\n function getFlatData(): TreeNode[] {\n return nonReactive.store.flatData\n }\n function getNodesCount(): number {\n return nonReactive.store.flatData.length\n }\n function insertBefore(insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType): TreeNode | null {\n return nonReactive.store.insertBefore(insertedNode, referenceKey)\n }\n function insertAfter(insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType): TreeNode | null {\n return nonReactive.store.insertAfter(insertedNode, referenceKey)\n }\n function append(insertedNode: TreeNodeKeyType | ITreeNodeOptions, parentKey: TreeNodeKeyType): TreeNode | null {\n return nonReactive.store.append(insertedNode, parentKey)\n }\n function prepend(insertedNode: TreeNodeKeyType | ITreeNodeOptions, parentKey: TreeNodeKeyType): TreeNode | null {\n return nonReactive.store.prepend(insertedNode, parentKey)\n }\n function remove(removedKey: TreeNodeKeyType): TreeNode | null {\n return nonReactive.store.remove(removedKey)\n }\n function filter(keyword: string, filterMethod?: FilterFunctionType): void {\n const defaultFilterMethod = (key: string, node: TreeNode) => {\n const title = node[props.titleField]\n if (title == null || !title.toString) return false\n return (title.toString() as string).toLowerCase().includes(key.toLowerCase())\n }\n const finalFilterMethod = filterMethod || props.filterMethod || defaultFilterMethod\n nonReactive.store.filter(keyword, finalFilterMethod)\n }\n /**\n * 展示已选节点\n */\n function showCheckedNodes(showUnloadCheckedNodes?: boolean): void {\n if (!props.checkable) return\n showUnloadCheckedNodes = showUnloadCheckedNodes == null ? props.showUnloadCheckedNodes : showUnloadCheckedNodes\n const checkedNodesCache = nonReactive.store.getCheckedNodes()\n nonReactive.store.filter('', (_keyword, node) => node.checked)\n if (!showUnloadCheckedNodes) return\n const unloadKeys = nonReactive.store.getUnloadCheckedKeys()\n if (unloadKeys.length) {\n const unloadNodes: TreeNode[] = unloadKeys.map(key => {\n const queryList = props.unloadDataList.concat(checkedNodesCache)\n let title = key\n queryList.some((query: any) => {\n if (query[props.keyField] === key && query[props.titleField] != null) {\n title = query[props.titleField]\n return true\n }\n return false\n })\n\n return new TreeNode(\n {\n [props.keyField]: key,\n [props.titleField]: title,\n checked: true,\n isLeaf: true\n },\n null,\n props.keyField,\n Boolean(props.load)\n )\n })\n unloadCheckedNodes.value = unloadNodes as TreeNode[]\n nonReactive.blockNodes = nonReactive.blockNodes.concat(unloadNodes)\n updateBlockData()\n updateRender()\n }\n }\n /**\n * 从远程加载根节点\n */\n function loadRootNodes(): Promise<void> {\n isRootLoading.value = true\n return new Promise((resolve, reject) => {\n if (props.load) props.load(null, resolve, reject)\n })\n .then(root => {\n if (Array.isArray(root)) {\n setData(root as AnyPropsArrayType)\n }\n })\n .catch(() => { })\n .then(() => {\n isRootLoading.value = false\n })\n }\n /**\n * 更新单个节点\n */\n function updateNode(key: TreeNodeKeyType, newNode: ITreeNodeOptions) {\n return nonReactive.store.updateNode(key, newNode)\n }\n /**\n * 更新多个节点\n */\n function updateNodes(newNodes: ITreeNodeOptions[]) {\n return nonReactive.store.updateNodes(newNodes)\n }\n\n return {\n unloadCheckedNodes,\n isRootLoading,\n setData,\n setChecked,\n setCheckedKeys,\n checkAll,\n clearChecked,\n setSelected,\n clearSelected,\n setExpand,\n setExpandKeys,\n setExpandAll,\n getCheckedNodes,\n getCheckedKeys,\n getIndeterminateNodes,\n getSelectedNode,\n getSelectedKey,\n getExpandNodes,\n getExpandKeys,\n getCurrentVisibleNodes,\n getNode,\n getTreeData,\n getFlatData,\n getNodesCount,\n insertBefore,\n insertAfter,\n append,\n prepend,\n remove,\n filter,\n showCheckedNodes,\n loadRootNodes,\n updateNode,\n updateNodes\n }\n}\n","import { computed } from 'vue'\nimport { useNamespace } from '../../../composable'\n\nexport const useTreeCls = () => {\n const { b } = useNamespace('tree')\n\n const prefixCls = b()\n\n const wrapperCls = computed(() => {\n return [prefixCls, `${prefixCls}__wrapper`]\n })\n const scrollAreaCls = computed(() => {\n return [`${prefixCls}__scroll-area`]\n })\n const blockAreaCls = computed(() => {\n return [`${prefixCls}__block-area`]\n })\n const emptyCls = computed(() => {\n return [`${prefixCls}__empty`]\n })\n const emptyTextDefaultCls = computed(() => {\n return [`${prefixCls}__empty-text_default`]\n })\n const loadingCls = computed(() => {\n return [`${prefixCls}__loading`]\n })\n const loadingWrapperCls = computed(() => {\n return [`${prefixCls}__loading-wrapper`]\n })\n const loadingIconCls = computed(() => {\n return [`${prefixCls}__loading-icon`]\n })\n const iframeCls = computed(() => {\n return [`${prefixCls}__iframe`]\n })\n\n const transitionWrapperCls = computed(() => {\n return [`${prefixCls}-transition-wrapper`]\n })\n const transitionWrapperInnerCls = computed(() => {\n return [`${prefixCls}-transition-wrapper-inner`]\n })\n\n return {\n wrapperCls,\n scrollAreaCls,\n blockAreaCls,\n emptyCls,\n emptyTextDefaultCls,\n loadingCls,\n loadingWrapperCls,\n loadingIconCls,\n iframeCls,\n transitionWrapperCls,\n transitionWrapperInnerCls\n }\n}\n","import { ref } from 'vue'\nimport type { VerticalPositionType } from '../constants'\nimport { verticalPositionEnum } from '../constants'\nimport type { INonReactiveData, TreeNodeKeyType, TreeProps } from '../interface'\nimport type { TreeNode } from '../store'\n\ntype IUseVirtualListProps = Required<Pick<TreeProps, 'renderNodeAmount' | 'nodeMinHeight' | 'bufferNodeAmount' | 'keyField'>>\n\nexport const useVirtualList = (nonReactive: INonReactiveData, props: IUseVirtualListProps) => {\n const scrollArea = ref()\n const renderNodes = ref<TreeNode[]>([])\n const blockLength = ref(0)\n const blockAreaHeight = ref(0)\n const topSpaceHeight = ref(0)\n const bottomSpaceHeight = ref(0)\n const renderAmount = ref(0)\n const renderAmountCache = ref(0)\n const renderStart = ref(0)\n const renderStartCache = ref(0)\n const debounceTimer = ref<number | undefined>(undefined)\n\n /**\n * 重置空白与滚动高度\n */\n const resetSpaceHeights = (): void => {\n topSpaceHeight.value = 0\n bottomSpaceHeight.value = 0\n if (scrollArea.value) scrollArea.value.scrollTop = 0\n }\n\n /**\n * 计算需要渲染的节点的数量,只要容器高度(clientHeight)不变,这个数量一般就不会变\n */\n const updateRenderAmount = (): void => {\n const clientHeight = scrollArea.value.clientHeight\n renderAmount.value = Math.max(props.renderNodeAmount, Math.ceil(clientHeight / props.nodeMinHeight) + props.bufferNodeAmount)\n }\n\n /**\n * 计算渲染的节点,基于 scrollTop 计算当前应该渲染哪些节点\n */\n const updateRenderNodes = (isScroll = false): void => {\n if (blockLength.value > renderAmount.value) {\n const scrollTop = Math.max(scrollArea.value.scrollTop, 0)\n /** 当前滚动了多少节点 */\n const scrollNodeAmount = Math.floor(scrollTop / props.nodeMinHeight)\n renderStart.value = Math.floor(scrollNodeAmount / props.bufferNodeAmount) * props.bufferNodeAmount\n } else {\n renderStart.value = 0\n }\n if (isScroll && renderAmountCache.value === renderAmount.value && renderStartCache.value === renderStart.value) return\n // @ts-ignore\n renderNodes.value = nonReactive.blockNodes.slice(renderStart.value, renderStart.value + renderAmount.value).map(blockNode => {\n return { ...blockNode, _parent: null, children: [] }\n }) as TreeNode[]\n topSpaceHeight.value = renderStart.value * props.nodeMinHeight\n bottomSpaceHeight.value = blockAreaHeight.value - (topSpaceHeight.value + renderNodes.value.length * props.nodeMinHeight)\n }\n\n /**\n * 计算渲染节点数量,并计算渲染节点\n */\n const updateRender = (): void => {\n updateRenderAmount()\n updateRenderNodes()\n }\n\n /**\n * 更新 block 数据相关信息\n */\n const updateBlockData = (): void => {\n blockLength.value = nonReactive.blockNodes.length\n blockAreaHeight.value = props.nodeMinHeight * blockLength.value\n }\n\n /**\n * 计算可见节点\n */\n const updateBlockNodes = (): void => {\n nonReactive.blockNodes = nonReactive.store.flatData.filter(node => node.visible)\n updateBlockData()\n updateRender()\n }\n\n const handleTreeScroll = (): void => {\n if (debounceTimer.value) {\n window.cancelAnimationFrame(debounceTimer.value)\n }\n renderAmountCache.value = renderAmount.value\n renderStartCache.value = renderStart.value\n debounceTimer.value = window.requestAnimationFrame(updateRenderNodes.bind(null, true))\n }\n\n /**\n * 滚动到指定节点位置\n * @param key 要滚动的节点\n * @param verticalPosition 滚动的垂直位置,可选为 'top', 'center', 'bottom' 或距离容器可视顶部距离的数字,默认为 'top'\n */\n const scrollTo = (key: TreeNodeKeyType, verticalPosition: VerticalPositionType | number = verticalPositionEnum.top): void => {\n const node = nonReactive.store.mapData[key]\n if (!node || !node.visible) return\n let index = -1\n for (let i = 0; i < blockLength.value; i++) {\n if (nonReactive.blockNodes[i][props.keyField] === key) {\n index = i\n break\n }\n }\n if (index === -1) return\n let scrollTop = index * props.nodeMinHeight\n if (verticalPosition === verticalPositionEnum.center) {\n const clientHeight = scrollArea.value.clientHeight\n scrollTop -= (clientHeight - props.nodeMinHeight) / 2\n } else if (verticalPosition === verticalPositionEnum.bottom) {\n const clientHeight = scrollArea.value.clientHeight\n scrollTop -= clientHeight - props.nodeMinHeight\n } else if (typeof verticalPosition === 'number') {\n scrollTop -= verticalPosition\n }\n if (scrollArea.value) scrollArea.value.scrollTop = scrollTop\n }\n\n return {\n scrollArea,\n renderNodes,\n blockLength,\n blockAreaHeight,\n topSpaceHeight,\n bottomSpaceHeight,\n renderAmount,\n renderAmountCache,\n renderStart,\n renderStartCache,\n resetSpaceHeights,\n updateRenderAmount,\n updateRenderNodes,\n updateRender,\n updateBlockNodes,\n updateBlockData,\n handleTreeScroll,\n scrollTo\n }\n}\n","import type { Ref } from 'vue'\n\nexport const getVTreeMethods = <T extends string, K extends Record<T, any>>(apiMethods: readonly T[], ref: Ref<K | null>): Pick<K, T> => {\n return apiMethods.reduce(\n (prev, cur) => {\n const fn = (...args: any[]) => {\n const value = ref.value?.[cur]\n if (typeof value !== 'function') return\n return value(...args)\n }\n prev[cur] = fn as K[T]\n return prev\n },\n {} as Pick<K, T>\n )\n}\n\ntype PickReadonly<T, K extends keyof T> = {\n readonly [P in K]: T[P]\n}\n\nexport const pickReadonly = <T extends object, K extends keyof T>(obj: Readonly<T>, ...keys: K[]): PickReadonly<T, K> => {\n const picked: Partial<PickReadonly<T, K>> = {}\n keys.forEach(key => {\n // eslint-disable-next-line no-prototype-builtins\n if (obj.hasOwnProperty(key)) {\n picked[key] = obj[key]\n }\n })\n return picked as PickReadonly<T, K>\n}\n","<!-- eslint-disable vue/define-emits-declaration -->\n<!-- eslint-disable vue/custom-event-name-casing -->\n<!-- eslint-disable no-eq-null -->\n<!-- eslint-disable no-underscore-dangle -->\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, reactive, ref, toRefs, watch } from 'vue'\nimport VTreeNode from '../tree-node'\nimport LoadingIcon from './components/LoadingIcon.vue'\nimport { STORE_EVENTS, TREE_EVENTS, TREE_NODE_EVENTS } from './constants/events'\nimport { DEFAULT_TREE_PROPS, dragHoverPartEnum } from './constants'\nimport { useExpandAnimation, useIframeResize, usePublicTreeAPI, useTreeCls, useVirtualList } from './hooks'\nimport type { INonReactiveData, TreeNodeKeyType, TreeProps } from './interface'\nimport type { TreeNode } from './store'\nimport TreeStore from './store'\nimport { pickReadonly } from './utils'\n\ndefineOptions({\n name: 'VTree',\n inheritAttrs: false\n})\n\nconst props = withDefaults(defineProps<TreeProps>(), DEFAULT_TREE_PROPS)\n\nconst emit = defineEmits(['update:modelValue', ...TREE_EVENTS])\n\nconst EXCLUDED_TREE_NODE_EVENTS = ['node-drop', 'check', 'select', 'expand']\n\nconst treeNodeListeners = TREE_NODE_EVENTS.reduce(\n (prev, eventName) => {\n if (!EXCLUDED_TREE_NODE_EVENTS.includes(eventName)) {\n prev[eventName] = (...args: any[]) => {\n emit(eventName, ...args)\n }\n }\n return prev\n },\n {} as Record<string, Function>\n)\n\nconst getInitialNonReactiveValues = (): INonReactiveData => {\n return {\n store: new TreeStore({\n keyField: props.keyField,\n ignoreMode: props.ignoreMode,\n filteredNodeCheckable: props.filteredNodeCheckable,\n cascade: props.cascade,\n defaultExpandAll: props.defaultExpandAll,\n load: props.load,\n expandOnFilter: props.expandOnFilter\n }),\n blockNodes: [] as TreeNode[]\n }\n}\n\n// Non reactive\nconst nonReactive = getInitialNonReactiveValues()\n\n/**\n * 转发 store 所触发的事件,通过 vue 组件触发事件可被其他组件监听\n */\nconst attachStoreEvents = () => {\n STORE_EVENTS.forEach(eventName => {\n nonReactive.store.on(eventName, (...args: any[]) => {\n emit(eventName, ...args)\n })\n })\n}\n\nattachStoreEvents()\n\n/** 更新展开的节点 */\nconst updateExpandedKeys = () => {\n if (props.expandedKeys.length) {\n nonReactive.store.setExpandAll(false, false)\n nonReactive.store.setExpandKeys(props.expandedKeys, true)\n }\n}\n\nconst { wrapperCls, scrollAreaCls, blockAreaCls, emptyCls, emptyTextDefaultCls, loadingCls, loadingWrapperCls, loadingIconCls, iframeCls, transitionWrapperCls, transitionWrapperInnerCls } = useTreeCls()\n\nconst { scrollArea, renderNodes, blockLength, topSpaceHeight, bottomSpaceHeight, renderStart, resetSpaceHeights, updateRender, updateBlockNodes, updateBlockData, handleTreeScroll, scrollTo } = useVirtualList(nonReactive, props)\n\nconst expandAnimation = useExpandAnimation(renderNodes, renderStart, props)\n\nconst {\n unloadCheckedNodes,\n isRootLoading,\n\n setData,\n setChecked,\n setCheckedKeys,\n checkAll,\n clearChecked,\n setSelected,\n clearSelected,\n setExpand,\n setExpandKeys,\n setExpandAll,\n getCheckedNodes,\n getCheckedKeys,\n getIndeterminateNodes,\n getSelectedNode,\n getSelectedKey,\n getExpandNodes,\n getExpandKeys,\n getCurrentVisibleNodes,\n getNode,\n getTreeData,\n getFlatData,\n getNodesCount,\n insertBefore,\n insertAfter,\n append,\n prepend,\n remove,\n filter,\n showCheckedNodes,\n loadRootNodes,\n updateNode,\n updateNodes\n} = usePublicTreeAPI(nonReactive, props, {\n resetSpaceHeights,\n updateExpandedKeys,\n updateBlockData,\n updateRender\n})\n\nconst getNodeClassName = (node: TreeNode) => {\n return typeof props.nodeClassName === 'function' ? props.nodeClassName(node) : props.nodeClassName\n}\n\nconst noSiblingNodeMap = computed(() => {\n const parentsOfFirstNode: TreeNode[] = []\n let nodeParent = renderNodes.value[0]?._parent\n\n while (nodeParent) {\n parentsOfFirstNode.push(nodeParent)\n nodeParent = nodeParent._parent\n }\n\n const nodesToIterate = parentsOfFirstNode.concat(renderNodes.value)\n\n const map: Record<string, true> = {}\n const stack: TreeNode[] = []\n nodesToIterate.forEach(renderNode => {\n const currentNodeLevel = renderNode._level\n let length = stack.length\n while (length) {\n const stackNode = stack[length - 1]\n const stackNodeLevel = stackNode._level\n if (stackNodeLevel > currentNodeLevel) {\n map[stackNode[props.keyField]] = true\n stack.pop()\n } else if (stackNodeLevel === currentNodeLevel) {\n stack.pop()\n break\n } else break\n length--\n }\n stack.push(renderNode)\n })\n stack.forEach(node => {\n map[node[props.keyField]] = true\n })\n\n return map\n})\n\ntype VModelType = TreeNodeKeyType | TreeNodeKeyType[]\n\nconst sameValue = (newVal: VModelType, valueCache: VModelType | undefined): boolean => {\n if (Array.isArray(newVal) && Array.isArray(valueCache)) {\n if (newVal.length === valueCache.length && newVal.every(val => (valueCache as TreeNodeKeyType[]).includes(val))) return true\n } else if (newVal === valueCache) return true\n return false\n}\n\nconst valueCache = ref<VModelType | undefined>(Array.isArray(props.modelValue) ? props.modelValue.concat() : props.modelValue)\n\n// #region Handle node events\nconst handleNodeCheck = (node: TreeNode): void => {\n if (!props.cascade && props.enableLeafOnly && !node.isLeaf) return\n nonReactive.store.setChecked(node[props.keyField], node.indeterminate ? true : !node.checked, true, true, true)\n}\nconst handleNodeSelect = (node: TreeNode): void => {\n if (props.enableLeafOnly && !node.isLeaf) {\n nonReactive.store.setExpand(node[props.keyField], !node.expand)\n return\n }\n nonReactive.store.setSelected(node[props.keyField], !node.selected)\n}\nconst handleNodeExpand = (node: TreeNode): void => {\n expandAnimation.updateBeforeExpand(node)\n nonReactive.store.setExpand(node[props.keyField], !node.expand)\n}\nconst handleNodeDrop = (data: TreeNode, e: DragEvent, hoverPart: dragHoverPartEnum): void => {\n if (!props.droppable) return\n if (e.dataTransfer) {\n try {\n const targetNodeData = JSON.parse(e.dataTransfer.getData('node'))\n const targetKey = targetNodeData[props.keyField]\n const referenceKey = data[props.keyField]\n const shouldDrop: boolean = props.beforeDropMethod(targetKey, referenceKey, hoverPart)\n if (shouldDrop) {\n if (targetKey === referenceKey) return\n if (hoverPart === dragHoverPartEnum.before) nonReactive.store.insertBefore(targetKey, referenceKey)\n // 如果是拖拽到父节点,并且父节点是展开的,则不管 hoverPart 是不是 after 都拖入为子节点\n else if (hoverPart === dragHoverPartEnum.body || (!data.isLeaf && data.expand)) nonReactive.store.prepend(targetKey, referenceKey)\n else if (hoverPart === dragHoverPartEnum.after) nonReactive.store.insertAfter(targetKey, referenceKey)\n emit('node-drop', data, e, hoverPart, getNode(targetKey))\n }\n } catch (err: any) {\n throw new Error(err)\n }\n }\n}\n// #endregion Handle node events\n\nwatch(\n () => props.modelValue,\n newVal => {\n if (props.checkable) {\n // 检查是否由 update:modelValue 事件触发\n if (sameValue(newVal as VModelType, valueCache.value)) return\n\n // 多选\n let checkedKeys: TreeNodeKeyType[] = []\n if (Array.isArray(newVal)) {\n checkedKeys = newVal.concat()\n } else if (typeof newVal === 'string') {\n checkedKeys = newVal === '' ? [] : (newVal as string).split(props.separator)\n }\n nonReactive.store.clearChecked(false, false)\n nonReactive.store.setCheckedKeys(checkedKeys, true)\n } else if (props.selectable) {\n // 检查是否由 update:modelValue 事件触发\n if (newVal === valueCache.value) return\n\n // 单选\n const currentSelected = nonReactive.store.getSelectedKey()\n if (newVal !== '' && newVal != null) {\n nonReactive.store.setSelected(newVal as TreeNodeKeyType, true)\n } else if ((newVal === '' || newVal == null) && currentSelected) {\n nonReactive.store.setSelected(currentSelected, false)\n }\n }\n }\n)\n\nwatch(\n () => props.data,\n newData => {\n setData(newData)\n }\n)\n\nwatch(\n () => props.expandedKeys,\n () => {\n updateExpandedKeys()\n }\n)\n\nconst updateUnloadStatus = (): void => {\n if (unloadCheckedNodes.value.length) {\n const unloadKeys = nonReactive.store.getUnloadCheckedKeys()\n unloadCheckedNodes.value.forEach(node => {\n node.checked = unloadKeys.includes(node[props.keyField])\n })\n }\n}\n\n/**\n * 触发多选 update:modelValue 事件\n */\nconst emitCheckableInput = (_checkedNodes: TreeNode[], checkedKeys: TreeNodeKeyType[]): void => {\n if (props.checkable) {\n // 多选\n let emitValue: TreeNodeKeyType[] | string = checkedKeys\n if (!Array.isArray(props.modelValue)) {\n emitValue = emitValue.join(props.separator)\n }\n if (Array.isArray(emitValue)) {\n valueCache.value = emitValue.concat()\n } else {\n valueCache.value = emitValue\n }\n emit('update:modelValue', emitValue)\n }\n}\n\n/**\n * 触发单选 update:modelValue 事件\n */\nconst emitSelectableInput = (_selectedNode: TreeNode | null, selectedKey: TreeNodeKeyType | null): void => {\n if (props.selectable && !props.checkable) {\n // 单选\n const emitValue: TreeNodeKeyType = selectedKey || ''\n valueCache.value = emitValue\n emit('update:modelValue', emitValue)\n }\n}\n\nonMounted(() => {\n nonReactive.store.on('expand', expandAnimation.updateAfterExpand)\n nonReactive.store.on('visible-data-change', updateBlockNodes)\n nonReactive.store.on('render-data-change', updateRender)\n nonReactive.store.on('checked-change', (checkedNodes: TreeNode[], checkedKeys: TreeNodeKeyType[]) => {\n emitCheckableInput(checkedNodes, checkedKeys)\n updateUnloadStatus()\n })\n nonReactive.store.on('selected-change', emitSelectableInput)\n if (props.data.length) {\n setData(props.data)\n if (props.defaultExpandedKeys.length) {\n nonReactive.store.setExpandKeys(props.defaultExpandedKeys, true)\n }\n } else if (typeof props.load === 'function' && props.autoLoad) {\n // Load root data from remote\n if (props.modelValue || props.unloadDataList) {\n setData([])\n }\n loadRootNodes()\n }\n})\n\nonBeforeUnmount(() => {\n // 卸载组件之前重置 nonReactive 中的数据,缓解 Vue 切换组件可能导致的内存无法释放问题\n nonReactive.store.disposeListeners()\n const newNonReactive = getInitialNonReactiveValues()\n nonReactive.store = newNonReactive.store\n nonReactive.blockNodes = newNonReactive.blockNodes\n})\n\nuseIframeResize(updateRender)\n\nconst treeNodePropKeys = ['titleField', 'keyField', 'checkable', 'selectable', 'unselectOnClick', 'disableAll', 'draggable', 'droppable', 'render', 'nodeIndent', 'showLine', 'showLeftArrow', 'showRightArrow'] as const\n\nconst treeNodeProps = reactive(pickReadonly(toRefs(props), ...treeNodePropKeys))\n\ndefineExpose({\n setData,\n setChecked,\n setCheckedKeys,\n checkAll,\n clearChecked,\n setSelected,\n clearSelected,\n setExpand,\n setExpandKeys,\n setExpandAll,\n getCheckedNodes,\n getCheckedKeys,\n getIndeterminateNodes,\n getSelectedNode,\n getSelectedKey,\n getExpandNodes,\n getExpandKeys,\n getCurrentVisibleNodes,\n getNode,\n getTreeData,\n getFlatData,\n getNodesCount,\n insertBefore,\n insertAfter,\n append,\n prepend,\n remove,\n filter,\n showCheckedNodes,\n loadRootNodes,\n updateNode,\n updateNodes,\n scrollTo\n})\n</script>\n\n<template>\n <div :class=\"wrapperCls\">\n <!-- 滚动区域 -->\n <div ref=\"scrollArea\" :class=\"scrollAreaCls\" @scroll.passive.stop=\"handleTreeScroll\">\n <!-- 可见节点区域,包括上下两片空白加渲染的节点 -->\n <div :class=\"blockAreaCls\">\n <div :style=\"{ height: `${topSpaceHeight}px` }\" />\n <VTreeNode\n v-for=\"node in expandAnimation.ready.value ? expandAnimation.topNodes.value : renderNodes\"\n v-bind=\"treeNodeProps\"\n :key=\"node[keyField]\"\n :data=\"node\"\n :get-node=\"getNode\"\n :no-sibling-node-map=\"noSiblingNodeMap\"\n :class=\"getNodeClassName(node)\"\n :style=\"{\n minHeight: `${nodeMinHeight}px`\n }\"\n v-on=\"treeNodeListeners\"\n @check=\"handleNodeCheck\"\n @select=\"handleNodeSelect\"\n @expand=\"handleNodeExpand\"\n @node-drop=\"handleNodeDrop\"\n >\n <template #default=\"slotProps\">\n <slot name=\"node\" v-bind=\"slotProps\" />\n </template>\n </VTreeNode>\n <template v-if=\"expandAnimation.ready.value\">\n <Transition name=\"imax-expand-animation\" @after-enter=\"expandAnimation.onExpandAnimationFinish\" @after-leave=\"expandAnimation.onExpandAnimationFinish\">\n <div v-show=\"expandAnimation.currentExpandState.value\" :class=\"transitionWrapperCls\">\n <div :class=\"transitionWrapperInnerCls\">\n <VTreeNode\n v-for=\"node in expandAnimation.middleNodes.value\"\n v-bind=\"treeNodeProps\"\n :key=\"node[keyField]\"\n :data=\"node\"\n :get-node=\"getNode\"\n :no-sibling-node-map=\"noSiblingNodeMap\"\n :class=\"getNodeClassName(node)\"\n :style=\"{\n minHeight: `${nodeMinHeight}px`\n }\"\n v-on=\"treeNodeListeners\"\n @check=\"handleNodeCheck\"\n @select=\"handleNodeSelect\"\n @expand=\"handleNodeExpand\"\n @node-drop=\"handleNodeDrop\"\n >\n <template #default=\"slotProps\">\n <slot name=\"node\" v-bind=\"slotProps\" />\n </template>\n </VTreeNode>\n </div>\n </div>\n </Transition>\n <VTreeNode\n v-for=\"node in expandAnimation.bottomNodes.value\"\n v-bind=\"treeNodeProps\"\n :key=\"node[keyField]\"\n :data=\"node\"\n :get-node=\"getNode\"\n :no-sibling-node-map=\"noSiblingNodeMap\"\n :class=\"getNodeClassName(node)\"\n :style=\"{\n minHeight: `${nodeMinHeight}px`\n }\"\n v-on=\"treeNodeListeners\"\n @check=\"handleNodeCheck\"\n @select=\"handleNodeSelect\"\n @expand=\"handleNodeExpand\"\n @node-drop=\"handleNodeDrop\"\n >\n <template #default=\"slotProps\">\n <slot name=\"node\" v-bind=\"slotProps\" />\n </template>\n </VTreeNode>\n </template>\n <div :style=\"{ height: `${bottomSpaceHeight}px` }\" />\n </div>\n </div>\n <!-- 暂无数据 -->\n <div v-show=\"!blockLength\" :class=\"emptyCls\">\n <span :class=\"emptyTextDefaultCls\">\n <slot name=\"empty\">\n {{ emptyText }}\n </slot>\n </span>\n </div>\n <!-- 加载中 -->\n <div v-show=\"loading || isRootLoading\" :class=\"loadingCls\">\n <div :class=\"loadingWrapperCls\">\n <slot name=\"loading\">\n <LoadingIcon :class=\"loadingIconCls\" />\n </slot>\n </div>\n </div>\n <!-- 监听容器 resize 用的 iframe -->\n <iframe :class=\"iframeCls\" />\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport Tree from './Tree.vue'\n\nexport { TreeNode } from './store'\n\nexport const XTree: SFCWithInstall<typeof Tree> = withInstall(Tree)\nexport type TreeInstance = InstanceType<typeof Tree>\n\nexport default XTree\n\nexport * from './interface'\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport { useNamespace } from '../../../composable'\nimport type { TreeSearchProps } from '../interface'\n\nexport const useTreeSearchCls = (\n props: TreeSearchProps,\n options: {\n checkAllStatus: {\n checked: boolean\n indeterminate: boolean\n disabled: boolean\n }\n isShowingChecked: Ref<boolean>\n }\n) => {\n const { checkAllStatus, isShowingChecked } = options\n\n const { b } = useNamespace('tree-search')\n\n const { b: b1 } = useNamespace('tree-node')\n\n const prefixCls = b()\n\n const treeNodePrefixCls = b1()\n\n const wrapperCls = computed(() => {\n return [`${prefixCls}__wrapper`]\n })\n const searchCls = computed(() => {\n return [`${prefixCls}__search`]\n })\n const checkAllWrapperCls = computed(() => {\n return [`${prefixCls}__check-all-wrapper`]\n })\n const checkboxCls = computed(() => {\n return [\n `${prefixCls}__check-all`,\n `${treeNodePrefixCls}__checkbox`,\n {\n [`${treeNodePrefixCls}__checkbox_checked`]: checkAllStatus.checked,\n [`${treeNodePrefixCls}__checkbox_indeterminate`]: checkAllStatus.indeterminate,\n [`${treeNodePrefixCls}__checkbox_disabled`]: props.searchDisabled || checkAllStatus.disabled\n }\n ]\n })\n const inputWrapperCls = computed(() => {\n return [`${prefixCls}__input-wrapper`]\n })\n const inputCls = computed(() => {\n return [\n `${prefixCls}__input`,\n {\n [`${prefixCls}__input_disabled`]: props.searchDisabled\n }\n ]\n })\n const actionWrapperCls = computed(() => {\n return [`${prefixCls}__action-wrapper`]\n })\n const checkedButtonCls = computed(() => {\n return [\n `${prefixCls}__checked-button`,\n {\n [`${prefixCls}__checked-button_active`]: isShowingChecked.value\n }\n ]\n })\n const treeWrapperCls = computed(() => {\n return [`${prefixCls}__tree-wrapper`]\n })\n const footerCls = computed(() => {\n return [`${prefixCls}__footer`]\n })\n const footerBarCls = computed(() => {\n return [`${prefixCls}-footer-bar`]\n })\n\n return {\n wrapperCls,\n searchCls,\n checkAllWrapperCls,\n checkboxCls,\n inputWrapperCls,\n inputCls,\n actionWrapperCls,\n checkedButtonCls,\n treeWrapperCls,\n footerCls,\n footerBarCls\n }\n}\n","import { DEFAULT_TREE_PROPS } from '../tree/constants'\nimport { TREE_EVENTS } from '../tree/constants/events'\n\nexport const DEFAULT_TREE_SEARCH_PROPS = {\n ...DEFAULT_TREE_PROPS,\n searchPlaceholder: '',\n showCheckAll: true,\n showCheckedButton: true,\n checkedButtonText: '',\n showFooter: true,\n searchLength: 1,\n searchDisabled: false,\n searchRemote: false,\n searchDebounceTime: 300\n}\n\nexport const TREE_SEARCH_EVENTS = ['search', ...TREE_EVENTS]\n","<script setup lang=\"ts\">\nimport { computed, onMounted, reactive, ref, useSlots } from 'vue'\nimport { useLocale } from '../../composable'\nimport type { TreeNode } from '../tree'\nimport VTree from '../tree'\nimport { TREE_API_METHODS } from '../tree/constants'\nimport { TREE_EVENTS } from '../tree/constants/events'\nimport { getVTreeMethods } from '../tree/utils'\nimport { useTreeSearchCls } from './composable'\nimport { DEFAULT_TREE_SEARCH_PROPS, TREE_SEARCH_EVENTS } from './constants'\nimport type { TreeSearchProps } from './interface'\n\ndefineOptions({\n name: 'VTreeSearch',\n inheritAttrs: false\n})\n\nconst props = withDefaults(defineProps<TreeSearchProps>(), DEFAULT_TREE_SEARCH_PROPS)\n\n// eslint-disable-next-line vue/define-emits-declaration\nconst emit = defineEmits(['update:modelValue', ...TREE_SEARCH_EVENTS])\n\nconst { t } = useLocale()\n\nconst EXCLUDED_TREE_NODE_EVENTS = ['set-data', 'checked-change']\n\nconst slots = useSlots() as any\n\nconst treeListeners = TREE_EVENTS.reduce(\n (prev, eventName) => {\n if (!EXCLUDED_TREE_NODE_EVENTS.includes(eventName)) {\n prev[eventName] = (...args: any[]) => {\n emit(eventName, ...args)\n }\n }\n return prev\n },\n {} as Record<string, Function>\n)\n\nconst checkAllStatus = reactive({\n checked: false,\n /** 半选 */\n indeterminate: false,\n /** 禁用 */\n disabled: false\n})\nconst isShowingChecked = ref(false)\nconst keyword = ref('')\nconst debounceTimer = ref<number | undefined>(undefined)\nconst checkedCount = ref(0)\nconst treeRef = ref<InstanceType<typeof VTree> | null>(null)\n\nconst { wrapperCls, searchCls, checkAllWrapperCls, checkboxCls, inputWrapperCls, inputCls, actionWrapperCls, checkedButtonCls, treeWrapperCls, footerCls, footerBarCls } = useTreeSearchCls(props, {\n checkAllStatus,\n isShowingChecked\n})\n\nconst treeModelValue = computed({\n get: () => {\n return props.modelValue\n },\n set: newVal => {\n updateCheckedCount()\n emit('update:modelValue', newVal)\n }\n})\n\nfunction clearKeyword(): void {\n keyword.value = ''\n}\n\n/** 获取搜索关键字 */\nfunction getKeyword(): string {\n return keyword.value\n}\n\nconst placeholder = computed(() => {\n return props.searchPlaceholder || t('max.treeSearch.searchPlaceholder')\n})\n\nconst checkedButtonText = computed(() => {\n return props.checkedButtonText || t('max.treeSearch.checkedButtonText')\n})\n\n/** 执行搜索 */\nfunction search(keyword1?: string): Promise<void> {\n let searchKeyword: string = keyword1 as string\n if (typeof keyword1 !== 'string') {\n searchKeyword = keyword.value\n }\n return new Promise(resolve => {\n clearTimeout(debounceTimer.value)\n debounceTimer.value = setTimeout(() => {\n if (searchKeyword.length > 0 && searchKeyword.length < props.searchLength) return\n isShowingChecked.value = false\n emit('search', searchKeyword)\n if (typeof props.searchMethod === 'function') {\n const searchReturnValue: void | Promise<void> = props.searchMethod(searchKeyword)\n Promise.resolve(searchReturnValue).then(() => {\n updateCheckAllStatus()\n resolve()\n })\n } else {\n if (!treeRef.value) return\n if (props.searchRemote) {\n // 远程搜索\n treeRef.value.loadRootNodes().then(() => {\n updateCheckAllStatus()\n resolve()\n })\n } else {\n // 本地搜索\n treeRef.value.filter(searchKeyword)\n updateCheckAllStatus()\n resolve()\n }\n }\n }, props.searchDebounceTime) as unknown as number\n })\n}\n// #endregion Public API\n\n// #region Event handlers\n/** 处理全选点击 */\nfunction handleCheckAll(): void {\n const keyField = props.keyField\n if (props.searchDisabled || checkAllStatus.disabled || !treeRef.value || !keyField) return\n\n const currentVisibleKeys = treeRef.value.getCurrentVisibleNodes().map((node: TreeNode) => node[keyField])\n if (checkAllStatus.checked) {\n // 反选\n treeRef.value.setCheckedKeys(currentVisibleKeys, false)\n } else {\n // 全选\n treeRef.value.setCheckedKeys(currentVisibleKeys, true)\n }\n\n updateCheckAllStatus()\n}\n\n/** 处理搜索 */\nfunction handleSearch(): void {\n search()\n}\n\n/** 处理已选点击 */\nfunction handleShowChecked(): void {\n const execShowChecked = () => {\n // 处理展示已选操作\n isShowingChecked.value = !isShowingChecked.value\n if (isShowingChecked.value) {\n // 展示已选\n treeRef.value?.showCheckedNodes()\n } else {\n // 恢复展示\n treeRef.value?.filter(keyword.value, () => true)\n }\n\n updateCheckAllStatus()\n }\n\n if (keyword.value) {\n // 清空关键字\n clearKeyword()\n search().then(() => {\n execShowChecked()\n })\n } else {\n execShowChecked()\n }\n}\n\n/** 处理树数据更新 */\nfunction handleSetData(): void {\n updateCheckedCount()\n updateCheckAllStatus()\n}\n// #endregion Event handlers\n\n/** 更新全选复选框状态 */\nfunction updateCheckAllStatus(): void {\n const currentVisibleNodes = treeRef.value?.getCurrentVisibleNodes() || []\n const length = currentVisibleNodes.length\n let hasChecked = false\n let hasUnchecked = false\n let isInterrupted = false\n for (let i = 0; i < length; i++) {\n const node = currentVisibleNodes[i]\n if (node.checked) {\n hasChecked = true\n } else {\n hasUnchecked = true\n }\n if ((hasChecked && hasUnchecked) || node.indeterminate) {\n isInterrupted = true\n checkAllStatus.checked = false\n checkAllStatus.indeterminate = true\n break\n }\n }\n if (!isInterrupted) {\n checkAllStatus.checked = hasChecked\n checkAllStatus.indeterminate = false\n }\n}\n\nfunction updateCheckedCount(): void {\n checkedCount.value = treeRef.value?.getCheckedKeys().length || 0\n}\n\nfunction checkedChange(value1: any, value2: any) {\n updateCheckAllStatus()\n // eslint-disable-next-line vue/custom-event-name-casing\n emit('checked-change', value1, value2)\n}\n\nfunction onSetData() {\n // eslint-disable-next-line vue/custom-event-name-casing\n emit('set-data')\n handleSetData()\n}\nonMounted(() => {\n if (props.checkable && !checkedCount.value) {\n handleSetData()\n }\n})\n\ndefineExpose({\n ...getVTreeMethods(TREE_API_METHODS, treeRef),\n clearKeyword,\n getKeyword,\n search\n})\n</script>\n\n<template>\n <div :class=\"wrapperCls\">\n <!-- 搜索、操作区域 -->\n <div :class=\"searchCls\">\n <div v-if=\"showCheckAll && checkable\" :class=\"checkAllWrapperCls\">\n <div :class=\"checkboxCls\" @click=\"handleCheckAll\" />\n </div>\n <div :class=\"inputWrapperCls\">\n <slot name=\"search-input\">\n <input v-model=\"keyword\" type=\"text\" :class=\"inputCls\" :placeholder=\"placeholder\" :disabled=\"searchDisabled\" @input=\"handleSearch\" />\n </slot>\n </div>\n <div :class=\"actionWrapperCls\">\n <span v-if=\"showCheckedButton && checkable\" :class=\"checkedButtonCls\" @click=\"handleShowChecked\">\n {{ checkedButtonText }}\n </span>\n <slot name=\"actions\" />\n </div>\n </div>\n\n <!-- 树区域 -->\n <div :class=\"treeWrapperCls\">\n <VTree ref=\"treeRef\" v-bind=\"props\" v-model=\"treeModelValue\" v-on=\"treeListeners\" @set-data=\"onSetData\" @checked-change=\"checkedChange\">\n <template v-for=\"slot in Object.keys(slots)\" #[slot]=\"scope\">\n <slot :name=\"slot\" v-bind=\"scope\" />\n </template>\n </VTree>\n </div>\n\n <!-- 底部信息 -->\n <div v-if=\"showFooter && checkable\" :class=\"footerCls\">\n <slot name=\"footer\">\n <span :class=\"footerBarCls\">已选 {{ checkedCount }} 个</span>\n </slot>\n </div>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport TreeSearch from './TreeSearch.vue'\n\nexport const XTreeSearch: SFCWithInstall<typeof TreeSearch> = withInstall(TreeSearch)\nexport type TreeSearchInstance = InstanceType<typeof TreeSearch>\n\nexport default XTreeSearch\n\nexport * from './interface'\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport { useNamespace } from '../../../composable'\nimport type { TreeDropProps } from '../interface'\n\nexport const useTreeDropCls = (\n props: TreeDropProps,\n options: {\n dropdownVisible: Ref<boolean>\n checkedCount: Ref<number>\n selectedTitle: Ref<string>\n }\n) => {\n const { dropdownVisible, checkedCount, selectedTitle } = options\n\n const { b } = useNamespace('tree-drop')\n\n const { b: b1 } = useNamespace('tree-search')\n\n const prefixCls = b()\n\n const treeSearchPrefixCls = b1()\n\n const wrapperCls = computed(() => {\n return [`${prefixCls}__wrapper`]\n })\n const referenceCls = computed(() => {\n return [`${prefixCls}__reference`]\n })\n\n const displayInputCls = computed(() => {\n return [\n `${treeSearchPrefixCls}__input`,\n `${prefixCls}__display-input`,\n {\n [`${prefixCls}__display-input_focus`]: dropdownVisible.value,\n [`${treeSearchPrefixCls}__input_disabled`]: props.dropDisabled\n }\n ]\n })\n\n const displayInputTextCls = computed(() => {\n let showPlaceholder = false\n if (typeof props.dropPlaceholder === 'string') {\n if (props.checkable) showPlaceholder = checkedCount.value === 0\n else if (props.selectable) showPlaceholder = selectedTitle.value === ''\n }\n return [\n `${prefixCls}__display-input-text`,\n {\n [`${prefixCls}__display-input-placeholder`]: showPlaceholder\n }\n ]\n })\n\n const dropIconCls = computed(() => {\n return [\n `${prefixCls}__display-icon-drop`,\n {\n [`${prefixCls}__display-icon-drop_active`]: dropdownVisible.value\n }\n ]\n })\n\n const clearIconCls = computed(() => {\n return [`${prefixCls}__display-icon-clear`]\n })\n\n const dropdownCls = computed(() => {\n const extraClassName = Array.isArray(props.dropdownClassName) ? props.dropdownClassName : [props.dropdownClassName]\n return [`${prefixCls}__dropdown`, ...extraClassName]\n })\n\n return {\n wrapperCls,\n referenceCls,\n displayInputCls,\n displayInputTextCls,\n dropIconCls,\n clearIconCls,\n dropdownCls\n }\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { TREE_API_METHODS } from '../tree/constants'\nimport { DEFAULT_TREE_SEARCH_PROPS, TREE_SEARCH_EVENTS } from '../tree-search/constants'\n\nexport enum PlacementEnum {\n 'bottom-start' = 'bottom-start',\n 'bottom-end' = 'bottom-end',\n 'bottom' = 'bottom',\n 'top-start' = 'top-start',\n 'top-end' = 'top-end',\n 'top' = 'top'\n}\n\nexport const DEFAULT_TREE_DROP_PROPS = {\n ...DEFAULT_TREE_SEARCH_PROPS,\n dropHeight: 300,\n dropDisabled: false,\n clearable: false,\n placement: PlacementEnum['bottom-start'],\n transfer: false,\n dropdownWidthFixed: false\n}\n\nexport const TREE_SEARCH_API_METHODS = [...TREE_API_METHODS, 'clearKeyword', 'getKeyword', 'search'] as const\n\nexport const TREE_DROP_EVENTS = ['clear', 'dropdown-visible-change', ...TREE_SEARCH_EVENTS]\n","<!-- eslint-disable vue/custom-event-name-casing -->\n<!-- eslint-disable no-eq-null -->\n<!-- eslint-disable vue/define-emits-declaration -->\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, reactive, ref, useSlots, watch } from 'vue'\nimport type { TreeDropSlotProps, TreeNodeKeyType } from '../tree/interface'\nimport type { TreeNode } from '../tree/store'\nimport { getVTreeMethods } from '../tree/utils'\nimport VTreeSearch from '../tree-search'\nimport { TREE_SEARCH_EVENTS } from '../tree-search/constants'\nimport { useTreeDropCls } from './composable/use-tree-drop-cls'\nimport { DEFAULT_TREE_DROP_PROPS, TREE_DROP_EVENTS, TREE_SEARCH_API_METHODS } from './constants'\nimport type { TreeDropProps } from './interface'\n\ndefineOptions({\n name: 'VTreeDrop',\n inheritAttrs: false\n})\n\nconst props = withDefaults(defineProps<TreeDropProps>(), DEFAULT_TREE_DROP_PROPS)\n\nconst emit = defineEmits(['update:modelValue', ...TREE_DROP_EVENTS])\n\nconst EXCLUDED_TREE_NODE_EVENTS = ['set-data', 'checked-change', 'selected-change']\n\nconst slots = useSlots() as any\n\nconst treeSearchListeners = TREE_SEARCH_EVENTS.reduce(\n (prev, eventName) => {\n if (!EXCLUDED_TREE_NODE_EVENTS.includes(eventName)) {\n prev[eventName] = (...args: any[]) => {\n emit(eventName, ...args)\n }\n }\n return prev\n },\n {} as Record<string, Function>\n)\n\nconst dropdownVisible = ref(false)\nconst checkedCount = ref(0)\nconst selectedTitle = ref('')\n\nconst { wrapperCls, referenceCls, displayInputCls, displayInputTextCls, dropIconCls, clearIconCls, dropdownCls } = useTreeDropCls(props, {\n dropdownVisible,\n checkedCount,\n selectedTitle\n})\n\nconst referenceRef = ref()\nconst dropdownRef = ref()\nconst treeSearchRef = ref<InstanceType<typeof VTreeSearch> | null>(null)\nconst slotProps = reactive<TreeDropSlotProps>({\n /** 多选选中的节点 */\n checkedNodes: [] as TreeNode[],\n\n /** 多选选中的节点 key */\n checkedKeys: [] as TreeNodeKeyType[],\n\n /** 单选选中的节点 */\n selectedNode: undefined,\n\n /** 单选选中的节点 key */\n selectedKey: undefined\n})\nconst treeSearchValue = computed({\n get: () => {\n return props.modelValue\n },\n set: newVal => {\n emit('update:modelValue', newVal)\n }\n})\n\nconst displayValue = computed(() => {\n if (props.checkable) {\n if (checkedCount.value === 0 && typeof props.dropPlaceholder === 'string') return props.dropPlaceholder\n return `已选 ${checkedCount.value} 个`\n } else if (props.selectable) {\n if (selectedTitle.value === '' && typeof props.dropPlaceholder === 'string') return props.dropPlaceholder\n return selectedTitle.value\n }\n return props.dropPlaceholder || ''\n})\nconst showClearIcon = computed(() => {\n if (props.checkable) return checkedCount.value !== 0\n else if (props.selectable) return selectedTitle.value !== ''\n return false\n})\nfunction locateDropdown(): void {\n const referenceRect = referenceRef.value.getBoundingClientRect()\n const referenceWidth = referenceRect.width\n const referenceHeight = referenceRect.height\n\n // Set dropdown width\n const minWidth = `${typeof props.dropdownMinWidth === 'number' ? props.dropdownMinWidth : referenceWidth}px`\n dropdownRef.value.style.minWidth = minWidth\n dropdownRef.value.style.width = props.dropdownWidthFixed ? minWidth : 'auto'\n\n const dropdownRect = dropdownRef.value.getBoundingClientRect()\n const dropdownStyleDeclaration = window.getComputedStyle(dropdownRef.value)\n const dropdownMarginHorizontal = Number.parseFloat(dropdownStyleDeclaration.marginLeft) + Number.parseFloat(dropdownStyleDeclaration.marginRight)\n const dropdownMarginVertical = Number.parseFloat(dropdownStyleDeclaration.marginTop) + Number.parseFloat(dropdownStyleDeclaration.marginBottom)\n const dropdownWidth = dropdownRect.width + dropdownMarginHorizontal\n // 0.8 这个值写在 css 里,因为有动画,所以获取到的是 scaleY 变换后的值\n const dropdownHeight = dropdownRect.height / 0.8 + dropdownMarginVertical\n let top = 0\n let left = 0\n if (props.transfer) {\n top = -999\n left = -999\n }\n switch (props.placement) {\n case 'bottom-start':\n if (props.transfer) {\n top = window.pageYOffset + referenceRect.bottom\n left = window.pageXOffset + referenceRect.left\n } else {\n top = referenceHeight\n }\n break\n case 'bottom-end':\n if (props.transfer) {\n top = window.pageYOffset + referenceRect.bottom\n left = window.pageXOffset + referenceRect.right - dropdownWidth\n } else {\n top = referenceHeight\n left = referenceWidth - dropdownWidth\n }\n break\n case 'bottom':\n if (props.transfer) {\n top = window.pageYOffset + referenceRect.bottom\n left = window.pageXOffset + referenceRect.left + (referenceWidth - dropdownWidth) / 2\n } else {\n top = referenceHeight\n left = (referenceWidth - dropdownWidth) / 2\n }\n break\n case 'top-start':\n if (props.transfer) {\n top = window.pageYOffset + referenceRect.top - dropdownHeight\n left = window.pageXOffset + referenceRect.left\n } else {\n top = -dropdownHeight\n }\n break\n case 'top-end':\n if (props.transfer) {\n top = window.pageYOffset + referenceRect.top - dropdownHeight\n left = window.pageXOffset + referenceRect.right - dropdownWidth\n } else {\n top = -dropdownHeight\n left = referenceWidth - dropdownWidth\n }\n break\n case 'top':\n if (props.transfer) {\n top = window.pageYOffset + referenceRect.top - dropdownHeight\n left = window.pageXOffset + referenceRect.left + (referenceWidth - dropdownWidth) / 2\n } else {\n top = -dropdownHeight\n left = (referenceWidth - dropdownWidth) / 2\n }\n break\n default:\n break\n }\n\n dropdownRef.value.style.top = `${top}px`\n dropdownRef.value.style.left = `${left}px`\n}\n\n// #region Event handlers\nfunction handleRefClick(): void {\n if (props.dropDisabled) return\n dropdownVisible.value = !dropdownVisible.value\n}\nfunction handleDocumentClick(e: MouseEvent): void {\n if (!referenceRef.value?.contains(e.target as Node) && !dropdownRef.value?.contains(e.target as Node)) {\n dropdownVisible.value = false\n }\n}\nfunction handleClear(): void {\n emit('clear')\n if (props.checkable) {\n treeSearchRef.value?.clearChecked()\n } else if (props.selectable) {\n treeSearchRef.value?.clearSelected()\n }\n}\nfunction handleCheckedChange(nodes: TreeNode[], keys: TreeNodeKeyType[]): void {\n slotProps.checkedNodes = nodes\n slotProps.checkedKeys = keys\n checkedCount.value = keys.length\n emit('checked-change', nodes, keys)\n}\nfunction handleSelectedChange(node?: TreeNode, key?: TreeNodeKeyType): void {\n slotProps.selectedNode = node\n slotProps.selectedKey = key\n\n if (node) {\n const titleField = props.titleField\n if (titleField) {\n selectedTitle.value = node[titleField]\n }\n } else if (key) {\n selectedTitle.value = key as string\n } else {\n selectedTitle.value = ''\n }\n dropdownVisible.value = false\n emit('selected-change', node, key)\n}\n\n/** 处理树数据更新 */\nfunction handleSetData(): void {\n slotProps.checkedNodes = treeSearchRef.value?.getCheckedNodes() || []\n slotProps.checkedKeys = treeSearchRef.value?.getCheckedKeys() || []\n slotProps.selectedNode = treeSearchRef.value?.getSelectedNode() || undefined\n slotProps.selectedKey = treeSearchRef.value?.getSelectedKey() || undefined\n\n if (props.checkable) {\n checkedCount.value = slotProps.checkedKeys.length\n }\n if (props.selectable) {\n if (props.modelValue != null) {\n const node = treeSearchRef.value?.getNode(props.modelValue as TreeNodeKeyType)\n if (node) {\n const titleField = props.titleField\n if (titleField) {\n selectedTitle.value = node[titleField]\n }\n } else {\n selectedTitle.value = props.modelValue as any\n }\n }\n }\n}\nonMounted(() => {\n document.addEventListener('click', handleDocumentClick)\n if (props.transfer) {\n document.body.appendChild(dropdownRef.value)\n }\n handleSetData()\n})\nwatch(\n () => dropdownVisible.value,\n newVal => {\n emit('dropdown-visible-change', newVal)\n if (newVal) {\n nextTick(() => {\n locateDropdown()\n })\n } else if (treeSearchRef.value?.getKeyword()) {\n treeSearchRef.value.clearKeyword()\n treeSearchRef.value.search()\n }\n }\n)\n// #endregion\n\ndefineExpose({\n ...getVTreeMethods(TREE_SEARCH_API_METHODS, treeSearchRef)\n})\n</script>\n\n<template>\n <div :class=\"wrapperCls\">\n <!-- 展示框 -->\n <div ref=\"referenceRef\" :class=\"referenceCls\" @click=\"handleRefClick\">\n <slot v-bind=\"slotProps\">\n <div :class=\"displayInputCls\">\n <span :class=\"displayInputTextCls\">\n <slot name=\"display\" v-bind=\"slotProps\">\n {{ displayValue }}\n </slot>\n </span>\n <template v-if=\"!dropDisabled\">\n <i :class=\"dropIconCls\" />\n <slot v-if=\"clearable && showClearIcon\" name=\"clear\">\n <i :class=\"clearIconCls\" @click.stop=\"handleClear\" />\n </slot>\n </template>\n </div>\n </slot>\n </div>\n\n <!-- 下拉框 -->\n <Transition name=\"imax-dropdown\">\n <div\n v-show=\"dropdownVisible\"\n ref=\"dropdownRef\"\n :class=\"dropdownCls\"\n :style=\"{\n height: `${dropHeight}px`\n }\"\n >\n <VTreeSearch ref=\"treeSearchRef\" v-bind=\"props\" v-model=\"treeSearchValue\" v-on=\"treeSearchListeners\" @set-data=\"handleSetData\" @checked-change=\"handleCheckedChange\" @selected-change=\"handleSelectedChange\">\n <template v-for=\"item in Object.keys(slots)\" #[item]=\"data\">\n <slot :name=\"item\" v-bind=\"data\" />\n </template>\n </VTreeSearch>\n </div>\n </Transition>\n </div>\n</template>\n","import type { SFCWithInstall } from '@maxax/utils'\nimport { withInstall } from '@maxax/utils'\nimport TreeDrop from './TreeDrop.vue'\n\nexport const XTreeDrop: SFCWithInstall<typeof TreeDrop> = withInstall(TreeDrop)\nexport type TreeDropInstance = InstanceType<typeof TreeDrop>\n\nexport default XTreeDrop\n\nexport * from './interface'\n","import type { Plugin } from 'vue'\nimport { XBasicArrow } from './components/basic-arrow'\nimport { XBasicButton } from './components/basic-button'\nimport { XBasicButtonGroup } from './components/basic-button-group'\nimport { XBasicCard } from './components/basic-card'\nimport { XBasicCascader } from './components/basic-cascader'\nimport { XBasicCheckbox } from './components/basic-checkbox'\nimport { XBasicCheckboxGroup } from './components/basic-checkbox-group'\nimport { XBasicCol } from './components/basic-col'\nimport { XBasicCountTo } from './components/basic-count-to'\nimport { XBasicDatePicker } from './components/basic-date-picker'\nimport { XBasicDragVerify } from './components/basic-drag-verify'\nimport { XBasicDrawer } from './components/basic-drawer'\nimport { XBasicEditBatch } from './components/basic-edit-batch'\nimport { XBasicFontIcon } from './components/basic-font-icon'\nimport { XBasicForm } from './components/basic-form'\nimport { XBasicGradientTitle } from './components/basic-gradient-title'\nimport { XBasicHelp } from './components/basic-help'\nimport { XBasicHidden } from './components/basic-hidden'\nimport { XBasicIconOnline } from './components/basic-icon-online'\nimport { XBasicIconPicker } from './components/basic-icon-picker'\nimport { XBasicListPage } from './components/basic-list-page'\nimport { XBasicLoading } from './components/basic-loading'\nimport { XBasicMessageBox } from './components/basic-message-box'\nimport { XBasicModal } from './components/basic-modal'\nimport { XBasicNotification } from './components/basic-notification'\nimport { XBasicPage } from './components/basic-page'\nimport { XBasicPanel } from './components/basic-panel'\nimport { XBasicRadioGroup } from './components/basic-radio-group'\nimport { XBasicRow } from './components/basic-row'\nimport { XBasicScrollText } from './components/basic-scroll-text'\nimport { XBasicSelect } from './components/basic-select'\nimport { XBasicSubPanel } from './components/basic-sub-panel'\nimport { XBasicSvgIcon } from './components/basic-svg-icon'\nimport { XBasicTable } from './components/basic-table'\nimport { XBasicTag } from './components/basic-tag'\nimport { XBasicText } from './components/basic-text'\nimport { XBasicTitle } from './components/basic-title'\nimport { XBasicUpload } from './components/basic-upload'\nimport { XBasicUploadDragger } from './components/basic-upload-dragger'\nimport { XBasicViewBar } from './components/basic-view-bar'\nimport { XConfigProvider } from './components/config-provider'\nimport { XTree } from './components/tree'\nimport { XTreeDrop } from './components/tree-drop'\nimport { XTreeNode } from './components/tree-node'\nimport { XTreeSearch } from './components/tree-search'\n\nexport const components = [\n XConfigProvider,\n XBasicSvgIcon,\n XBasicArrow,\n XBasicButton,\n XBasicHidden,\n XBasicTag,\n XBasicText,\n XBasicHelp,\n XBasicTitle,\n XBasicScrollText,\n XBasicGradientTitle,\n XBasicDrawer,\n XBasicModal,\n XBasicPage,\n XBasicRadioGroup,\n XBasicCheckboxGroup,\n XBasicCheckbox,\n XBasicForm,\n XBasicTable,\n XBasicPanel,\n XBasicSubPanel,\n XBasicRow,\n XBasicCol,\n XTree,\n XTreeNode,\n XTreeSearch,\n XTreeDrop,\n XBasicViewBar,\n XBasicButtonGroup,\n XBasicUpload,\n XBasicUploadDragger,\n XBasicDatePicker,\n XBasicMessageBox,\n XBasicNotification,\n XBasicLoading,\n XBasicDragVerify,\n XBasicSelect,\n XBasicCascader,\n XBasicEditBatch,\n XBasicCountTo,\n XBasicFontIcon,\n XBasicIconOnline,\n XBasicIconPicker,\n XBasicListPage,\n XBasicCard\n] as Plugin[]\n\nexport default components\n","import type { App, Plugin } from 'vue'\nimport type { ConfigProviderContext } from './components/config-provider'\nimport { provideGlobalConfig } from './components/config-provider'\n\ntype AppWithInstall = App & {\n INSTALLED_KEY?: boolean\n}\n\nexport const makeInstaller = (components: Plugin[] = []) => {\n const install = (app: AppWithInstall, options?: ConfigProviderContext) => {\n if (app.INSTALLED_KEY) return\n app.INSTALLED_KEY = true\n components.forEach(component => {\n app.use(component)\n })\n\n if (options) provideGlobalConfig(options, app, true)\n }\n\n return {\n install\n }\n}\n","import { components } from './component'\nimport { makeInstaller } from './make-installer'\n\nexport const installer = makeInstaller([...components])\n","import { installer } from './defaults'\n\nexport * from './components'\nexport * from './composable'\nexport * from './make-installer'\nexport const install = installer.install\n\nexport default installer\n"],"names":["isString","key","camelize","isNumber","addClass","nextTick","removeClass","Comment","Fragment","Text","isVNode","onMounted","watchEffect","onBeforeUnmount","inject","ref","buildLocaleContext","computed","zhCN","useBoolean","shallowRef","getCurrentInstance","unref","pascalCase","isRef","isClient","hasClass","scrollBarWidth","watch","onScopeDispose","toRaw","ROW_KEY","PAGE_SIZE_OPTIONS","PAGE_SIZE","FETCH_SETTING","storage","index","attributes","match","simpleNames","send","h","defineComponent","onUnmounted","useAttrs","_openBlock","_createElementBlock","_mergeProps","_unref","_createElementVNode","_Fragment","_createBlock","withInstall","BasicSvgIcon","_createVNode","BasicArrow","NButton","_renderSlot","BasicButton","name","props","basicOverlayProps","emits","setup","emit","slots","b","useNamespace","onMaskClick","e","onClick","onMousedown","onMouseup","useSameTarget","customMaskEvent","undefined","mask","overlayClass","zIndex","default","position","top","right","bottom","left","provide","merge","configProviderProps","config","provideGlobalConfig","NInput","BasicOverlay","reactive","guid","isFunction","_a","toRefs","_Transition","_withDirectives","_normalizeClass","_normalizeStyle","_withModifiers","_createCommentVNode","_createTextVNode","_toDisplayString","_withKeys","_resolveDynamicComponent","isElement","createVNode","render","isObject","isUndefined","_isSlot","s","Object","prototype","toString","call","_isVNode","schema","type","buttonGroupActionType","buttonGroupProps","$loading","getValues","mergeDynamicData","field","values","getComponentsProps","componentProps","getDisable","disabled","globDisabled","dynamicDisabled","itemDisabled","Boolean","isBoolean","getLoading","loading","itemLoading","dynamicLoading","value","getShow","show","ifShow","isShow","isIfShow","renderButtonLabel","label","getLabel","renderComponent","renderComponentContent","size","propsData","clearable","on","ev","validate","interceptor","Promise","then","res","finally","compAttr","_slot","compSlot","renderItem","slot","suffix","prefix","opts","showSuffix","getSuffix","showPrefix","getPrefix","getContent","getSlot","colSlot","renderColContent","_vShow","cloneDeep","isArray","deepMerge","uniqBy","useSlots","_renderList","ButtonGroupItem","_withCtx","BasicButtonGroup","toRef","useMergedState","XBasicSvgIcon","BasicText","_createSlots","_normalizeProps","_guardReactiveProps","BasicCard","fetch","get","NCascader","BasicCascader","components","IconCheck","IconHover","basicCheckboxProps","_value","change","_ev","is","modelValue","checkboxRef","checkboxGroupCtx","uninjectGroupContext","basicCheckboxGroupKey","isGroup","$checked","defaultChecked","computedValue","computedChecked","includes","mergedDisabled","isMaxed","handleChange","checked","target","newValue","set","Set","add","delete","Array","from","cls","indeterminate","handleClick","stopPropagation","isNull","labelHoverRender","checkbox","basicCheckboxGroupProps","t","useLocale","$value","defaultValue","max","length","options","map","option","allChecked","updateAllChecked","showCheckboxAll","totalOptions","checkedOptions","handleSelectAll","direction","curValue","immediate","context","createBasicCheckboxGroupContext","renderOptions","BasicCheckbox","data","renderSelectAll","parseFlex","flex","test","sizes","compatConfig","MODE","inheritAttrs","basicColProps","attrs","m","gutter","supportFlexGap","wrap","useBasicRowContext","classes","span","order","offset","push","pull","pre","sizeClassObj","forEach","sizeProps","propSize","classNames","class","mergedStyle","gutterVal","style","horizontalGutter","paddingLeft","paddingRight","verticalGutter","paddingTop","paddingBottom","minWidth","getCurrentScope","toValue","shallowReadonly","now","transition","separator","BasicCountTo","format","BasicDatePicker","basicDragVerifyProps","expose","state","isMoving","isPassing","moveDistance","toLeft","startTime","endTime","wrapElRef","barElRef","contentElRef","actionElRef","useEventListener","el","document","listener","resume","getActionStyleRef","height","actionStyle","width","getWrapStyleRef","circle","wrapStyle","lineHeight","borderRadius","getBarStyleRef","barStyle","getContentStyleRef","contentStyle","textRef","text","successTextRef","successText","time","toFixed","getEventPageX","event","pageX","touches","handleDragStart","actionEl","parseInt","replace","Date","getTime","getOffset","actionWidth","handleDragMoving","barEl","moveX","isSlot","checkPass","handleDragOver","setTimeout","contentEl","useTimeoutFn","renderBar","renderContent","renderAction","BasicDragVerify","basicHelpProps","renderTrigger","renderDefault","textList","showIndex","NTooltip","trigger","BasicHelp","BasicTitle","NDrawer","NDrawerContent","$slots","_hoisted_1","BasicDrawer","BasicHidden","basicRadioProps","radioRef","radioGroupCtx","basicRadioGroupKey","mergedValueRef","preValue","radio","basicRadioGroupProps","uncontrolledValueRef","controlledValueRef","onChange","onUpdateValue","_onUpdateValue","XBasicRadio","createBasicRadioGroupContext","getValueKey","omit","NSelect","BasicSelect","componentMap","NInputNumber","NUpload","NAutoComplete","NDynamicTags","NTreeSelect","NDatePicker","NTimePicker","NSwitch","NCheckbox","NCheckboxGroup","NRadio","NRadioButton","NRadioGroup","NSlider","NTransfer","NDivider","NColorPicker","NRate","DEFAULT_VALUE_COMPONENTS","DEFAULT_VALUE_ARRAY","CHECK_VALUE_EVENT_COMPONENTS","CHANGE_VALUE_EVENT_COMPONENTS","DATE_RANGE_TYPE","getComponentsEventTrigger","getComponentDefaultValue","itemIsDateRangeComponent","itemIsDateComponent","itemIsUploadComponent","isIncludeSimpleComponents","checkIsRangeSlider","checkIsInput","XBasicHelp","editBatchProps","allDefaultValues","formModel","setFormModel","Function","editBatchActionType","model","getReadonly","readonly","globReadonly","dynamicReadonly","itemReadonly","component","createPlaceholderMessage","isComponentEditBatchSchema","customRenderComponent","changeEvent","valueField","valueFormat","autoSetPlaceHolder","isCheck","bindValueField","eventKey","valueFormatted","filterable","args","Comp","isCreatePlaceholder","placeholder","codeField","formValues","bindValueValue","dayjs","valueOf","item","bindValue","renderLabelHelpMessage","helpMessage","helpComponentProps","getHelpMessage","formApi","editBatchItemProps","has","tryConstructArray","getDefaultValue","isNil","tryDeconstructArray","tryDeconstructObject","unset","isEmpty","BatchEditItem","EditBatchAction","BasicEditBatch","basicFontIconProps","keys","iconType","icon","basicScrollTextProps","outer","inner","needToScroll","getWidth","getBoundingClientRect","isScroll","outerWidth","innerWidth","animation","flush","content","BasicScrollText","XBasicTitle","formProps","formActionType","isAdvanced","showAdvancedButton","itemIsAdvanced","handleRules","rules","defRules","rulesMessageJoinLabel","dynamicRules","required","globalRulesMessageJoinLabel","joinLabel","Reflect","assertLabel","defaultMsg","getRequired","validator","rule","msg","message","reject","trim","halfChecked","resolve","NO_AUTO_LINK_COMPONENTS","requiredIndex","findIndex","requiredRuleIndex","renderMessage","whitespace","setComponentRuleType","characterInx","val","isComponentFormSchema","subLabel","renderLabel","itemProps","basicTitleProps","level","dot","margin","formItemProps","path","NFormItem","_slot2","colProps","baseColProps","realColProps","NCol","useBreakpoint","isPascalCase","isPlainObject","FormItem","FormAction","BasicForm","BasicGradientTitle","basicIconOnlineProps","outline","IconifyIcon","NPopover","NTabs","NTabPane","NScrollbar","NEmpty","NPagination","BasicIconPicker","parseRowKeyValue","useDataSource","mergeArray","useLoading","usePagination","NSpin","BasicListPage","Transition","withCtx","withDirectives","vShow","createApp","close","getStyle","kebabCase","NModal","NCard","BasicModal","vm","NotificationConstructor","BasicNotification","BasicPage","BasicPanel","basicRowProps","prefixCls","token","responsiveObserve","useResponsiveObserve","screens","xs","sm","md","lg","xl","xxl","xxxl","curScreens","mergePropsByScreen","oriProp","i","responsiveArray","breakpoint","curVal","mergeAlign","mergeJustify","useFlexGapSupport","subscribe","screen","currentGutter","unsubscribe","results","propsGutter","normalizedGutter","g","createBasicRowContext","rowStyle","gt","marginLeft","marginRight","rowGap","marginTop","marginBottom","BasicSubPanel","globalConfig","handleFieldColumn","columns","column","handleIndexColumn","propsRef","getPaginationRef","showIndexColumn","treeConfig","pushIndexColumns","indIndex","splice","isFixedLeft","some","fixed","unshift","align","rowIndex","getPagination","currentPage","pageSize","seq","filterDefaultHiddenColum","filterFunc","defaultHidden","viewColumns","filter","list","current","children","shift","useColumns","columnsRef","cacheColumns","getColumnsRef","$isIfShow","getViewColumns","setCacheColumnsByField","assign","setColumns","columnList","firstColumn","cacheKeys","columnKeys","newColumns","isEqual","sort","prev","next","indexOf","getColumns","opt","ignoreIndex","ignoreAction","getCacheColumns","setCacheColumns","concat","findNodeAll","calculate","VxeGrid","BasicTable","BasicTag","basicUploadCoreProps","uid","getUid","reqs","fileInput","isMounted","processFile","file","fileList","beforeUpload","transformedFile","console","warn","origin","parsedFile","action","mergedAction","mergedData","parsedData","File","mergedParsedFile","post","onStart","customRequest","headers","withCredentials","method","request","defaultRequest","requestOption","filename","onProgress","onSuccess","ret","xhr","onError","err","reset","abort","uploadFiles","files","originFiles","postFiles","all","onBatchStart","accept","directory","acceptedFiles","attrAccept","click","onKeyDown","onFileDrop","multiple","preventDefault","traverseFileTree","slice","dataTransfer","items","_file","partition","successFiles","errorFiles","onReject","componentTag","Tag","id","capture","openFileDialogOnClick","onMouseenter","onMouseleave","otherProps","dirProps","webkitdirectory","eventsFat","onKeydown","onDrop","onDragover","tabindex","events","pickAttrs","aria","display","uploader","AjaxUpload","basicUploadListItemProps","namespace","showProgress","progressRafRef","clearTimeout","mergedStatus","status","transitionProps","getTransitionProps","listType","progress","progressProps","iconRender","actionIconRender","itemRender","isImgUrl","showPreviewIcon","showRemoveIcon","showDownloadIcon","previewIcon","customPreviewIcon","removeIcon","customRemoveIcon","downloadIcon","customDownloadIcon","onPreview","onDownload","onClose","className","iconNode","thumbUrl","url","uploadingClassName","thumbnail","crossOrigin","aClassName","infoUploadingClass","linkProps","JSON","parse","removeActionIconRenderer","customIcon","callback","title","downloadActionIconRenderer","downloadOrDelete","picture","listItemNameClass","fileName","previewStyle","pointerEvents","opacity","pictureCardActions","dom","NProgress","percent","listContainerNameClass","response","error","statusText","originNode","actions","download","bind","preview","remove","HackSlot","_","filterEmpty","basicUploadListProps","motionAppear","mergedItems","deep","hasUpdate","window","FileReader","originFileObj","Blob","previewFile","previewDataUrl","triggerRef","onInternalPreview","onInternalDownload","open","onInternalClose","onRemove","internalIconRender","isLoading","fileIcon","isImageUrl","handlePreview","handleDownload","listClassNames","transitionGroupProps","motion","collapseMotion","onAfterAppear","onAfterEnter","onAfterLeave","motionConfig","getTransitionGroupProps","appear","appendAction","appendActionVisible","appendActionDom","TransitionGroup","XBasicUploadListItem","LIST_IGNORE","basicUploadProps","mergedFileList","setMergedFileList","defaultFileList","postState","timestamp","isFrozen","dragState","upload","onInternalChange","changedFileList","cloneList","maxCount","changeInfo","mergedBeforeUpload","fileListArgs","transformFile","result","defineProperty","configurable","batchFileInfoList","filteredFileInfoList","info","objectFileList","file2Obj","newFileList","fileObj","updateFileList","triggerFileObj","clone","lastModifiedDate","lastModified","getFileItem","targetItem","nextFileList","handleRemove","currentFile","mergedRemove","removedFileList","removeFileItem","matchKey","renderUploadList","button","buttonVisible","showUploadList","XBasicUploadList","styleName","transAttrs","rcUploadProps","rtlCls","dragCls","XBasicUploadCore","uploadButtonCls","flattenChildren","renderUploadButton","uploadButtonStyle","basicUploadDraggerProps","restProps","restAttrs","draggerProps","XBasicUpload","BasicViewBar","ignoreEnum","verticalPositionEnum","dragHoverPartEnum","showLineType","_toHandlers","TreeNode","valueCache","VTreeNode","Tree","TreeSearch","TreeDrop","install"],"mappings":"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EAEtB,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA;AAAA,EAGF,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA;AAAA,EAGF,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA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","x_google_ignoreList":[19,26,66,67]}
|