@miaixz/ui 0.5.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/LICENSE +202 -0
- package/NOTICE +7 -0
- package/README.md +190 -0
- package/dist/accessibility/focus-scope.d.ts +57 -0
- package/dist/accessibility/focus-scope.d.ts.map +1 -0
- package/dist/accessibility/focus-scope.js +272 -0
- package/dist/accessibility/focus-scope.js.map +1 -0
- package/dist/accessibility/index.d.ts +2 -0
- package/dist/accessibility/index.d.ts.map +1 -0
- package/dist/accessibility/index.js +2 -0
- package/dist/accessibility/index.js.map +1 -0
- package/dist/components/alert/alert.d.ts +8 -0
- package/dist/components/alert/alert.d.ts.map +1 -0
- package/dist/components/alert/alert.js +24 -0
- package/dist/components/alert/alert.js.map +1 -0
- package/dist/components/alert/alert.types.d.ts +43 -0
- package/dist/components/alert/alert.types.d.ts.map +1 -0
- package/dist/components/alert/alert.types.js +2 -0
- package/dist/components/alert/alert.types.js.map +1 -0
- package/dist/components/alert/index.d.ts +4 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/index.js +2 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/avatar/avatar.d.ts +8 -0
- package/dist/components/avatar/avatar.d.ts.map +1 -0
- package/dist/components/avatar/avatar.js +29 -0
- package/dist/components/avatar/avatar.js.map +1 -0
- package/dist/components/avatar/avatar.types.d.ts +35 -0
- package/dist/components/avatar/avatar.types.d.ts.map +1 -0
- package/dist/components/avatar/avatar.types.js +2 -0
- package/dist/components/avatar/avatar.types.js.map +1 -0
- package/dist/components/avatar/index.d.ts +4 -0
- package/dist/components/avatar/index.d.ts.map +1 -0
- package/dist/components/avatar/index.js +2 -0
- package/dist/components/avatar/index.js.map +1 -0
- package/dist/components/badge/badge.d.ts +8 -0
- package/dist/components/badge/badge.d.ts.map +1 -0
- package/dist/components/badge/badge.js +12 -0
- package/dist/components/badge/badge.js.map +1 -0
- package/dist/components/badge/badge.types.d.ts +37 -0
- package/dist/components/badge/badge.types.d.ts.map +1 -0
- package/dist/components/badge/badge.types.js +2 -0
- package/dist/components/badge/badge.types.js.map +1 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js +2 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +14 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.js +22 -0
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.types.d.ts +30 -0
- package/dist/components/breadcrumb/breadcrumb.types.d.ts.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.types.js +2 -0
- package/dist/components/breadcrumb/breadcrumb.types.js.map +1 -0
- package/dist/components/breadcrumb/index.d.ts +3 -0
- package/dist/components/breadcrumb/index.d.ts.map +1 -0
- package/dist/components/breadcrumb/index.js +2 -0
- package/dist/components/breadcrumb/index.js.map +1 -0
- package/dist/components/button/button.d.ts +8 -0
- package/dist/components/button/button.d.ts.map +1 -0
- package/dist/components/button/button.js +16 -0
- package/dist/components/button/button.js.map +1 -0
- package/dist/components/button/button.types.d.ts +99 -0
- package/dist/components/button/button.types.d.ts.map +1 -0
- package/dist/components/button/button.types.js +2 -0
- package/dist/components/button/button.types.js.map +1 -0
- package/dist/components/button/index.d.ts +3 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +2 -0
- package/dist/components/button/index.js.map +1 -0
- package/dist/components/checkbox/checkbox.d.ts +8 -0
- package/dist/components/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.js +18 -0
- package/dist/components/checkbox/checkbox.js.map +1 -0
- package/dist/components/checkbox/checkbox.types.d.ts +23 -0
- package/dist/components/checkbox/checkbox.types.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.types.js +2 -0
- package/dist/components/checkbox/checkbox.types.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +3 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/index.js +2 -0
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/components/combobox/combobox.d.ts +123 -0
- package/dist/components/combobox/combobox.d.ts.map +1 -0
- package/dist/components/combobox/combobox.js +378 -0
- package/dist/components/combobox/combobox.js.map +1 -0
- package/dist/components/combobox/combobox.types.d.ts +108 -0
- package/dist/components/combobox/combobox.types.d.ts.map +1 -0
- package/dist/components/combobox/combobox.types.js +2 -0
- package/dist/components/combobox/combobox.types.js.map +1 -0
- package/dist/components/combobox/index.d.ts +3 -0
- package/dist/components/combobox/index.d.ts.map +1 -0
- package/dist/components/combobox/index.js +2 -0
- package/dist/components/combobox/index.js.map +1 -0
- package/dist/components/confirm-dialog/confirm-dialog.d.ts +10 -0
- package/dist/components/confirm-dialog/confirm-dialog.d.ts.map +1 -0
- package/dist/components/confirm-dialog/confirm-dialog.js +70 -0
- package/dist/components/confirm-dialog/confirm-dialog.js.map +1 -0
- package/dist/components/confirm-dialog/confirm-dialog.types.d.ts +63 -0
- package/dist/components/confirm-dialog/confirm-dialog.types.d.ts.map +1 -0
- package/dist/components/confirm-dialog/confirm-dialog.types.js +2 -0
- package/dist/components/confirm-dialog/confirm-dialog.types.js.map +1 -0
- package/dist/components/confirm-dialog/index.d.ts +3 -0
- package/dist/components/confirm-dialog/index.d.ts.map +1 -0
- package/dist/components/confirm-dialog/index.js +2 -0
- package/dist/components/confirm-dialog/index.js.map +1 -0
- package/dist/components/data-table/data-table.d.ts +9 -0
- package/dist/components/data-table/data-table.d.ts.map +1 -0
- package/dist/components/data-table/data-table.js +198 -0
- package/dist/components/data-table/data-table.js.map +1 -0
- package/dist/components/data-table/data-table.types.d.ts +127 -0
- package/dist/components/data-table/data-table.types.d.ts.map +1 -0
- package/dist/components/data-table/data-table.types.js +2 -0
- package/dist/components/data-table/data-table.types.js.map +1 -0
- package/dist/components/data-table/index.d.ts +3 -0
- package/dist/components/data-table/index.d.ts.map +1 -0
- package/dist/components/data-table/index.js +2 -0
- package/dist/components/data-table/index.js.map +1 -0
- package/dist/components/dialog/dialog.d.ts +8 -0
- package/dist/components/dialog/dialog.d.ts.map +1 -0
- package/dist/components/dialog/dialog.js +45 -0
- package/dist/components/dialog/dialog.js.map +1 -0
- package/dist/components/dialog/dialog.types.d.ts +57 -0
- package/dist/components/dialog/dialog.types.d.ts.map +1 -0
- package/dist/components/dialog/dialog.types.js +2 -0
- package/dist/components/dialog/dialog.types.js.map +1 -0
- package/dist/components/dialog/index.d.ts +3 -0
- package/dist/components/dialog/index.d.ts.map +1 -0
- package/dist/components/dialog/index.js +2 -0
- package/dist/components/dialog/index.js.map +1 -0
- package/dist/components/divider/divider.d.ts +8 -0
- package/dist/components/divider/divider.d.ts.map +1 -0
- package/dist/components/divider/divider.js +12 -0
- package/dist/components/divider/divider.js.map +1 -0
- package/dist/components/divider/divider.types.d.ts +22 -0
- package/dist/components/divider/divider.types.d.ts.map +1 -0
- package/dist/components/divider/divider.types.js +2 -0
- package/dist/components/divider/divider.types.js.map +1 -0
- package/dist/components/divider/index.d.ts +3 -0
- package/dist/components/divider/index.d.ts.map +1 -0
- package/dist/components/divider/index.js +2 -0
- package/dist/components/divider/index.js.map +1 -0
- package/dist/components/drawer/drawer.d.ts +8 -0
- package/dist/components/drawer/drawer.d.ts.map +1 -0
- package/dist/components/drawer/drawer.js +45 -0
- package/dist/components/drawer/drawer.js.map +1 -0
- package/dist/components/drawer/drawer.types.d.ts +69 -0
- package/dist/components/drawer/drawer.types.d.ts.map +1 -0
- package/dist/components/drawer/drawer.types.js +2 -0
- package/dist/components/drawer/drawer.types.js.map +1 -0
- package/dist/components/drawer/index.d.ts +3 -0
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/drawer/index.js +2 -0
- package/dist/components/drawer/index.js.map +1 -0
- package/dist/components/dropdown/dropdown.d.ts +26 -0
- package/dist/components/dropdown/dropdown.d.ts.map +1 -0
- package/dist/components/dropdown/dropdown.js +70 -0
- package/dist/components/dropdown/dropdown.js.map +1 -0
- package/dist/components/dropdown/dropdown.types.d.ts +83 -0
- package/dist/components/dropdown/dropdown.types.d.ts.map +1 -0
- package/dist/components/dropdown/dropdown.types.js +2 -0
- package/dist/components/dropdown/dropdown.types.js.map +1 -0
- package/dist/components/dropdown/index.d.ts +3 -0
- package/dist/components/dropdown/index.d.ts.map +1 -0
- package/dist/components/dropdown/index.js +2 -0
- package/dist/components/dropdown/index.js.map +1 -0
- package/dist/components/dropzone/dropzone.d.ts +8 -0
- package/dist/components/dropzone/dropzone.d.ts.map +1 -0
- package/dist/components/dropzone/dropzone.js +98 -0
- package/dist/components/dropzone/dropzone.js.map +1 -0
- package/dist/components/dropzone/dropzone.types.d.ts +40 -0
- package/dist/components/dropzone/dropzone.types.d.ts.map +1 -0
- package/dist/components/dropzone/dropzone.types.js +2 -0
- package/dist/components/dropzone/dropzone.types.js.map +1 -0
- package/dist/components/dropzone/index.d.ts +3 -0
- package/dist/components/dropzone/index.d.ts.map +1 -0
- package/dist/components/dropzone/index.js +2 -0
- package/dist/components/dropzone/index.js.map +1 -0
- package/dist/components/empty-state/empty-state.d.ts +8 -0
- package/dist/components/empty-state/empty-state.d.ts.map +1 -0
- package/dist/components/empty-state/empty-state.js +13 -0
- package/dist/components/empty-state/empty-state.js.map +1 -0
- package/dist/components/empty-state/empty-state.types.d.ts +37 -0
- package/dist/components/empty-state/empty-state.types.d.ts.map +1 -0
- package/dist/components/empty-state/empty-state.types.js +2 -0
- package/dist/components/empty-state/empty-state.types.js.map +1 -0
- package/dist/components/empty-state/index.d.ts +3 -0
- package/dist/components/empty-state/index.d.ts.map +1 -0
- package/dist/components/empty-state/index.js +2 -0
- package/dist/components/empty-state/index.js.map +1 -0
- package/dist/components/file-upload/file-upload.d.ts +8 -0
- package/dist/components/file-upload/file-upload.d.ts.map +1 -0
- package/dist/components/file-upload/file-upload.js +359 -0
- package/dist/components/file-upload/file-upload.js.map +1 -0
- package/dist/components/file-upload/file-upload.types.d.ts +91 -0
- package/dist/components/file-upload/file-upload.types.d.ts.map +1 -0
- package/dist/components/file-upload/file-upload.types.js +2 -0
- package/dist/components/file-upload/file-upload.types.js.map +1 -0
- package/dist/components/file-upload/index.d.ts +3 -0
- package/dist/components/file-upload/index.d.ts.map +1 -0
- package/dist/components/file-upload/index.js +2 -0
- package/dist/components/file-upload/index.js.map +1 -0
- package/dist/components/form-field/form-field.d.ts +11 -0
- package/dist/components/form-field/form-field.d.ts.map +1 -0
- package/dist/components/form-field/form-field.js +41 -0
- package/dist/components/form-field/form-field.js.map +1 -0
- package/dist/components/form-field/form-field.types.d.ts +66 -0
- package/dist/components/form-field/form-field.types.d.ts.map +1 -0
- package/dist/components/form-field/form-field.types.js +2 -0
- package/dist/components/form-field/form-field.types.js.map +1 -0
- package/dist/components/form-field/index.d.ts +3 -0
- package/dist/components/form-field/index.d.ts.map +1 -0
- package/dist/components/form-field/index.js +2 -0
- package/dist/components/form-field/index.js.map +1 -0
- package/dist/components/icon/icon.d.ts +14 -0
- package/dist/components/icon/icon.d.ts.map +1 -0
- package/dist/components/icon/icon.js +48 -0
- package/dist/components/icon/icon.js.map +1 -0
- package/dist/components/icon/icon.types.d.ts +69 -0
- package/dist/components/icon/icon.types.d.ts.map +1 -0
- package/dist/components/icon/icon.types.js +2 -0
- package/dist/components/icon/icon.types.js.map +1 -0
- package/dist/components/icon/index.d.ts +3 -0
- package/dist/components/icon/index.d.ts.map +1 -0
- package/dist/components/icon/index.js +2 -0
- package/dist/components/icon/index.js.map +1 -0
- package/dist/components/index.d.ts +46 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +45 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/inline-message/index.d.ts +4 -0
- package/dist/components/inline-message/index.d.ts.map +1 -0
- package/dist/components/inline-message/index.js +2 -0
- package/dist/components/inline-message/index.js.map +1 -0
- package/dist/components/inline-message/inline-message.d.ts +8 -0
- package/dist/components/inline-message/inline-message.d.ts.map +1 -0
- package/dist/components/inline-message/inline-message.js +20 -0
- package/dist/components/inline-message/inline-message.js.map +1 -0
- package/dist/components/inline-message/inline-message.types.d.ts +27 -0
- package/dist/components/inline-message/inline-message.types.d.ts.map +1 -0
- package/dist/components/inline-message/inline-message.types.js +2 -0
- package/dist/components/inline-message/inline-message.types.js.map +1 -0
- package/dist/components/input/index.d.ts +3 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/index.js +2 -0
- package/dist/components/input/index.js.map +1 -0
- package/dist/components/input/input.d.ts +8 -0
- package/dist/components/input/input.d.ts.map +1 -0
- package/dist/components/input/input.js +13 -0
- package/dist/components/input/input.js.map +1 -0
- package/dist/components/input/input.types.d.ts +35 -0
- package/dist/components/input/input.types.d.ts.map +1 -0
- package/dist/components/input/input.types.js +2 -0
- package/dist/components/input/input.types.js.map +1 -0
- package/dist/components/list/index.d.ts +3 -0
- package/dist/components/list/index.d.ts.map +1 -0
- package/dist/components/list/index.js +2 -0
- package/dist/components/list/index.js.map +1 -0
- package/dist/components/list/list.d.ts +14 -0
- package/dist/components/list/list.d.ts.map +1 -0
- package/dist/components/list/list.js +21 -0
- package/dist/components/list/list.js.map +1 -0
- package/dist/components/list/list.types.d.ts +72 -0
- package/dist/components/list/list.types.d.ts.map +1 -0
- package/dist/components/list/list.types.js +2 -0
- package/dist/components/list/list.types.js.map +1 -0
- package/dist/components/loading-overlay/index.d.ts +3 -0
- package/dist/components/loading-overlay/index.d.ts.map +1 -0
- package/dist/components/loading-overlay/index.js +2 -0
- package/dist/components/loading-overlay/index.js.map +1 -0
- package/dist/components/loading-overlay/loading-overlay.d.ts +8 -0
- package/dist/components/loading-overlay/loading-overlay.d.ts.map +1 -0
- package/dist/components/loading-overlay/loading-overlay.js +13 -0
- package/dist/components/loading-overlay/loading-overlay.js.map +1 -0
- package/dist/components/loading-overlay/loading-overlay.types.d.ts +28 -0
- package/dist/components/loading-overlay/loading-overlay.types.d.ts.map +1 -0
- package/dist/components/loading-overlay/loading-overlay.types.js +2 -0
- package/dist/components/loading-overlay/loading-overlay.types.js.map +1 -0
- package/dist/components/multi-select/index.d.ts +3 -0
- package/dist/components/multi-select/index.d.ts.map +1 -0
- package/dist/components/multi-select/index.js +2 -0
- package/dist/components/multi-select/index.js.map +1 -0
- package/dist/components/multi-select/multi-select.d.ts +9 -0
- package/dist/components/multi-select/multi-select.d.ts.map +1 -0
- package/dist/components/multi-select/multi-select.js +74 -0
- package/dist/components/multi-select/multi-select.js.map +1 -0
- package/dist/components/multi-select/multi-select.types.d.ts +35 -0
- package/dist/components/multi-select/multi-select.types.d.ts.map +1 -0
- package/dist/components/multi-select/multi-select.types.js +2 -0
- package/dist/components/multi-select/multi-select.types.js.map +1 -0
- package/dist/components/navigation/index.d.ts +3 -0
- package/dist/components/navigation/index.d.ts.map +1 -0
- package/dist/components/navigation/index.js +2 -0
- package/dist/components/navigation/index.js.map +1 -0
- package/dist/components/navigation/navigation.d.ts +14 -0
- package/dist/components/navigation/navigation.d.ts.map +1 -0
- package/dist/components/navigation/navigation.js +29 -0
- package/dist/components/navigation/navigation.js.map +1 -0
- package/dist/components/navigation/navigation.types.d.ts +84 -0
- package/dist/components/navigation/navigation.types.d.ts.map +1 -0
- package/dist/components/navigation/navigation.types.js +2 -0
- package/dist/components/navigation/navigation.types.js.map +1 -0
- package/dist/components/page-layout/index.d.ts +3 -0
- package/dist/components/page-layout/index.d.ts.map +1 -0
- package/dist/components/page-layout/index.js +2 -0
- package/dist/components/page-layout/index.js.map +1 -0
- package/dist/components/page-layout/page-layout.d.ts +74 -0
- package/dist/components/page-layout/page-layout.d.ts.map +1 -0
- package/dist/components/page-layout/page-layout.js +103 -0
- package/dist/components/page-layout/page-layout.js.map +1 -0
- package/dist/components/page-layout/page-layout.types.d.ts +188 -0
- package/dist/components/page-layout/page-layout.types.d.ts.map +1 -0
- package/dist/components/page-layout/page-layout.types.js +2 -0
- package/dist/components/page-layout/page-layout.types.js.map +1 -0
- package/dist/components/pagination/index.d.ts +4 -0
- package/dist/components/pagination/index.d.ts.map +1 -0
- package/dist/components/pagination/index.js +2 -0
- package/dist/components/pagination/index.js.map +1 -0
- package/dist/components/pagination/pagination.d.ts +24 -0
- package/dist/components/pagination/pagination.d.ts.map +1 -0
- package/dist/components/pagination/pagination.js +48 -0
- package/dist/components/pagination/pagination.js.map +1 -0
- package/dist/components/pagination/pagination.types.d.ts +43 -0
- package/dist/components/pagination/pagination.types.d.ts.map +1 -0
- package/dist/components/pagination/pagination.types.js +2 -0
- package/dist/components/pagination/pagination.types.js.map +1 -0
- package/dist/components/panel/index.d.ts +3 -0
- package/dist/components/panel/index.d.ts.map +1 -0
- package/dist/components/panel/index.js +2 -0
- package/dist/components/panel/index.js.map +1 -0
- package/dist/components/panel/panel.d.ts +14 -0
- package/dist/components/panel/panel.d.ts.map +1 -0
- package/dist/components/panel/panel.js +22 -0
- package/dist/components/panel/panel.js.map +1 -0
- package/dist/components/panel/panel.types.d.ts +62 -0
- package/dist/components/panel/panel.types.d.ts.map +1 -0
- package/dist/components/panel/panel.types.js +2 -0
- package/dist/components/panel/panel.types.js.map +1 -0
- package/dist/components/popover/index.d.ts +3 -0
- package/dist/components/popover/index.d.ts.map +1 -0
- package/dist/components/popover/index.js +2 -0
- package/dist/components/popover/index.js.map +1 -0
- package/dist/components/popover/popover-context.d.ts +29 -0
- package/dist/components/popover/popover-context.d.ts.map +1 -0
- package/dist/components/popover/popover-context.js +14 -0
- package/dist/components/popover/popover-context.js.map +1 -0
- package/dist/components/popover/popover.d.ts +8 -0
- package/dist/components/popover/popover.d.ts.map +1 -0
- package/dist/components/popover/popover.js +60 -0
- package/dist/components/popover/popover.js.map +1 -0
- package/dist/components/popover/popover.types.d.ts +47 -0
- package/dist/components/popover/popover.types.d.ts.map +1 -0
- package/dist/components/popover/popover.types.js +2 -0
- package/dist/components/popover/popover.types.js.map +1 -0
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/index.d.ts.map +1 -0
- package/dist/components/progress/index.js +2 -0
- package/dist/components/progress/index.js.map +1 -0
- package/dist/components/progress/progress.d.ts +8 -0
- package/dist/components/progress/progress.d.ts.map +1 -0
- package/dist/components/progress/progress.js +32 -0
- package/dist/components/progress/progress.js.map +1 -0
- package/dist/components/progress/progress.types.d.ts +36 -0
- package/dist/components/progress/progress.types.d.ts.map +1 -0
- package/dist/components/progress/progress.types.js +2 -0
- package/dist/components/progress/progress.types.js.map +1 -0
- package/dist/components/radio/index.d.ts +3 -0
- package/dist/components/radio/index.d.ts.map +1 -0
- package/dist/components/radio/index.js +2 -0
- package/dist/components/radio/index.js.map +1 -0
- package/dist/components/radio/radio.d.ts +8 -0
- package/dist/components/radio/radio.d.ts.map +1 -0
- package/dist/components/radio/radio.js +12 -0
- package/dist/components/radio/radio.js.map +1 -0
- package/dist/components/radio/radio.types.d.ts +17 -0
- package/dist/components/radio/radio.types.d.ts.map +1 -0
- package/dist/components/radio/radio.types.js +2 -0
- package/dist/components/radio/radio.types.js.map +1 -0
- package/dist/components/search-input/index.d.ts +3 -0
- package/dist/components/search-input/index.d.ts.map +1 -0
- package/dist/components/search-input/index.js +2 -0
- package/dist/components/search-input/index.js.map +1 -0
- package/dist/components/search-input/search-input.d.ts +8 -0
- package/dist/components/search-input/search-input.d.ts.map +1 -0
- package/dist/components/search-input/search-input.js +35 -0
- package/dist/components/search-input/search-input.js.map +1 -0
- package/dist/components/search-input/search-input.types.d.ts +38 -0
- package/dist/components/search-input/search-input.types.d.ts.map +1 -0
- package/dist/components/search-input/search-input.types.js +2 -0
- package/dist/components/search-input/search-input.types.js.map +1 -0
- package/dist/components/select/index.d.ts +3 -0
- package/dist/components/select/index.d.ts.map +1 -0
- package/dist/components/select/index.js +2 -0
- package/dist/components/select/index.js.map +1 -0
- package/dist/components/select/select.d.ts +8 -0
- package/dist/components/select/select.d.ts.map +1 -0
- package/dist/components/select/select.js +14 -0
- package/dist/components/select/select.js.map +1 -0
- package/dist/components/select/select.types.d.ts +27 -0
- package/dist/components/select/select.types.d.ts.map +1 -0
- package/dist/components/select/select.types.js +2 -0
- package/dist/components/select/select.types.js.map +1 -0
- package/dist/components/shared.types.d.ts +13 -0
- package/dist/components/shared.types.d.ts.map +1 -0
- package/dist/components/shared.types.js +2 -0
- package/dist/components/shared.types.js.map +1 -0
- package/dist/components/skeleton/index.d.ts +3 -0
- package/dist/components/skeleton/index.d.ts.map +1 -0
- package/dist/components/skeleton/index.js +2 -0
- package/dist/components/skeleton/index.js.map +1 -0
- package/dist/components/skeleton/skeleton.d.ts +8 -0
- package/dist/components/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton/skeleton.js +12 -0
- package/dist/components/skeleton/skeleton.js.map +1 -0
- package/dist/components/skeleton/skeleton.types.d.ts +29 -0
- package/dist/components/skeleton/skeleton.types.d.ts.map +1 -0
- package/dist/components/skeleton/skeleton.types.js +2 -0
- package/dist/components/skeleton/skeleton.types.js.map +1 -0
- package/dist/components/spinner/index.d.ts +4 -0
- package/dist/components/spinner/index.d.ts.map +1 -0
- package/dist/components/spinner/index.js +2 -0
- package/dist/components/spinner/index.js.map +1 -0
- package/dist/components/spinner/spinner.d.ts +8 -0
- package/dist/components/spinner/spinner.d.ts.map +1 -0
- package/dist/components/spinner/spinner.js +19 -0
- package/dist/components/spinner/spinner.js.map +1 -0
- package/dist/components/spinner/spinner.types.d.ts +27 -0
- package/dist/components/spinner/spinner.types.d.ts.map +1 -0
- package/dist/components/spinner/spinner.types.js +2 -0
- package/dist/components/spinner/spinner.types.js.map +1 -0
- package/dist/components/status-indicator/index.d.ts +4 -0
- package/dist/components/status-indicator/index.d.ts.map +1 -0
- package/dist/components/status-indicator/index.js +2 -0
- package/dist/components/status-indicator/index.js.map +1 -0
- package/dist/components/status-indicator/status-indicator.d.ts +8 -0
- package/dist/components/status-indicator/status-indicator.d.ts.map +1 -0
- package/dist/components/status-indicator/status-indicator.js +12 -0
- package/dist/components/status-indicator/status-indicator.js.map +1 -0
- package/dist/components/status-indicator/status-indicator.types.d.ts +25 -0
- package/dist/components/status-indicator/status-indicator.types.d.ts.map +1 -0
- package/dist/components/status-indicator/status-indicator.types.js +2 -0
- package/dist/components/status-indicator/status-indicator.types.js.map +1 -0
- package/dist/components/switch/index.d.ts +3 -0
- package/dist/components/switch/index.d.ts.map +1 -0
- package/dist/components/switch/index.js +2 -0
- package/dist/components/switch/index.js.map +1 -0
- package/dist/components/switch/switch.d.ts +8 -0
- package/dist/components/switch/switch.d.ts.map +1 -0
- package/dist/components/switch/switch.js +12 -0
- package/dist/components/switch/switch.js.map +1 -0
- package/dist/components/switch/switch.types.d.ts +17 -0
- package/dist/components/switch/switch.types.d.ts.map +1 -0
- package/dist/components/switch/switch.types.js +2 -0
- package/dist/components/switch/switch.types.js.map +1 -0
- package/dist/components/table/index.d.ts +3 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/table/index.js +2 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/table/table.d.ts +56 -0
- package/dist/components/table/table.d.ts.map +1 -0
- package/dist/components/table/table.js +76 -0
- package/dist/components/table/table.js.map +1 -0
- package/dist/components/table/table.types.d.ts +101 -0
- package/dist/components/table/table.types.d.ts.map +1 -0
- package/dist/components/table/table.types.js +2 -0
- package/dist/components/table/table.types.js.map +1 -0
- package/dist/components/tabs/index.d.ts +3 -0
- package/dist/components/tabs/index.d.ts.map +1 -0
- package/dist/components/tabs/index.js +2 -0
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/components/tabs/tabs.d.ts +26 -0
- package/dist/components/tabs/tabs.d.ts.map +1 -0
- package/dist/components/tabs/tabs.js +122 -0
- package/dist/components/tabs/tabs.js.map +1 -0
- package/dist/components/tabs/tabs.types.d.ts +70 -0
- package/dist/components/tabs/tabs.types.d.ts.map +1 -0
- package/dist/components/tabs/tabs.types.js +2 -0
- package/dist/components/tabs/tabs.types.js.map +1 -0
- package/dist/components/textarea/index.d.ts +3 -0
- package/dist/components/textarea/index.d.ts.map +1 -0
- package/dist/components/textarea/index.js +2 -0
- package/dist/components/textarea/index.js.map +1 -0
- package/dist/components/textarea/textarea.d.ts +8 -0
- package/dist/components/textarea/textarea.d.ts.map +1 -0
- package/dist/components/textarea/textarea.js +13 -0
- package/dist/components/textarea/textarea.js.map +1 -0
- package/dist/components/textarea/textarea.types.d.ts +39 -0
- package/dist/components/textarea/textarea.types.d.ts.map +1 -0
- package/dist/components/textarea/textarea.types.js +2 -0
- package/dist/components/textarea/textarea.types.js.map +1 -0
- package/dist/components/toast/index.d.ts +3 -0
- package/dist/components/toast/index.d.ts.map +1 -0
- package/dist/components/toast/index.js +2 -0
- package/dist/components/toast/index.js.map +1 -0
- package/dist/components/toast/toast.d.ts +24 -0
- package/dist/components/toast/toast.d.ts.map +1 -0
- package/dist/components/toast/toast.js +111 -0
- package/dist/components/toast/toast.js.map +1 -0
- package/dist/components/toast/toast.types.d.ts +103 -0
- package/dist/components/toast/toast.types.d.ts.map +1 -0
- package/dist/components/toast/toast.types.js +2 -0
- package/dist/components/toast/toast.types.js.map +1 -0
- package/dist/components/toolbar/index.d.ts +3 -0
- package/dist/components/toolbar/index.d.ts.map +1 -0
- package/dist/components/toolbar/index.js +2 -0
- package/dist/components/toolbar/index.js.map +1 -0
- package/dist/components/toolbar/toolbar.d.ts +20 -0
- package/dist/components/toolbar/toolbar.d.ts.map +1 -0
- package/dist/components/toolbar/toolbar.js +28 -0
- package/dist/components/toolbar/toolbar.js.map +1 -0
- package/dist/components/toolbar/toolbar.types.d.ts +37 -0
- package/dist/components/toolbar/toolbar.types.d.ts.map +1 -0
- package/dist/components/toolbar/toolbar.types.js +2 -0
- package/dist/components/toolbar/toolbar.types.js.map +1 -0
- package/dist/components/tooltip/index.d.ts +3 -0
- package/dist/components/tooltip/index.d.ts.map +1 -0
- package/dist/components/tooltip/index.js +2 -0
- package/dist/components/tooltip/index.js.map +1 -0
- package/dist/components/tooltip/tooltip.d.ts +8 -0
- package/dist/components/tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip.js +84 -0
- package/dist/components/tooltip/tooltip.js.map +1 -0
- package/dist/components/tooltip/tooltip.types.d.ts +34 -0
- package/dist/components/tooltip/tooltip.types.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip.types.js +2 -0
- package/dist/components/tooltip/tooltip.types.js.map +1 -0
- package/dist/components/tree-view/index.d.ts +3 -0
- package/dist/components/tree-view/index.d.ts.map +1 -0
- package/dist/components/tree-view/index.js +2 -0
- package/dist/components/tree-view/index.js.map +1 -0
- package/dist/components/tree-view/tree-view.d.ts +9 -0
- package/dist/components/tree-view/tree-view.d.ts.map +1 -0
- package/dist/components/tree-view/tree-view.js +573 -0
- package/dist/components/tree-view/tree-view.js.map +1 -0
- package/dist/components/tree-view/tree-view.types.d.ts +92 -0
- package/dist/components/tree-view/tree-view.types.d.ts.map +1 -0
- package/dist/components/tree-view/tree-view.types.js +2 -0
- package/dist/components/tree-view/tree-view.types.js.map +1 -0
- package/dist/components/visually-hidden/index.d.ts +3 -0
- package/dist/components/visually-hidden/index.d.ts.map +1 -0
- package/dist/components/visually-hidden/index.js +2 -0
- package/dist/components/visually-hidden/index.js.map +1 -0
- package/dist/components/visually-hidden/visually-hidden.d.ts +8 -0
- package/dist/components/visually-hidden/visually-hidden.d.ts.map +1 -0
- package/dist/components/visually-hidden/visually-hidden.js +12 -0
- package/dist/components/visually-hidden/visually-hidden.js.map +1 -0
- package/dist/components/visually-hidden/visually-hidden.types.d.ts +9 -0
- package/dist/components/visually-hidden/visually-hidden.types.d.ts.map +1 -0
- package/dist/components/visually-hidden/visually-hidden.types.js +2 -0
- package/dist/components/visually-hidden/visually-hidden.types.js.map +1 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +2 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/ui-error.d.ts +60 -0
- package/dist/errors/ui-error.d.ts.map +1 -0
- package/dist/errors/ui-error.js +219 -0
- package/dist/errors/ui-error.js.map +1 -0
- package/dist/i18n/i18n.d.ts +52 -0
- package/dist/i18n/i18n.d.ts.map +1 -0
- package/dist/i18n/i18n.js +156 -0
- package/dist/i18n/i18n.js.map +1 -0
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/icons/icon-names.d.ts +7 -0
- package/dist/icons/icon-names.d.ts.map +1 -0
- package/dist/icons/icon-names.js +2 -0
- package/dist/icons/icon-names.js.map +1 -0
- package/dist/icons/icon-registry.d.ts +30 -0
- package/dist/icons/icon-registry.d.ts.map +1 -0
- package/dist/icons/icon-registry.js +31 -0
- package/dist/icons/icon-registry.js.map +1 -0
- package/dist/icons/index.d.ts +4 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +2 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/class-names.d.ts +8 -0
- package/dist/internal/class-names.d.ts.map +1 -0
- package/dist/internal/class-names.js +10 -0
- package/dist/internal/class-names.js.map +1 -0
- package/dist/internal/menu/index.d.ts +3 -0
- package/dist/internal/menu/index.d.ts.map +1 -0
- package/dist/internal/menu/index.js +2 -0
- package/dist/internal/menu/index.js.map +1 -0
- package/dist/internal/menu/menu.d.ts +33 -0
- package/dist/internal/menu/menu.d.ts.map +1 -0
- package/dist/internal/menu/menu.js +150 -0
- package/dist/internal/menu/menu.js.map +1 -0
- package/dist/internal/overlay/dismissible-layer.d.ts +38 -0
- package/dist/internal/overlay/dismissible-layer.d.ts.map +1 -0
- package/dist/internal/overlay/dismissible-layer.js +99 -0
- package/dist/internal/overlay/dismissible-layer.js.map +1 -0
- package/dist/internal/overlay/document-scroll-lock.d.ts +8 -0
- package/dist/internal/overlay/document-scroll-lock.d.ts.map +1 -0
- package/dist/internal/overlay/document-scroll-lock.js +58 -0
- package/dist/internal/overlay/document-scroll-lock.js.map +1 -0
- package/dist/internal/overlay/floating-position.d.ts +46 -0
- package/dist/internal/overlay/floating-position.d.ts.map +1 -0
- package/dist/internal/overlay/floating-position.js +137 -0
- package/dist/internal/overlay/floating-position.js.map +1 -0
- package/dist/internal/overlay/index.d.ts +8 -0
- package/dist/internal/overlay/index.d.ts.map +1 -0
- package/dist/internal/overlay/index.js +6 -0
- package/dist/internal/overlay/index.js.map +1 -0
- package/dist/internal/overlay/native-modal.d.ts +11 -0
- package/dist/internal/overlay/native-modal.d.ts.map +1 -0
- package/dist/internal/overlay/native-modal.js +160 -0
- package/dist/internal/overlay/native-modal.js.map +1 -0
- package/dist/internal/overlay/portal-target.d.ts +19 -0
- package/dist/internal/overlay/portal-target.d.ts.map +1 -0
- package/dist/internal/overlay/portal-target.js +113 -0
- package/dist/internal/overlay/portal-target.js.map +1 -0
- package/dist/internal/overlay/top-layer.d.ts +21 -0
- package/dist/internal/overlay/top-layer.d.ts.map +1 -0
- package/dist/internal/overlay/top-layer.js +51 -0
- package/dist/internal/overlay/top-layer.js.map +1 -0
- package/dist/internal/use-merged-ref.d.ts +11 -0
- package/dist/internal/use-merged-ref.d.ts.map +1 -0
- package/dist/internal/use-merged-ref.js +31 -0
- package/dist/internal/use-merged-ref.js.map +1 -0
- package/dist/internal/use-native-dialog.d.ts +9 -0
- package/dist/internal/use-native-dialog.d.ts.map +1 -0
- package/dist/internal/use-native-dialog.js +19 -0
- package/dist/internal/use-native-dialog.js.map +1 -0
- package/dist/runtime/appearance.d.ts +32 -0
- package/dist/runtime/appearance.d.ts.map +1 -0
- package/dist/runtime/appearance.js +123 -0
- package/dist/runtime/appearance.js.map +1 -0
- package/dist/styles/components/alert.css +99 -0
- package/dist/styles/components/avatar.css +70 -0
- package/dist/styles/components/badge.css +101 -0
- package/dist/styles/components/breadcrumb.css +65 -0
- package/dist/styles/components/button.css +136 -0
- package/dist/styles/components/choice.css +120 -0
- package/dist/styles/components/combobox.css +200 -0
- package/dist/styles/components/confirm-dialog.css +50 -0
- package/dist/styles/components/data-table.css +120 -0
- package/dist/styles/components/dialog.css +135 -0
- package/dist/styles/components/divider.css +27 -0
- package/dist/styles/components/drawer.css +160 -0
- package/dist/styles/components/dropdown.css +75 -0
- package/dist/styles/components/dropzone.css +94 -0
- package/dist/styles/components/empty-state.css +85 -0
- package/dist/styles/components/file-upload.css +145 -0
- package/dist/styles/components/form-field.css +49 -0
- package/dist/styles/components/icon.css +53 -0
- package/dist/styles/components/inline-message.css +33 -0
- package/dist/styles/components/input.css +77 -0
- package/dist/styles/components/list.css +132 -0
- package/dist/styles/components/loading-overlay.css +24 -0
- package/dist/styles/components/menu.css +6 -0
- package/dist/styles/components/multi-select.css +68 -0
- package/dist/styles/components/navigation.css +116 -0
- package/dist/styles/components/page-layout.css +279 -0
- package/dist/styles/components/pagination.css +99 -0
- package/dist/styles/components/panel.css +123 -0
- package/dist/styles/components/popover.css +41 -0
- package/dist/styles/components/progress.css +65 -0
- package/dist/styles/components/search-input.css +12 -0
- package/dist/styles/components/select.css +56 -0
- package/dist/styles/components/skeleton.css +93 -0
- package/dist/styles/components/spinner.css +27 -0
- package/dist/styles/components/status-indicator.css +54 -0
- package/dist/styles/components/switch.css +111 -0
- package/dist/styles/components/table.css +127 -0
- package/dist/styles/components/tabs.css +144 -0
- package/dist/styles/components/textarea.css +79 -0
- package/dist/styles/components/toast.css +134 -0
- package/dist/styles/components/toolbar.css +27 -0
- package/dist/styles/components/tooltip.css +32 -0
- package/dist/styles/components/tree-view.css +146 -0
- package/dist/styles/components.css +45 -0
- package/dist/styles/foundation/controls.css +91 -0
- package/dist/styles/foundation/density.css +76 -0
- package/dist/styles/foundation/icons.css +29 -0
- package/dist/styles/foundation/layout.css +150 -0
- package/dist/styles/foundation/motion.css +58 -0
- package/dist/styles/foundation/surface.css +60 -0
- package/dist/styles/foundation/theme.css +166 -0
- package/dist/styles/foundation/typography.css +84 -0
- package/dist/styles/foundation.css +10 -0
- package/dist/styles/miaixz.css +4 -0
- package/package.json +304 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { useMiaixzDismissibleLayer } from "./dismissible-layer.js";
|
|
2
|
+
export type { MiaixzDismissReason } from "./dismissible-layer.js";
|
|
3
|
+
export { useMiaixzFloatingPosition } from "./floating-position.js";
|
|
4
|
+
export type { MiaixzFloatingPlacement } from "./floating-position.js";
|
|
5
|
+
export { useMiaixzManualPopover } from "./top-layer.js";
|
|
6
|
+
export { useMiaixzNativeModal } from "./native-modal.js";
|
|
7
|
+
export { useMiaixzPortalTarget } from "./portal-target.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/overlay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { useMiaixzDismissibleLayer } from "./dismissible-layer.js";
|
|
2
|
+
export { useMiaixzFloatingPosition } from "./floating-position.js";
|
|
3
|
+
export { useMiaixzManualPopover } from "./top-layer.js";
|
|
4
|
+
export { useMiaixzNativeModal } from "./native-modal.js";
|
|
5
|
+
export { useMiaixzPortalTarget } from "./portal-target.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/overlay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC","sourcesContent":["export { useMiaixzDismissibleLayer } from \"./dismissible-layer.js\";\nexport type { MiaixzDismissReason } from \"./dismissible-layer.js\";\nexport { useMiaixzFloatingPosition } from \"./floating-position.js\";\nexport type { MiaixzFloatingPlacement } from \"./floating-position.js\";\nexport { useMiaixzManualPopover } from \"./top-layer.js\";\nexport { useMiaixzNativeModal } from \"./native-modal.js\";\nexport { useMiaixzPortalTarget } from \"./portal-target.js\";\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type RefObject } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Synchronizes a controlled state with one native modal, its stack, and document scroll lock.
|
|
4
|
+
*
|
|
5
|
+
* @param ref - Reference containing the native dialog element.
|
|
6
|
+
* @param open - Controlled modal open state.
|
|
7
|
+
* @param portalTarget - Current Portal target used to retrigger synchronization after mounting.
|
|
8
|
+
* @returns Stable reference to the element focused before the modal opened.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useMiaixzNativeModal(ref: RefObject<HTMLDialogElement | null>, open: boolean, portalTarget: HTMLElement | null): RefObject<HTMLElement | null>;
|
|
11
|
+
//# sourceMappingURL=native-modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-modal.d.ts","sourceRoot":"","sources":["../../../src/internal/overlay/native-modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA0D3E;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,EACxC,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,WAAW,GAAG,IAAI,GAC/B,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CA6B/B"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { useEffect, useLayoutEffect, useRef } from "react";
|
|
2
|
+
import { lockMiaixzDocumentScroll } from "./document-scroll-lock.js";
|
|
3
|
+
import { registerMiaixzModal } from "./portal-target.js";
|
|
4
|
+
/**
|
|
5
|
+
* Uses layout timing in browsers and passive timing during server rendering.
|
|
6
|
+
*/
|
|
7
|
+
const useMiaixzClientLayoutEffect = typeof document === "undefined" ? useEffect : useLayoutEffect;
|
|
8
|
+
/**
|
|
9
|
+
* Selects interactive elements that can initiate a controlled modal transition.
|
|
10
|
+
*/
|
|
11
|
+
const miaixzModalTriggerSelector = [
|
|
12
|
+
"a[href]",
|
|
13
|
+
"button:not([disabled])",
|
|
14
|
+
"input:not([disabled])",
|
|
15
|
+
"select:not([disabled])",
|
|
16
|
+
"textarea:not([disabled])",
|
|
17
|
+
"[contenteditable='true']",
|
|
18
|
+
"[tabindex]:not([tabindex='-1'])",
|
|
19
|
+
].join(",");
|
|
20
|
+
/**
|
|
21
|
+
* Limits pointer-based restoration fallback to the interaction that immediately opened a modal.
|
|
22
|
+
*/
|
|
23
|
+
const miaixzModalInteractionWindow = 1000;
|
|
24
|
+
/**
|
|
25
|
+
* Retains one shared pointer observer for each independent document realm.
|
|
26
|
+
*/
|
|
27
|
+
const miaixzModalInteractionRecords = new WeakMap();
|
|
28
|
+
/**
|
|
29
|
+
* Synchronizes a controlled state with one native modal, its stack, and document scroll lock.
|
|
30
|
+
*
|
|
31
|
+
* @param ref - Reference containing the native dialog element.
|
|
32
|
+
* @param open - Controlled modal open state.
|
|
33
|
+
* @param portalTarget - Current Portal target used to retrigger synchronization after mounting.
|
|
34
|
+
* @returns Stable reference to the element focused before the modal opened.
|
|
35
|
+
*/
|
|
36
|
+
export function useMiaixzNativeModal(ref, open, portalTarget) {
|
|
37
|
+
const restoreFocusRef = useRef(null);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
const ownerDocument = ref.current?.ownerDocument ?? portalTarget?.ownerDocument;
|
|
40
|
+
if (ownerDocument === undefined)
|
|
41
|
+
return undefined;
|
|
42
|
+
return observeMiaixzModalInteractions(ownerDocument);
|
|
43
|
+
}, [portalTarget, ref]);
|
|
44
|
+
useMiaixzClientLayoutEffect(() => {
|
|
45
|
+
const dialog = ref.current;
|
|
46
|
+
if (dialog === null)
|
|
47
|
+
return undefined;
|
|
48
|
+
if (!open) {
|
|
49
|
+
if (dialog.open)
|
|
50
|
+
dialog.close();
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
if (!dialog.open) {
|
|
54
|
+
restoreFocusRef.current = resolveMiaixzModalRestoreTarget(dialog.ownerDocument);
|
|
55
|
+
dialog.showModal();
|
|
56
|
+
}
|
|
57
|
+
const unregisterModal = registerMiaixzModal(dialog);
|
|
58
|
+
const unlockDocument = lockMiaixzDocumentScroll(dialog.ownerDocument);
|
|
59
|
+
return () => {
|
|
60
|
+
unregisterModal();
|
|
61
|
+
unlockDocument();
|
|
62
|
+
};
|
|
63
|
+
}, [open, portalTarget, ref]);
|
|
64
|
+
return restoreFocusRef;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Installs or reuses the document observer that remembers pointer-triggered modal initiators.
|
|
68
|
+
*
|
|
69
|
+
* Safari does not focus buttons after pointer activation, so activeElement alone cannot identify
|
|
70
|
+
* the trigger. The short-lived captured target preserves cross-browser restoration without adding
|
|
71
|
+
* a public trigger property to controlled Dialog and Drawer APIs.
|
|
72
|
+
*
|
|
73
|
+
* @param ownerDocument - Document whose modal interactions should be observed.
|
|
74
|
+
* @returns Cleanup that releases the shared observer reference.
|
|
75
|
+
*/
|
|
76
|
+
function observeMiaixzModalInteractions(ownerDocument) {
|
|
77
|
+
let record = miaixzModalInteractionRecords.get(ownerDocument);
|
|
78
|
+
if (record === undefined) {
|
|
79
|
+
record = {
|
|
80
|
+
references: 0,
|
|
81
|
+
target: null,
|
|
82
|
+
recordedAt: 0,
|
|
83
|
+
handlePointerDown: (event) => {
|
|
84
|
+
const activeRecord = miaixzModalInteractionRecords.get(ownerDocument);
|
|
85
|
+
if (activeRecord === undefined)
|
|
86
|
+
return;
|
|
87
|
+
activeRecord.target = findMiaixzModalInteractionTarget(event.target);
|
|
88
|
+
activeRecord.recordedAt = Date.now();
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
miaixzModalInteractionRecords.set(ownerDocument, record);
|
|
92
|
+
ownerDocument.addEventListener("pointerdown", record.handlePointerDown, true);
|
|
93
|
+
}
|
|
94
|
+
record.references += 1;
|
|
95
|
+
let active = true;
|
|
96
|
+
return () => {
|
|
97
|
+
if (!active)
|
|
98
|
+
return;
|
|
99
|
+
active = false;
|
|
100
|
+
const activeRecord = miaixzModalInteractionRecords.get(ownerDocument);
|
|
101
|
+
if (activeRecord === undefined)
|
|
102
|
+
return;
|
|
103
|
+
activeRecord.references -= 1;
|
|
104
|
+
if (activeRecord.references > 0)
|
|
105
|
+
return;
|
|
106
|
+
ownerDocument.removeEventListener("pointerdown", activeRecord.handlePointerDown, true);
|
|
107
|
+
miaixzModalInteractionRecords.delete(ownerDocument);
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Resolves the focus destination to restore when a native modal closes.
|
|
112
|
+
*
|
|
113
|
+
* @param ownerDocument - Document whose active and recent interaction targets should be inspected.
|
|
114
|
+
* @returns Connected trigger target, current focus target, or null when neither is meaningful.
|
|
115
|
+
*/
|
|
116
|
+
function resolveMiaixzModalRestoreTarget(ownerDocument) {
|
|
117
|
+
const record = miaixzModalInteractionRecords.get(ownerDocument);
|
|
118
|
+
if (record?.target !== null &&
|
|
119
|
+
record?.target !== undefined &&
|
|
120
|
+
record.target.isConnected &&
|
|
121
|
+
Date.now() - record.recordedAt <= miaixzModalInteractionWindow) {
|
|
122
|
+
return record.target;
|
|
123
|
+
}
|
|
124
|
+
const activeElement = ownerDocument.activeElement;
|
|
125
|
+
return isMiaixzFocusableReference(activeElement) &&
|
|
126
|
+
activeElement !== ownerDocument.body &&
|
|
127
|
+
activeElement !== ownerDocument.documentElement
|
|
128
|
+
? activeElement
|
|
129
|
+
: null;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Finds the nearest enabled interactive ancestor for one pointer event target.
|
|
133
|
+
*
|
|
134
|
+
* @param value - Pointer event target, which may be a nested icon or text node.
|
|
135
|
+
* @returns Nearest connected focusable ancestor or null when no trigger exists.
|
|
136
|
+
*/
|
|
137
|
+
function findMiaixzModalInteractionTarget(value) {
|
|
138
|
+
if (typeof value !== "object" ||
|
|
139
|
+
value === null ||
|
|
140
|
+
!("closest" in value) ||
|
|
141
|
+
typeof value.closest !== "function") {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
const candidate = value.closest(miaixzModalTriggerSelector);
|
|
145
|
+
return isMiaixzFocusableReference(candidate) && candidate.isConnected ? candidate : null;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Determines whether an active-element value can be retained as a focus restoration target.
|
|
149
|
+
*
|
|
150
|
+
* @param value - Candidate active element from the modal's document realm.
|
|
151
|
+
* @returns Whether the candidate exposes a connected HTMLElement focus contract.
|
|
152
|
+
*/
|
|
153
|
+
function isMiaixzFocusableReference(value) {
|
|
154
|
+
return (typeof value === "object" &&
|
|
155
|
+
value !== null &&
|
|
156
|
+
"focus" in value &&
|
|
157
|
+
typeof value.focus === "function" &&
|
|
158
|
+
"isConnected" in value);
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=native-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-modal.js","sourceRoot":"","sources":["../../../src/internal/overlay/native-modal.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useLayoutEffect, useRef, type RefObject } from \"react\";\n\nimport { lockMiaixzDocumentScroll } from \"./document-scroll-lock.js\";\nimport { registerMiaixzModal } from \"./portal-target.js\";\n\n/**\n * Uses layout timing in browsers and passive timing during server rendering.\n */\nconst useMiaixzClientLayoutEffect = typeof document === \"undefined\" ? useEffect : useLayoutEffect;\n\n/**\n * Selects interactive elements that can initiate a controlled modal transition.\n */\nconst miaixzModalTriggerSelector = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[contenteditable='true']\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\n/**\n * Limits pointer-based restoration fallback to the interaction that immediately opened a modal.\n */\nconst miaixzModalInteractionWindow = 1000;\n\n/**\n * Retains one shared pointer observer for each independent document realm.\n */\nconst miaixzModalInteractionRecords = new WeakMap<Document, MiaixzModalInteractionRecord>();\n\n/**\n * Describes the shared recent-interaction state for one document realm.\n */\ninterface MiaixzModalInteractionRecord {\n /**\n * Counts mounted modal hooks using the document observer.\n */\n references: number;\n\n /**\n * Stores the most recent interactive pointer target.\n */\n target: HTMLElement | null;\n\n /**\n * Stores the wall-clock time at which the pointer interaction occurred.\n */\n recordedAt: number;\n\n /**\n * Handles pointer activity captured before application click handlers run.\n */\n readonly handlePointerDown: (event: PointerEvent) => void;\n}\n\n/**\n * Synchronizes a controlled state with one native modal, its stack, and document scroll lock.\n *\n * @param ref - Reference containing the native dialog element.\n * @param open - Controlled modal open state.\n * @param portalTarget - Current Portal target used to retrigger synchronization after mounting.\n * @returns Stable reference to the element focused before the modal opened.\n */\nexport function useMiaixzNativeModal(\n ref: RefObject<HTMLDialogElement | null>,\n open: boolean,\n portalTarget: HTMLElement | null,\n): RefObject<HTMLElement | null> {\n const restoreFocusRef = useRef<HTMLElement | null>(null);\n useEffect(() => {\n const ownerDocument = ref.current?.ownerDocument ?? portalTarget?.ownerDocument;\n if (ownerDocument === undefined) return undefined;\n return observeMiaixzModalInteractions(ownerDocument);\n }, [portalTarget, ref]);\n\n useMiaixzClientLayoutEffect(() => {\n const dialog = ref.current;\n if (dialog === null) return undefined;\n\n if (!open) {\n if (dialog.open) dialog.close();\n return undefined;\n }\n\n if (!dialog.open) {\n restoreFocusRef.current = resolveMiaixzModalRestoreTarget(dialog.ownerDocument);\n dialog.showModal();\n }\n const unregisterModal = registerMiaixzModal(dialog);\n const unlockDocument = lockMiaixzDocumentScroll(dialog.ownerDocument);\n return () => {\n unregisterModal();\n unlockDocument();\n };\n }, [open, portalTarget, ref]);\n return restoreFocusRef;\n}\n\n/**\n * Installs or reuses the document observer that remembers pointer-triggered modal initiators.\n *\n * Safari does not focus buttons after pointer activation, so activeElement alone cannot identify\n * the trigger. The short-lived captured target preserves cross-browser restoration without adding\n * a public trigger property to controlled Dialog and Drawer APIs.\n *\n * @param ownerDocument - Document whose modal interactions should be observed.\n * @returns Cleanup that releases the shared observer reference.\n */\nfunction observeMiaixzModalInteractions(ownerDocument: Document): () => void {\n let record = miaixzModalInteractionRecords.get(ownerDocument);\n if (record === undefined) {\n record = {\n references: 0,\n target: null,\n recordedAt: 0,\n handlePointerDown: (event) => {\n const activeRecord = miaixzModalInteractionRecords.get(ownerDocument);\n if (activeRecord === undefined) return;\n activeRecord.target = findMiaixzModalInteractionTarget(event.target);\n activeRecord.recordedAt = Date.now();\n },\n };\n miaixzModalInteractionRecords.set(ownerDocument, record);\n ownerDocument.addEventListener(\"pointerdown\", record.handlePointerDown, true);\n }\n record.references += 1;\n\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n const activeRecord = miaixzModalInteractionRecords.get(ownerDocument);\n if (activeRecord === undefined) return;\n activeRecord.references -= 1;\n if (activeRecord.references > 0) return;\n ownerDocument.removeEventListener(\"pointerdown\", activeRecord.handlePointerDown, true);\n miaixzModalInteractionRecords.delete(ownerDocument);\n };\n}\n\n/**\n * Resolves the focus destination to restore when a native modal closes.\n *\n * @param ownerDocument - Document whose active and recent interaction targets should be inspected.\n * @returns Connected trigger target, current focus target, or null when neither is meaningful.\n */\nfunction resolveMiaixzModalRestoreTarget(ownerDocument: Document): HTMLElement | null {\n const record = miaixzModalInteractionRecords.get(ownerDocument);\n if (\n record?.target !== null &&\n record?.target !== undefined &&\n record.target.isConnected &&\n Date.now() - record.recordedAt <= miaixzModalInteractionWindow\n ) {\n return record.target;\n }\n const activeElement = ownerDocument.activeElement;\n return isMiaixzFocusableReference(activeElement) &&\n activeElement !== ownerDocument.body &&\n activeElement !== ownerDocument.documentElement\n ? activeElement\n : null;\n}\n\n/**\n * Finds the nearest enabled interactive ancestor for one pointer event target.\n *\n * @param value - Pointer event target, which may be a nested icon or text node.\n * @returns Nearest connected focusable ancestor or null when no trigger exists.\n */\nfunction findMiaixzModalInteractionTarget(value: unknown): HTMLElement | null {\n if (\n typeof value !== \"object\" ||\n value === null ||\n !(\"closest\" in value) ||\n typeof value.closest !== \"function\"\n ) {\n return null;\n }\n const candidate = value.closest(miaixzModalTriggerSelector) as unknown;\n return isMiaixzFocusableReference(candidate) && candidate.isConnected ? candidate : null;\n}\n\n/**\n * Determines whether an active-element value can be retained as a focus restoration target.\n *\n * @param value - Candidate active element from the modal's document realm.\n * @returns Whether the candidate exposes a connected HTMLElement focus contract.\n */\nfunction isMiaixzFocusableReference(value: unknown): value is HTMLElement {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"focus\" in value &&\n typeof value.focus === \"function\" &&\n \"isConnected\" in value\n );\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registers one open native modal and publishes its top-layer order.
|
|
3
|
+
*
|
|
4
|
+
* @param dialog - Open native dialog entering the modal stack.
|
|
5
|
+
* @returns An idempotent registration cleanup function.
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerMiaixzModal(dialog: HTMLDialogElement): () => void;
|
|
8
|
+
/**
|
|
9
|
+
* Resolves the package-owned Portal destination for an anchored or global overlay.
|
|
10
|
+
*
|
|
11
|
+
* Anchored overlays use the nearest open native dialog so modal focus containment remains valid.
|
|
12
|
+
* Global overlays use the topmost registered modal and otherwise fall back to the document body.
|
|
13
|
+
*
|
|
14
|
+
* @param anchor - Optional overlay trigger or wrapper element.
|
|
15
|
+
* @param useTopModal - Whether an unanchored overlay should follow the topmost modal.
|
|
16
|
+
* @returns A client Portal target, or null before client mounting.
|
|
17
|
+
*/
|
|
18
|
+
export declare function useMiaixzPortalTarget(anchor?: HTMLElement | null, useTopModal?: boolean): HTMLElement | null;
|
|
19
|
+
//# sourceMappingURL=portal-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal-target.d.ts","sourceRoot":"","sources":["../../../src/internal/overlay/portal-target.ts"],"names":[],"mappings":"AA+BA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAezE;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,WAAW,GAAG,IAAW,EACjC,WAAW,UAAQ,GAClB,WAAW,GAAG,IAAI,CAepB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Isolates active modal state between independent document realms.
|
|
4
|
+
*/
|
|
5
|
+
const miaixzModalStores = new WeakMap();
|
|
6
|
+
/**
|
|
7
|
+
* Provides a stable no-op subscription for client document discovery.
|
|
8
|
+
*
|
|
9
|
+
* @returns A no-op cleanup function.
|
|
10
|
+
*/
|
|
11
|
+
function subscribeToMiaixzClientDocument() {
|
|
12
|
+
return () => undefined;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Registers one open native modal and publishes its top-layer order.
|
|
16
|
+
*
|
|
17
|
+
* @param dialog - Open native dialog entering the modal stack.
|
|
18
|
+
* @returns An idempotent registration cleanup function.
|
|
19
|
+
*/
|
|
20
|
+
export function registerMiaixzModal(dialog) {
|
|
21
|
+
const store = getMiaixzModalStore(dialog.ownerDocument);
|
|
22
|
+
const existingIndex = store.dialogs.indexOf(dialog);
|
|
23
|
+
if (existingIndex >= 0)
|
|
24
|
+
store.dialogs.splice(existingIndex, 1);
|
|
25
|
+
store.dialogs.push(dialog);
|
|
26
|
+
publishMiaixzModalStore(store);
|
|
27
|
+
let active = true;
|
|
28
|
+
return () => {
|
|
29
|
+
if (!active)
|
|
30
|
+
return;
|
|
31
|
+
active = false;
|
|
32
|
+
const index = store.dialogs.indexOf(dialog);
|
|
33
|
+
if (index >= 0)
|
|
34
|
+
store.dialogs.splice(index, 1);
|
|
35
|
+
publishMiaixzModalStore(store);
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Resolves the package-owned Portal destination for an anchored or global overlay.
|
|
40
|
+
*
|
|
41
|
+
* Anchored overlays use the nearest open native dialog so modal focus containment remains valid.
|
|
42
|
+
* Global overlays use the topmost registered modal and otherwise fall back to the document body.
|
|
43
|
+
*
|
|
44
|
+
* @param anchor - Optional overlay trigger or wrapper element.
|
|
45
|
+
* @param useTopModal - Whether an unanchored overlay should follow the topmost modal.
|
|
46
|
+
* @returns A client Portal target, or null before client mounting.
|
|
47
|
+
*/
|
|
48
|
+
export function useMiaixzPortalTarget(anchor = null, useTopModal = false) {
|
|
49
|
+
const ownerDocument = useSyncExternalStore(subscribeToMiaixzClientDocument, () => anchor?.ownerDocument ?? document, () => null);
|
|
50
|
+
const topModal = useSyncExternalStore((listener) => subscribeToMiaixzModalStore(ownerDocument, listener), () => getTopMiaixzModal(ownerDocument), () => null);
|
|
51
|
+
if (ownerDocument === null)
|
|
52
|
+
return null;
|
|
53
|
+
if (useTopModal)
|
|
54
|
+
return topModal ?? ownerDocument.body;
|
|
55
|
+
return anchor?.closest("dialog[open]") ?? ownerDocument.body;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Returns the mutable modal store for one document, creating it when necessary.
|
|
59
|
+
*
|
|
60
|
+
* @param ownerDocument - Document whose modal stack is requested.
|
|
61
|
+
* @returns The document-scoped modal store.
|
|
62
|
+
*/
|
|
63
|
+
function getMiaixzModalStore(ownerDocument) {
|
|
64
|
+
const existing = miaixzModalStores.get(ownerDocument);
|
|
65
|
+
if (existing !== undefined)
|
|
66
|
+
return existing;
|
|
67
|
+
const created = { dialogs: [], listeners: new Set() };
|
|
68
|
+
miaixzModalStores.set(ownerDocument, created);
|
|
69
|
+
return created;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Returns the connected topmost native modal for a document.
|
|
73
|
+
*
|
|
74
|
+
* @param ownerDocument - Document whose active modal should be read.
|
|
75
|
+
* @returns The topmost connected open dialog, or null when none exists.
|
|
76
|
+
*/
|
|
77
|
+
function getTopMiaixzModal(ownerDocument) {
|
|
78
|
+
if (ownerDocument === null)
|
|
79
|
+
return null;
|
|
80
|
+
const store = miaixzModalStores.get(ownerDocument);
|
|
81
|
+
if (store === undefined)
|
|
82
|
+
return null;
|
|
83
|
+
for (let index = store.dialogs.length - 1; index >= 0; index -= 1) {
|
|
84
|
+
const dialog = store.dialogs[index];
|
|
85
|
+
if (dialog?.isConnected && dialog.open)
|
|
86
|
+
return dialog;
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Subscribes to modal target changes without creating a store during server rendering.
|
|
92
|
+
*
|
|
93
|
+
* @param ownerDocument - Document whose modal changes should be observed.
|
|
94
|
+
* @param listener - Snapshot listener supplied by React.
|
|
95
|
+
* @returns Subscription cleanup.
|
|
96
|
+
*/
|
|
97
|
+
function subscribeToMiaixzModalStore(ownerDocument, listener) {
|
|
98
|
+
if (ownerDocument === null)
|
|
99
|
+
return () => undefined;
|
|
100
|
+
const store = getMiaixzModalStore(ownerDocument);
|
|
101
|
+
store.listeners.add(listener);
|
|
102
|
+
return () => store.listeners.delete(listener);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Notifies every current modal-store subscriber.
|
|
106
|
+
*
|
|
107
|
+
* @param store - Modal store whose ordering changed.
|
|
108
|
+
*/
|
|
109
|
+
function publishMiaixzModalStore(store) {
|
|
110
|
+
for (const listener of store.listeners)
|
|
111
|
+
listener();
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=portal-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal-target.js","sourceRoot":"","sources":["../../../src/internal/overlay/portal-target.ts"],"names":[],"mappings":"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","sourcesContent":["import { useSyncExternalStore } from \"react\";\n\n/**\n * Stores modal ordering and subscriptions for one document realm.\n */\ninterface MiaixzModalStore {\n /**\n * Retains open native dialogs in top-layer activation order.\n */\n readonly dialogs: HTMLDialogElement[];\n\n /**\n * Receives changes to the active modal stack.\n */\n readonly listeners: Set<() => void>;\n}\n\n/**\n * Isolates active modal state between independent document realms.\n */\nconst miaixzModalStores = new WeakMap<Document, MiaixzModalStore>();\n\n/**\n * Provides a stable no-op subscription for client document discovery.\n *\n * @returns A no-op cleanup function.\n */\nfunction subscribeToMiaixzClientDocument(): () => void {\n return () => undefined;\n}\n\n/**\n * Registers one open native modal and publishes its top-layer order.\n *\n * @param dialog - Open native dialog entering the modal stack.\n * @returns An idempotent registration cleanup function.\n */\nexport function registerMiaixzModal(dialog: HTMLDialogElement): () => void {\n const store = getMiaixzModalStore(dialog.ownerDocument);\n const existingIndex = store.dialogs.indexOf(dialog);\n if (existingIndex >= 0) store.dialogs.splice(existingIndex, 1);\n store.dialogs.push(dialog);\n publishMiaixzModalStore(store);\n\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n const index = store.dialogs.indexOf(dialog);\n if (index >= 0) store.dialogs.splice(index, 1);\n publishMiaixzModalStore(store);\n };\n}\n\n/**\n * Resolves the package-owned Portal destination for an anchored or global overlay.\n *\n * Anchored overlays use the nearest open native dialog so modal focus containment remains valid.\n * Global overlays use the topmost registered modal and otherwise fall back to the document body.\n *\n * @param anchor - Optional overlay trigger or wrapper element.\n * @param useTopModal - Whether an unanchored overlay should follow the topmost modal.\n * @returns A client Portal target, or null before client mounting.\n */\nexport function useMiaixzPortalTarget(\n anchor: HTMLElement | null = null,\n useTopModal = false,\n): HTMLElement | null {\n const ownerDocument = useSyncExternalStore(\n subscribeToMiaixzClientDocument,\n () => anchor?.ownerDocument ?? document,\n () => null,\n );\n const topModal = useSyncExternalStore(\n (listener) => subscribeToMiaixzModalStore(ownerDocument, listener),\n () => getTopMiaixzModal(ownerDocument),\n () => null,\n );\n\n if (ownerDocument === null) return null;\n if (useTopModal) return topModal ?? ownerDocument.body;\n return anchor?.closest<HTMLDialogElement>(\"dialog[open]\") ?? ownerDocument.body;\n}\n\n/**\n * Returns the mutable modal store for one document, creating it when necessary.\n *\n * @param ownerDocument - Document whose modal stack is requested.\n * @returns The document-scoped modal store.\n */\nfunction getMiaixzModalStore(ownerDocument: Document): MiaixzModalStore {\n const existing = miaixzModalStores.get(ownerDocument);\n if (existing !== undefined) return existing;\n const created: MiaixzModalStore = { dialogs: [], listeners: new Set() };\n miaixzModalStores.set(ownerDocument, created);\n return created;\n}\n\n/**\n * Returns the connected topmost native modal for a document.\n *\n * @param ownerDocument - Document whose active modal should be read.\n * @returns The topmost connected open dialog, or null when none exists.\n */\nfunction getTopMiaixzModal(ownerDocument: Document | null): HTMLDialogElement | null {\n if (ownerDocument === null) return null;\n const store = miaixzModalStores.get(ownerDocument);\n if (store === undefined) return null;\n for (let index = store.dialogs.length - 1; index >= 0; index -= 1) {\n const dialog = store.dialogs[index];\n if (dialog?.isConnected && dialog.open) return dialog;\n }\n return null;\n}\n\n/**\n * Subscribes to modal target changes without creating a store during server rendering.\n *\n * @param ownerDocument - Document whose modal changes should be observed.\n * @param listener - Snapshot listener supplied by React.\n * @returns Subscription cleanup.\n */\nfunction subscribeToMiaixzModalStore(\n ownerDocument: Document | null,\n listener: () => void,\n): () => void {\n if (ownerDocument === null) return () => undefined;\n const store = getMiaixzModalStore(ownerDocument);\n store.listeners.add(listener);\n return () => store.listeners.delete(listener);\n}\n\n/**\n * Notifies every current modal-store subscriber.\n *\n * @param store - Modal store whose ordering changed.\n */\nfunction publishMiaixzModalStore(store: MiaixzModalStore): void {\n for (const listener of store.listeners) listener();\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type RefObject } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Synchronizes a non-modal surface with the browser manual Popover top layer.
|
|
4
|
+
*
|
|
5
|
+
* Unsupported browsers retain a fixed non-modal fallback by removing the unsupported attribute.
|
|
6
|
+
* Cross-modal fallback is intentionally not promised by the frozen browser support contract.
|
|
7
|
+
*
|
|
8
|
+
* @param ref - Reference containing the Portal surface.
|
|
9
|
+
* @param open - Whether the surface should be visible.
|
|
10
|
+
* @param portalTarget - Current Portal destination used to synchronize remounts.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useMiaixzManualPopover(ref: RefObject<HTMLElement | null>, open: boolean, portalTarget: HTMLElement | null): void;
|
|
13
|
+
/**
|
|
14
|
+
* Applies one top-layer state transition and returns exact teardown behavior.
|
|
15
|
+
*
|
|
16
|
+
* @param element - Connected or test-owned surface receiving top-layer state.
|
|
17
|
+
* @param open - Whether the surface should be visible.
|
|
18
|
+
* @returns Cleanup that hides the synchronized surface.
|
|
19
|
+
*/
|
|
20
|
+
export declare function synchronizeMiaixzManualPopover(element: HTMLElement, open: boolean): () => void;
|
|
21
|
+
//# sourceMappingURL=top-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top-layer.d.ts","sourceRoot":"","sources":["../../../src/internal/overlay/top-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOnE;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAClC,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,WAAW,GAAG,IAAI,GAC/B,IAAI,CAMN;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,IAAI,CAiB9F"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useEffect, useLayoutEffect } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Uses layout timing in browsers and passive timing during server rendering.
|
|
4
|
+
*/
|
|
5
|
+
const useMiaixzClientLayoutEffect = typeof document === "undefined" ? useEffect : useLayoutEffect;
|
|
6
|
+
/**
|
|
7
|
+
* Synchronizes a non-modal surface with the browser manual Popover top layer.
|
|
8
|
+
*
|
|
9
|
+
* Unsupported browsers retain a fixed non-modal fallback by removing the unsupported attribute.
|
|
10
|
+
* Cross-modal fallback is intentionally not promised by the frozen browser support contract.
|
|
11
|
+
*
|
|
12
|
+
* @param ref - Reference containing the Portal surface.
|
|
13
|
+
* @param open - Whether the surface should be visible.
|
|
14
|
+
* @param portalTarget - Current Portal destination used to synchronize remounts.
|
|
15
|
+
*/
|
|
16
|
+
export function useMiaixzManualPopover(ref, open, portalTarget) {
|
|
17
|
+
useMiaixzClientLayoutEffect(() => {
|
|
18
|
+
const element = ref.current;
|
|
19
|
+
if (element === null)
|
|
20
|
+
return undefined;
|
|
21
|
+
return synchronizeMiaixzManualPopover(element, open);
|
|
22
|
+
}, [open, portalTarget, ref]);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Applies one top-layer state transition and returns exact teardown behavior.
|
|
26
|
+
*
|
|
27
|
+
* @param element - Connected or test-owned surface receiving top-layer state.
|
|
28
|
+
* @param open - Whether the surface should be visible.
|
|
29
|
+
* @returns Cleanup that hides the synchronized surface.
|
|
30
|
+
*/
|
|
31
|
+
export function synchronizeMiaixzManualPopover(element, open) {
|
|
32
|
+
if (typeof element.showPopover !== "function" || typeof element.hidePopover !== "function") {
|
|
33
|
+
element.removeAttribute("popover");
|
|
34
|
+
element.hidden = !open;
|
|
35
|
+
element.toggleAttribute("data-miaixz-top-layer-fallback", open);
|
|
36
|
+
return () => {
|
|
37
|
+
element.hidden = true;
|
|
38
|
+
element.removeAttribute("data-miaixz-top-layer-fallback");
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
element.hidden = false;
|
|
42
|
+
if (open && !element.matches(":popover-open"))
|
|
43
|
+
element.showPopover();
|
|
44
|
+
if (!open && element.matches(":popover-open"))
|
|
45
|
+
element.hidePopover();
|
|
46
|
+
return () => {
|
|
47
|
+
if (element.matches(":popover-open"))
|
|
48
|
+
element.hidePopover();
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=top-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top-layer.js","sourceRoot":"","sources":["../../../src/internal/overlay/top-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAkB,MAAM,OAAO,CAAC;AAEnE;;GAEG;AACH,MAAM,2BAA2B,GAAG,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC;AAElG;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAkC,EAClC,IAAa,EACb,YAAgC;IAEhC,2BAA2B,CAAC,GAAG,EAAE;QAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACvC,OAAO,8BAA8B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAAoB,EAAE,IAAa;IAChF,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC3F,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACnC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC;QACvB,OAAO,CAAC,eAAe,CAAC,gCAAgC,EAAE,IAAI,CAAC,CAAC;QAChE,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,eAAe,CAAC,gCAAgC,CAAC,CAAC;QAC5D,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;IACvB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QAAE,OAAO,CAAC,WAAW,EAAE,CAAC;IACrE,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QAAE,OAAO,CAAC,WAAW,EAAE,CAAC;IACrE,OAAO,GAAG,EAAE;QACV,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;YAAE,OAAO,CAAC,WAAW,EAAE,CAAC;IAC9D,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useLayoutEffect, type RefObject } from \"react\";\n\n/**\n * Uses layout timing in browsers and passive timing during server rendering.\n */\nconst useMiaixzClientLayoutEffect = typeof document === \"undefined\" ? useEffect : useLayoutEffect;\n\n/**\n * Synchronizes a non-modal surface with the browser manual Popover top layer.\n *\n * Unsupported browsers retain a fixed non-modal fallback by removing the unsupported attribute.\n * Cross-modal fallback is intentionally not promised by the frozen browser support contract.\n *\n * @param ref - Reference containing the Portal surface.\n * @param open - Whether the surface should be visible.\n * @param portalTarget - Current Portal destination used to synchronize remounts.\n */\nexport function useMiaixzManualPopover(\n ref: RefObject<HTMLElement | null>,\n open: boolean,\n portalTarget: HTMLElement | null,\n): void {\n useMiaixzClientLayoutEffect(() => {\n const element = ref.current;\n if (element === null) return undefined;\n return synchronizeMiaixzManualPopover(element, open);\n }, [open, portalTarget, ref]);\n}\n\n/**\n * Applies one top-layer state transition and returns exact teardown behavior.\n *\n * @param element - Connected or test-owned surface receiving top-layer state.\n * @param open - Whether the surface should be visible.\n * @returns Cleanup that hides the synchronized surface.\n */\nexport function synchronizeMiaixzManualPopover(element: HTMLElement, open: boolean): () => void {\n if (typeof element.showPopover !== \"function\" || typeof element.hidePopover !== \"function\") {\n element.removeAttribute(\"popover\");\n element.hidden = !open;\n element.toggleAttribute(\"data-miaixz-top-layer-fallback\", open);\n return () => {\n element.hidden = true;\n element.removeAttribute(\"data-miaixz-top-layer-fallback\");\n };\n }\n\n element.hidden = false;\n if (open && !element.matches(\":popover-open\")) element.showPopover();\n if (!open && element.matches(\":popover-open\")) element.hidePopover();\n return () => {\n if (element.matches(\":popover-open\")) element.hidePopover();\n };\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ForwardedRef, RefCallback } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Merges two callback or object refs into one stable React ref callback.
|
|
4
|
+
*
|
|
5
|
+
* @typeParam T - Value stored by the React refs.
|
|
6
|
+
* @param firstRef - First React ref that receives the value.
|
|
7
|
+
* @param secondRef - Second React ref that receives the value.
|
|
8
|
+
* @returns A ref callback that updates both source refs.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useMergedRef<T>(firstRef: ForwardedRef<T>, secondRef: ForwardedRef<T>): RefCallback<T>;
|
|
11
|
+
//# sourceMappingURL=use-merged-ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-merged-ref.d.ts","sourceRoot":"","sources":["../../src/internal/use-merged-ref.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoB,WAAW,EAAE,MAAM,OAAO,CAAC;AAiBzE;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GACzB,WAAW,CAAC,CAAC,CAAC,CAQhB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Assigns a value to either a callback ref or a mutable object ref.
|
|
4
|
+
*
|
|
5
|
+
* @typeParam T - Value stored by the React ref.
|
|
6
|
+
* @param ref - React ref that receives the value.
|
|
7
|
+
* @param value - Value assigned to the ref.
|
|
8
|
+
*/
|
|
9
|
+
function assignRef(ref, value) {
|
|
10
|
+
if (typeof ref === "function") {
|
|
11
|
+
ref(value);
|
|
12
|
+
}
|
|
13
|
+
else if (ref) {
|
|
14
|
+
ref.current = value;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Merges two callback or object refs into one stable React ref callback.
|
|
19
|
+
*
|
|
20
|
+
* @typeParam T - Value stored by the React refs.
|
|
21
|
+
* @param firstRef - First React ref that receives the value.
|
|
22
|
+
* @param secondRef - Second React ref that receives the value.
|
|
23
|
+
* @returns A ref callback that updates both source refs.
|
|
24
|
+
*/
|
|
25
|
+
export function useMergedRef(firstRef, secondRef) {
|
|
26
|
+
return useCallback((value) => {
|
|
27
|
+
assignRef(firstRef, value);
|
|
28
|
+
assignRef(secondRef, value);
|
|
29
|
+
}, [firstRef, secondRef]);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=use-merged-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-merged-ref.js","sourceRoot":"","sources":["../../src/internal/use-merged-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGpC;;;;;;GAMG;AACH,SAAS,SAAS,CAAI,GAAoB,EAAE,KAAQ;IAClD,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,GAAG,CAAC,KAAK,CAAC,CAAC;IACb,CAAC;SAAM,IAAI,GAAG,EAAE,CAAC;QACd,GAA2B,CAAC,OAAO,GAAG,KAAK,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAyB,EACzB,SAA0B;IAE1B,OAAO,WAAW,CAChB,CAAC,KAAQ,EAAE,EAAE;QACX,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC,EACD,CAAC,QAAQ,EAAE,SAAS,CAAC,CACtB,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback } from \"react\";\nimport type { ForwardedRef, MutableRefObject, RefCallback } from \"react\";\n\n/**\n * Assigns a value to either a callback ref or a mutable object ref.\n *\n * @typeParam T - Value stored by the React ref.\n * @param ref - React ref that receives the value.\n * @param value - Value assigned to the ref.\n */\nfunction assignRef<T>(ref: ForwardedRef<T>, value: T): void {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n (ref as MutableRefObject<T>).current = value;\n }\n}\n\n/**\n * Merges two callback or object refs into one stable React ref callback.\n *\n * @typeParam T - Value stored by the React refs.\n * @param firstRef - First React ref that receives the value.\n * @param secondRef - Second React ref that receives the value.\n * @returns A ref callback that updates both source refs.\n */\nexport function useMergedRef<T>(\n firstRef: ForwardedRef<T>,\n secondRef: ForwardedRef<T>,\n): RefCallback<T> {\n return useCallback(\n (value: T) => {\n assignRef(firstRef, value);\n assignRef(secondRef, value);\n },\n [firstRef, secondRef],\n );\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RefObject } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Synchronizes a controlled React boolean with a native modal dialog.
|
|
4
|
+
*
|
|
5
|
+
* @param ref - Ref containing the native dialog element.
|
|
6
|
+
* @param open - Controlled modal open state.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useNativeDialog(ref: RefObject<HTMLDialogElement | null>, open: boolean): void;
|
|
9
|
+
//# sourceMappingURL=use-native-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-native-dialog.d.ts","sourceRoot":"","sources":["../../src/internal/use-native-dialog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAQ7F"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Synchronizes a controlled React boolean with a native modal dialog.
|
|
4
|
+
*
|
|
5
|
+
* @param ref - Ref containing the native dialog element.
|
|
6
|
+
* @param open - Controlled modal open state.
|
|
7
|
+
*/
|
|
8
|
+
export function useNativeDialog(ref, open) {
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
const dialog = ref.current;
|
|
11
|
+
if (!dialog)
|
|
12
|
+
return;
|
|
13
|
+
if (open && !dialog.open)
|
|
14
|
+
dialog.showModal();
|
|
15
|
+
if (!open && dialog.open)
|
|
16
|
+
dialog.close();
|
|
17
|
+
}, [open, ref]);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=use-native-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-native-dialog.js","sourceRoot":"","sources":["../../src/internal/use-native-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAwC,EAAE,IAAa;IACrF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI;YAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAClB,CAAC","sourcesContent":["import { useEffect } from \"react\";\nimport type { RefObject } from \"react\";\n\n/**\n * Synchronizes a controlled React boolean with a native modal dialog.\n *\n * @param ref - Ref containing the native dialog element.\n * @param open - Controlled modal open state.\n */\nexport function useNativeDialog(ref: RefObject<HTMLDialogElement | null>, open: boolean): void {\n useEffect(() => {\n const dialog = ref.current;\n if (!dialog) return;\n\n if (open && !dialog.open) dialog.showModal();\n if (!open && dialog.open) dialog.close();\n }, [open, ref]);\n}\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type MiaixzAppearanceSettings, type MiaixzColorMode, type MiaixzResolvedColorMode } from "@miaixz/sdk/appearance";
|
|
2
|
+
export { isMiaixzAppearanceSettings, isMiaixzColorMode, isMiaixzDensity, miaixzColorModes, miaixzDarkThemeColors, miaixzDefaultAppearance, miaixzDensities, miaixzLightThemeColors, miaixzThemeColorTokens, parseMiaixzAppearanceSettings, validateMiaixzThemeContrast, } from "@miaixz/sdk/appearance";
|
|
3
|
+
export type { MiaixzAppearancePayload, MiaixzAppearanceSettings, MiaixzColorMode, MiaixzDensity, MiaixzResolvedColorMode, MiaixzThemeColors, MiaixzThemeColorToken, } from "@miaixz/sdk/appearance";
|
|
4
|
+
/**
|
|
5
|
+
* Resolves a color preference to a concrete light or dark mode.
|
|
6
|
+
*
|
|
7
|
+
* @param colorMode - Configured light, dark, or system preference.
|
|
8
|
+
* @param prefersDark - Optional explicit system dark-mode result.
|
|
9
|
+
* @returns Concrete light or dark mode.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveMiaixzColorMode(colorMode: MiaixzColorMode, prefersDark?: boolean): MiaixzResolvedColorMode;
|
|
13
|
+
/**
|
|
14
|
+
* Validates and atomically applies appearance attributes and custom colors to a DOM target.
|
|
15
|
+
*
|
|
16
|
+
* @param appearance - Appearance settings to validate and apply.
|
|
17
|
+
* @param target - Optional target element, null for resolution without DOM writes.
|
|
18
|
+
* @param prefersDark - Optional explicit system dark-mode result.
|
|
19
|
+
* @returns Concrete light or dark mode applied or resolved.
|
|
20
|
+
* @throws MiaixzSdkError When the appearance syntax, colors, or contrast are invalid.
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
export declare function applyMiaixzAppearance(appearance: Readonly<MiaixzAppearanceSettings>, target?: HTMLElement | null, prefersDark?: boolean): MiaixzResolvedColorMode;
|
|
24
|
+
/**
|
|
25
|
+
* Watches operating-system color preference changes in supported browsers.
|
|
26
|
+
*
|
|
27
|
+
* @param listener - Callback invoked with each changed concrete color mode.
|
|
28
|
+
* @returns An idempotent function that removes the system listener.
|
|
29
|
+
* @public
|
|
30
|
+
*/
|
|
31
|
+
export declare function watchMiaixzSystemColorMode(listener: (mode: MiaixzResolvedColorMode) => void): () => void;
|
|
32
|
+
//# sourceMappingURL=appearance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appearance.d.ts","sourceRoot":"","sources":["../../src/runtime/appearance.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,eAAe,EAC1B,WAAW,UAA6B,GACvC,uBAAuB,CAEzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAC9C,MAAM,GAAE,WAAW,GAAG,IAAwE,EAC9F,WAAW,CAAC,EAAE,OAAO,GACpB,uBAAuB,CAqCzB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,GAChD,MAAM,IAAI,CAmBZ"}
|