@kupola/kupola 1.9.16 → 2.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +247 -401
- package/README.zh-CN.md +333 -0
- package/dist/kupola-core-alert.cjs.js +9 -0
- package/dist/kupola-core-alert.esm.js +9 -0
- package/dist/kupola-core-avatar.cjs.js +1 -0
- package/dist/kupola-core-avatar.esm.js +1 -0
- package/dist/kupola-core-badge.cjs.js +3 -0
- package/dist/kupola-core-badge.esm.js +3 -0
- package/dist/kupola-core-breadcrumb.cjs.js +1 -0
- package/dist/kupola-core-breadcrumb.esm.js +1 -0
- package/dist/kupola-core-calendar.cjs.js +1 -0
- package/dist/kupola-core-calendar.esm.js +1 -0
- package/dist/kupola-core-carousel.cjs.js +12 -0
- package/dist/kupola-core-carousel.esm.js +12 -0
- package/dist/kupola-core-checkbox.cjs.js +7 -0
- package/dist/kupola-core-checkbox.esm.js +7 -0
- package/dist/kupola-core-collapse.cjs.js +11 -0
- package/dist/kupola-core-collapse.esm.js +11 -0
- package/dist/kupola-core-colorpicker.cjs.js +14 -0
- package/dist/kupola-core-colorpicker.esm.js +14 -0
- package/dist/kupola-core-countdown.cjs.js +23 -0
- package/dist/kupola-core-countdown.esm.js +23 -0
- package/dist/kupola-core-datepicker.cjs.js +28 -0
- package/dist/kupola-core-datepicker.esm.js +28 -0
- package/dist/kupola-core-dialog.cjs.js +13 -0
- package/dist/kupola-core-dialog.esm.js +13 -0
- package/dist/kupola-core-directives.cjs.js +1 -0
- package/dist/kupola-core-directives.esm.js +1 -0
- package/dist/kupola-core-divider.cjs.js +1 -0
- package/dist/kupola-core-divider.esm.js +1 -0
- package/dist/kupola-core-drawer.cjs.js +15 -0
- package/dist/kupola-core-drawer.esm.js +15 -0
- package/dist/kupola-core-dropdown.cjs.js +11 -0
- package/dist/kupola-core-dropdown.esm.js +11 -0
- package/dist/kupola-core-dynamictags.cjs.js +8 -0
- package/dist/kupola-core-dynamictags.esm.js +8 -0
- package/dist/kupola-core-empty.cjs.js +7 -0
- package/dist/kupola-core-empty.esm.js +7 -0
- package/dist/kupola-core-fileupload.cjs.js +15 -0
- package/dist/kupola-core-fileupload.esm.js +15 -0
- package/dist/kupola-core-form.cjs.js +1 -0
- package/dist/kupola-core-form.esm.js +1 -0
- package/dist/kupola-core-heatmap.cjs.js +1 -0
- package/dist/kupola-core-heatmap.esm.js +1 -0
- package/dist/kupola-core-icons.cjs.js +1 -0
- package/dist/kupola-core-icons.esm.js +1 -0
- package/dist/kupola-core-imagepreview.cjs.js +20 -0
- package/dist/kupola-core-imagepreview.esm.js +20 -0
- package/dist/kupola-core-input.cjs.js +5 -0
- package/dist/kupola-core-input.esm.js +5 -0
- package/dist/kupola-core-kbd.cjs.js +1 -0
- package/dist/kupola-core-kbd.esm.js +1 -0
- package/dist/kupola-core-menu.cjs.js +1 -0
- package/dist/kupola-core-menu.esm.js +1 -0
- package/dist/kupola-core-message.cjs.js +1 -0
- package/dist/kupola-core-message.esm.js +1 -0
- package/dist/kupola-core-modal.cjs.js +15 -0
- package/dist/kupola-core-modal.esm.js +15 -0
- package/dist/kupola-core-notification.cjs.js +1 -0
- package/dist/kupola-core-notification.esm.js +1 -0
- package/dist/kupola-core-numberinput.cjs.js +7 -0
- package/dist/kupola-core-numberinput.esm.js +7 -0
- package/dist/kupola-core-pagination.cjs.js +12 -0
- package/dist/kupola-core-pagination.esm.js +12 -0
- package/dist/kupola-core-progress.cjs.js +5 -0
- package/dist/kupola-core-progress.esm.js +5 -0
- package/dist/kupola-core-radio.cjs.js +1 -0
- package/dist/kupola-core-radio.esm.js +1 -0
- package/dist/kupola-core-select.cjs.js +15 -0
- package/dist/kupola-core-select.esm.js +15 -0
- package/dist/kupola-core-server.cjs.js +1 -0
- package/dist/kupola-core-server.esm.js +1 -0
- package/dist/kupola-core-skeleton.cjs.js +1 -0
- package/dist/kupola-core-skeleton.esm.js +1 -0
- package/dist/kupola-core-slider.cjs.js +15 -0
- package/dist/kupola-core-slider.esm.js +15 -0
- package/dist/kupola-core-spin.cjs.js +6 -0
- package/dist/kupola-core-spin.esm.js +6 -0
- package/dist/kupola-core-statcard.cjs.js +18 -0
- package/dist/kupola-core-statcard.esm.js +18 -0
- package/dist/kupola-core-switch.cjs.js +6 -0
- package/dist/kupola-core-switch.esm.js +6 -0
- package/dist/kupola-core-table.cjs.js +1 -0
- package/dist/kupola-core-table.esm.js +1 -0
- package/dist/kupola-core-tabs.cjs.js +6 -0
- package/dist/kupola-core-tabs.esm.js +6 -0
- package/dist/kupola-core-tag.cjs.js +6 -0
- package/dist/kupola-core-tag.esm.js +6 -0
- package/dist/kupola-core-textarea.cjs.js +3 -0
- package/dist/kupola-core-textarea.esm.js +3 -0
- package/dist/kupola-core-timeline.cjs.js +1 -0
- package/dist/kupola-core-timeline.esm.js +1 -0
- package/dist/kupola-core-timepicker.cjs.js +22 -0
- package/dist/kupola-core-timepicker.esm.js +22 -0
- package/dist/kupola-core-tooltip.cjs.js +1 -0
- package/dist/kupola-core-tooltip.esm.js +1 -0
- package/dist/kupola-core-tree.cjs.js +1 -0
- package/dist/kupola-core-tree.esm.js +1 -0
- package/dist/kupola-core-validation.cjs.js +1 -0
- package/dist/kupola-core-validation.esm.js +1 -0
- package/dist/kupola-core-virtuallist.cjs.js +7 -0
- package/dist/kupola-core-virtuallist.esm.js +7 -0
- package/dist/kupola-core.cjs.js +1 -0
- package/dist/kupola-core.esm.js +1 -0
- package/package.json +203 -75
- package/packages/core/__tests__/component.test.js +269 -0
- package/packages/core/__tests__/components/alert.test.js +136 -0
- package/packages/core/__tests__/components/avatar.test.js +132 -0
- package/packages/core/__tests__/components/badge.test.js +187 -0
- package/packages/core/__tests__/components/breadcrumb.test.js +120 -0
- package/packages/core/__tests__/components/calendar.test.js +293 -0
- package/packages/core/__tests__/components/carousel.test.js +220 -0
- package/packages/core/__tests__/components/checkbox.test.js +139 -0
- package/packages/core/__tests__/components/collapse.test.js +220 -0
- package/packages/core/__tests__/components/colorpicker.test.js +173 -0
- package/packages/core/__tests__/components/countdown.test.js +156 -0
- package/packages/core/__tests__/components/datepicker.test.js +344 -0
- package/packages/core/__tests__/components/dialog.test.js +188 -0
- package/packages/core/__tests__/components/divider.test.js +84 -0
- package/packages/core/__tests__/components/drawer.test.js +230 -0
- package/packages/core/__tests__/components/dropdown.test.js +324 -0
- package/packages/core/__tests__/components/dynamictags.test.js +239 -0
- package/packages/core/__tests__/components/empty.test.js +107 -0
- package/packages/core/__tests__/components/fileupload.test.js +151 -0
- package/packages/core/__tests__/components/form.test.js +258 -0
- package/packages/core/__tests__/components/heatmap.test.js +161 -0
- package/packages/core/__tests__/components/icons.test.js +166 -0
- package/packages/core/__tests__/components/imagepreview.test.js +166 -0
- package/packages/core/__tests__/components/input.test.js +165 -0
- package/packages/core/__tests__/components/kbd.test.js +74 -0
- package/packages/core/__tests__/components/menu.test.js +131 -0
- package/packages/core/__tests__/components/message.test.js +136 -0
- package/packages/core/__tests__/components/modal.test.js +291 -0
- package/packages/core/__tests__/components/notification.test.js +164 -0
- package/packages/core/__tests__/components/numberinput.test.js +153 -0
- package/packages/core/__tests__/components/pagination.test.js +229 -0
- package/packages/core/__tests__/components/progress.test.js +156 -0
- package/packages/core/__tests__/components/radio.test.js +167 -0
- package/packages/core/__tests__/components/select.test.js +352 -0
- package/packages/core/__tests__/components/skeleton.test.js +126 -0
- package/packages/core/__tests__/components/slider.test.js +177 -0
- package/packages/core/__tests__/components/spin.test.js +95 -0
- package/packages/core/__tests__/components/statcard.test.js +167 -0
- package/packages/core/__tests__/components/switch.test.js +145 -0
- package/packages/core/__tests__/components/table.test.js +611 -0
- package/packages/core/__tests__/components/tabs.test.js +185 -0
- package/packages/core/__tests__/components/tag.test.js +130 -0
- package/packages/core/__tests__/components/textarea.test.js +137 -0
- package/packages/core/__tests__/components/timeline.test.js +126 -0
- package/packages/core/__tests__/components/timepicker.test.js +184 -0
- package/packages/core/__tests__/components/tooltip.test.js +237 -0
- package/packages/core/__tests__/components/tree.test.js +238 -0
- package/packages/core/__tests__/components/validation.test.js +256 -0
- package/packages/core/__tests__/components/virtuallist.test.js +141 -0
- package/packages/core/__tests__/core.test.js +357 -0
- package/packages/core/__tests__/directives.test.js +467 -0
- package/packages/core/__tests__/server.test.js +290 -0
- package/packages/core/__tests__/template.test.js +301 -0
- package/packages/core/package.json +234 -0
- package/packages/core/src/batch.js +66 -0
- package/packages/core/src/component.js +154 -0
- package/packages/core/src/components/alert.js +92 -0
- package/packages/core/src/components/avatar.js +87 -0
- package/packages/core/src/components/badge.js +106 -0
- package/packages/core/src/components/breadcrumb.js +83 -0
- package/packages/core/src/components/calendar.js +442 -0
- package/packages/core/src/components/carousel.js +173 -0
- package/packages/core/src/components/checkbox.js +101 -0
- package/packages/core/src/components/collapse.js +148 -0
- package/packages/core/src/components/colorpicker.js +147 -0
- package/packages/core/src/components/countdown.js +142 -0
- package/packages/core/src/components/datepicker.js +378 -0
- package/packages/core/src/components/dialog.js +142 -0
- package/packages/core/src/components/divider.js +63 -0
- package/packages/core/src/components/drawer.js +125 -0
- package/packages/core/src/components/dropdown.js +191 -0
- package/packages/core/src/components/dynamictags.js +173 -0
- package/packages/core/src/components/empty.js +71 -0
- package/packages/core/src/components/fileupload.js +203 -0
- package/packages/core/src/components/form.js +257 -0
- package/packages/core/src/components/heatmap.js +324 -0
- package/{js → packages/core/src/components}/icons.js +40 -53
- package/packages/core/src/components/imagepreview.js +146 -0
- package/packages/core/src/components/input.js +117 -0
- package/packages/core/src/components/kbd.js +53 -0
- package/packages/core/src/components/menu.js +105 -0
- package/packages/core/src/components/message.js +115 -0
- package/packages/core/src/components/modal.js +120 -0
- package/packages/core/src/components/notification.js +150 -0
- package/packages/core/src/components/numberinput.js +141 -0
- package/packages/core/src/components/pagination.js +186 -0
- package/packages/core/src/components/progress.js +107 -0
- package/packages/core/src/components/radio.js +128 -0
- package/packages/core/src/components/select.js +340 -0
- package/packages/core/src/components/skeleton.js +77 -0
- package/packages/core/src/components/slider.js +134 -0
- package/packages/core/src/components/spin.js +58 -0
- package/packages/core/src/components/statcard.js +100 -0
- package/packages/core/src/components/switch.js +105 -0
- package/packages/core/src/components/table.js +916 -0
- package/packages/core/src/components/tabs.js +139 -0
- package/packages/core/src/components/tag.js +89 -0
- package/packages/core/src/components/textarea.js +115 -0
- package/packages/core/src/components/timeline.js +91 -0
- package/packages/core/src/components/timepicker.js +212 -0
- package/packages/core/src/components/tooltip.js +184 -0
- package/packages/core/src/components/tree.js +156 -0
- package/packages/core/src/components/types.d.ts +917 -0
- package/packages/core/src/components/validation.js +329 -0
- package/packages/core/src/components/virtuallist.js +157 -0
- package/packages/core/src/computed.js +118 -0
- package/packages/core/src/directives.js +413 -0
- package/packages/core/src/effect.js +98 -0
- package/packages/core/src/index.js +39 -0
- package/packages/core/src/render.js +431 -0
- package/packages/core/src/scheduler.js +51 -0
- package/packages/core/src/server.js +446 -0
- package/packages/core/src/signal.js +157 -0
- package/packages/core/src/template.js +51 -0
- package/adapters/axios.d.ts +0 -34
- package/adapters/axios.js +0 -122
- package/adapters/navios-http.d.ts +0 -110
- package/adapters/navios-http.js +0 -151
- package/css/accessibility.css +0 -119
- package/css/animations.css +0 -224
- package/css/brand-themes.css +0 -300
- package/css/colors-and-type.css +0 -408
- package/css/components-ext.css +0 -4401
- package/css/components.css +0 -1576
- package/css/dashboard.css +0 -425
- package/css/kupola.css +0 -13
- package/css/responsive.css +0 -697
- package/css/scaffold.css +0 -155
- package/css/states.css +0 -316
- package/css/table.css +0 -75
- package/css/theme.css +0 -568
- package/css/utilities.css +0 -334
- package/dist/core-Cs-VWZ5H.cjs +0 -1
- package/dist/core-DBjFFC_n.js +0 -4959
- package/dist/core.cjs.js +0 -1
- package/dist/core.esm.js +0 -106
- package/dist/css/accessibility.css +0 -119
- package/dist/css/animations.css +0 -224
- package/dist/css/brand-themes.css +0 -300
- package/dist/css/colors-and-type.css +0 -408
- package/dist/css/components-ext.css +0 -4401
- package/dist/css/components.css +0 -1576
- package/dist/css/dashboard.css +0 -368
- package/dist/css/kupola.css +0 -14
- package/dist/css/responsive.css +0 -697
- package/dist/css/scaffold.css +0 -155
- package/dist/css/states.css +0 -316
- package/dist/css/table.css +0 -75
- package/dist/css/theme-dark.css +0 -341
- package/dist/css/theme-light.css +0 -298
- package/dist/css/utilities.css +0 -334
- package/dist/icons/icons/activity.svg +0 -3
- package/dist/icons/icons/alert-circle.svg +0 -1
- package/dist/icons/icons/alert-triangle.svg +0 -1
- package/dist/icons/icons/alert.d27e24.svg +0 -1
- package/dist/icons/icons/alert.svg +0 -1
- package/dist/icons/icons/apple.svg +0 -1
- package/dist/icons/icons/arrow-down.svg +0 -1
- package/dist/icons/icons/arrow-expand.svg +0 -1
- package/dist/icons/icons/arrow-left.svg +0 -1
- package/dist/icons/icons/arrow-minimize.svg +0 -1
- package/dist/icons/icons/arrow-right-to-line.svg +0 -1
- package/dist/icons/icons/arrow-right.svg +0 -1
- package/dist/icons/icons/arrow-up-right.svg +0 -1
- package/dist/icons/icons/arrow-up.0c0c0d.svg +0 -1
- package/dist/icons/icons/arrow-up.svg +0 -1
- package/dist/icons/icons/at.svg +0 -1
- package/dist/icons/icons/atom.0c0c0d.svg +0 -1
- package/dist/icons/icons/atom.svg +0 -1
- package/dist/icons/icons/bar-chart-2.svg +0 -1
- package/dist/icons/icons/bar.svg +0 -1
- package/dist/icons/icons/bell.svg +0 -1
- package/dist/icons/icons/box.svg +0 -1
- package/dist/icons/icons/bug.svg +0 -1
- package/dist/icons/icons/button.svg +0 -1
- package/dist/icons/icons/calendar.svg +0 -1
- package/dist/icons/icons/check-circle.33c192.svg +0 -1
- package/dist/icons/icons/check-circle.svg +0 -1
- package/dist/icons/icons/check-square.svg +0 -4
- package/dist/icons/icons/check.d1d3db.svg +0 -1
- package/dist/icons/icons/check.svg +0 -1
- package/dist/icons/icons/chevron-down.svg +0 -1
- package/dist/icons/icons/chevron-left.svg +0 -1
- package/dist/icons/icons/chevron-right.svg +0 -1
- package/dist/icons/icons/chevron-up.svg +0 -1
- package/dist/icons/icons/circle.svg +0 -1
- package/dist/icons/icons/clock.svg +0 -1
- package/dist/icons/icons/cmd.svg +0 -1
- package/dist/icons/icons/code.svg +0 -1
- package/dist/icons/icons/columns.svg +0 -1
- package/dist/icons/icons/copy.svg +0 -1
- package/dist/icons/icons/cpu.svg +0 -1
- package/dist/icons/icons/dashboard.0c0c0d.svg +0 -1
- package/dist/icons/icons/dashboard.svg +0 -1
- package/dist/icons/icons/dollar.svg +0 -1
- package/dist/icons/icons/download.svg +0 -1
- package/dist/icons/icons/edit.svg +0 -1
- package/dist/icons/icons/extensions.svg +0 -1
- package/dist/icons/icons/external.svg +0 -1
- package/dist/icons/icons/eye.svg +0 -1
- package/dist/icons/icons/file-text.svg +0 -1
- package/dist/icons/icons/file.svg +0 -1
- package/dist/icons/icons/files.svg +0 -1
- package/dist/icons/icons/filter.svg +0 -1
- package/dist/icons/icons/folder-open.svg +0 -4
- package/dist/icons/icons/folder.svg +0 -1
- package/dist/icons/icons/gear.svg +0 -1
- package/dist/icons/icons/git.svg +0 -1
- package/dist/icons/icons/github.svg +0 -1
- package/dist/icons/icons/globe.svg +0 -1
- package/dist/icons/icons/grid-2x2.svg +0 -1
- package/dist/icons/icons/hash.svg +0 -1
- package/dist/icons/icons/heart.svg +0 -1
- package/dist/icons/icons/help-circle.svg +0 -5
- package/dist/icons/icons/help.svg +0 -1
- package/dist/icons/icons/home.svg +0 -1
- package/dist/icons/icons/icons.svg +0 -153
- package/dist/icons/icons/image.svg +0 -1
- package/dist/icons/icons/info-circle.svg +0 -1
- package/dist/icons/icons/info-square.svg +0 -1
- package/dist/icons/icons/info.387bff.svg +0 -1
- package/dist/icons/icons/info.svg +0 -1
- package/dist/icons/icons/input.svg +0 -1
- package/dist/icons/icons/key.svg +0 -1
- package/dist/icons/icons/layers.svg +0 -1
- package/dist/icons/icons/layout-grid.svg +0 -6
- package/dist/icons/icons/layout.svg +0 -1
- package/dist/icons/icons/link.svg +0 -1
- package/dist/icons/icons/list.svg +0 -1
- package/dist/icons/icons/lock.svg +0 -1
- package/dist/icons/icons/log-out.svg +0 -1
- package/dist/icons/icons/logo.svg +0 -1
- package/dist/icons/icons/mail.svg +0 -1
- package/dist/icons/icons/menu.svg +0 -1
- package/dist/icons/icons/message-circle.svg +0 -1
- package/dist/icons/icons/message-plus.svg +0 -1
- package/dist/icons/icons/message-square.svg +0 -1
- package/dist/icons/icons/mic.svg +0 -1
- package/dist/icons/icons/minus.svg +0 -1
- package/dist/icons/icons/moon.svg +0 -1
- package/dist/icons/icons/more-h.svg +0 -1
- package/dist/icons/icons/mouse.svg +0 -1
- package/dist/icons/icons/palette.svg +0 -1
- package/dist/icons/icons/panel-bottom.svg +0 -1
- package/dist/icons/icons/pause.svg +0 -1
- package/dist/icons/icons/play.svg +0 -1
- package/dist/icons/icons/plug.svg +0 -1
- package/dist/icons/icons/plus.0c0c0d.svg +0 -1
- package/dist/icons/icons/plus.svg +0 -1
- package/dist/icons/icons/refresh.svg +0 -1
- package/dist/icons/icons/ruler.svg +0 -1
- package/dist/icons/icons/scroll-text.svg +0 -1
- package/dist/icons/icons/search-menu.svg +0 -1
- package/dist/icons/icons/search.svg +0 -1
- package/dist/icons/icons/send.0c0c0d.svg +0 -1
- package/dist/icons/icons/send.svg +0 -1
- package/dist/icons/icons/settings.0c0c0d.svg +0 -1
- package/dist/icons/icons/settings.svg +0 -1
- package/dist/icons/icons/shield.svg +0 -1
- package/dist/icons/icons/sidebar-left.svg +0 -1
- package/dist/icons/icons/sidebar-right.svg +0 -1
- package/dist/icons/icons/sliders.svg +0 -1
- package/dist/icons/icons/sparkles.32f08c.svg +0 -1
- package/dist/icons/icons/sparkles.svg +0 -1
- package/dist/icons/icons/square.svg +0 -1
- package/dist/icons/icons/star.svg +0 -1
- package/dist/icons/icons/sun.svg +0 -1
- package/dist/icons/icons/table.svg +0 -1
- package/dist/icons/icons/terminal.svg +0 -1
- package/dist/icons/icons/trash.svg +0 -1
- package/dist/icons/icons/trending-down.svg +0 -1
- package/dist/icons/icons/trending-up.svg +0 -1
- package/dist/icons/icons/type.svg +0 -1
- package/dist/icons/icons/upload.svg +0 -1
- package/dist/icons/icons/user-circle.svg +0 -1
- package/dist/icons/icons/user-plus.svg +0 -6
- package/dist/icons/icons/user.svg +0 -1
- package/dist/icons/icons/users.svg +0 -1
- package/dist/icons/icons/warning.svg +0 -1
- package/dist/icons/icons/wrench.svg +0 -1
- package/dist/icons/icons/x-circle.svg +0 -1
- package/dist/icons/icons/x.svg +0 -1
- package/dist/icons/icons/zap.0c0c0d.svg +0 -1
- package/dist/icons/icons/zap.svg +0 -1
- package/dist/kupola.cjs.js +0 -1
- package/dist/kupola.css +0 -9601
- package/dist/kupola.esm.js +0 -9965
- package/dist/kupola.min.css +0 -1
- package/dist/plugins/vite-plugin-kupola.js +0 -142
- package/dist/plugins/webpack-plugin-kupola.js +0 -69
- package/dist/react-theme.js +0 -111
- package/dist/theme-preload.js +0 -75
- package/dist/theme-standalone.js +0 -161
- package/dist/types/kupola.d.ts +0 -1608
- package/dist/vue-theme.js +0 -78
- package/icons/activity.svg +0 -3
- package/icons/alert-circle.svg +0 -1
- package/icons/alert-triangle.svg +0 -1
- package/icons/alert.d27e24.svg +0 -1
- package/icons/alert.svg +0 -1
- package/icons/apple.svg +0 -1
- package/icons/arrow-down.svg +0 -1
- package/icons/arrow-expand.svg +0 -1
- package/icons/arrow-left.svg +0 -1
- package/icons/arrow-minimize.svg +0 -1
- package/icons/arrow-right-to-line.svg +0 -1
- package/icons/arrow-right.svg +0 -1
- package/icons/arrow-up-right.svg +0 -1
- package/icons/arrow-up.0c0c0d.svg +0 -1
- package/icons/arrow-up.svg +0 -1
- package/icons/at.svg +0 -1
- package/icons/atom.0c0c0d.svg +0 -1
- package/icons/atom.svg +0 -1
- package/icons/bar-chart-2.svg +0 -1
- package/icons/bar.svg +0 -1
- package/icons/bell.svg +0 -1
- package/icons/box.svg +0 -1
- package/icons/bug.svg +0 -1
- package/icons/button.svg +0 -1
- package/icons/calendar.svg +0 -1
- package/icons/check-circle.33c192.svg +0 -1
- package/icons/check-circle.svg +0 -1
- package/icons/check-square.svg +0 -4
- package/icons/check.d1d3db.svg +0 -1
- package/icons/check.svg +0 -1
- package/icons/chevron-down.svg +0 -1
- package/icons/chevron-left.svg +0 -1
- package/icons/chevron-right.svg +0 -1
- package/icons/chevron-up.svg +0 -1
- package/icons/circle.svg +0 -1
- package/icons/clock.svg +0 -1
- package/icons/cmd.svg +0 -1
- package/icons/code.svg +0 -1
- package/icons/columns.svg +0 -1
- package/icons/copy.svg +0 -1
- package/icons/cpu.svg +0 -1
- package/icons/dashboard.0c0c0d.svg +0 -1
- package/icons/dashboard.svg +0 -1
- package/icons/dollar.svg +0 -1
- package/icons/download.svg +0 -1
- package/icons/edit.svg +0 -1
- package/icons/extensions.svg +0 -1
- package/icons/external.svg +0 -1
- package/icons/eye.svg +0 -1
- package/icons/file-text.svg +0 -1
- package/icons/file.svg +0 -1
- package/icons/files.svg +0 -1
- package/icons/filter.svg +0 -1
- package/icons/folder-open.svg +0 -4
- package/icons/folder.svg +0 -1
- package/icons/gear.svg +0 -1
- package/icons/git.svg +0 -1
- package/icons/github.svg +0 -1
- package/icons/globe.svg +0 -1
- package/icons/grid-2x2.svg +0 -1
- package/icons/hash.svg +0 -1
- package/icons/heart.svg +0 -1
- package/icons/help-circle.svg +0 -5
- package/icons/help.svg +0 -1
- package/icons/home.svg +0 -1
- package/icons/icons.svg +0 -153
- package/icons/image.svg +0 -1
- package/icons/info-circle.svg +0 -1
- package/icons/info-square.svg +0 -1
- package/icons/info.387bff.svg +0 -1
- package/icons/info.svg +0 -1
- package/icons/input.svg +0 -1
- package/icons/key.svg +0 -1
- package/icons/layers.svg +0 -1
- package/icons/layout-grid.svg +0 -6
- package/icons/layout.svg +0 -1
- package/icons/link.svg +0 -1
- package/icons/list.svg +0 -1
- package/icons/lock.svg +0 -1
- package/icons/log-out.svg +0 -1
- package/icons/logo.svg +0 -1
- package/icons/mail.svg +0 -1
- package/icons/menu.svg +0 -1
- package/icons/message-circle.svg +0 -1
- package/icons/message-plus.svg +0 -1
- package/icons/message-square.svg +0 -1
- package/icons/mic.svg +0 -1
- package/icons/minus.svg +0 -1
- package/icons/moon.svg +0 -1
- package/icons/more-h.svg +0 -1
- package/icons/mouse.svg +0 -1
- package/icons/palette.svg +0 -1
- package/icons/panel-bottom.svg +0 -1
- package/icons/pause.svg +0 -1
- package/icons/play.svg +0 -1
- package/icons/plug.svg +0 -1
- package/icons/plus.0c0c0d.svg +0 -1
- package/icons/plus.svg +0 -1
- package/icons/refresh.svg +0 -1
- package/icons/ruler.svg +0 -1
- package/icons/scroll-text.svg +0 -1
- package/icons/search-menu.svg +0 -1
- package/icons/search.svg +0 -1
- package/icons/send.0c0c0d.svg +0 -1
- package/icons/send.svg +0 -1
- package/icons/settings.0c0c0d.svg +0 -1
- package/icons/settings.svg +0 -1
- package/icons/shield.svg +0 -1
- package/icons/sidebar-left.svg +0 -1
- package/icons/sidebar-right.svg +0 -1
- package/icons/sliders.svg +0 -1
- package/icons/sparkles.32f08c.svg +0 -1
- package/icons/sparkles.svg +0 -1
- package/icons/square.svg +0 -1
- package/icons/star.svg +0 -1
- package/icons/sun.svg +0 -1
- package/icons/table.svg +0 -1
- package/icons/terminal.svg +0 -1
- package/icons/trash.svg +0 -1
- package/icons/trending-down.svg +0 -1
- package/icons/trending-up.svg +0 -1
- package/icons/type.svg +0 -1
- package/icons/upload.svg +0 -1
- package/icons/user-circle.svg +0 -1
- package/icons/user-plus.svg +0 -6
- package/icons/user.svg +0 -1
- package/icons/users.svg +0 -1
- package/icons/warning.svg +0 -1
- package/icons/wrench.svg +0 -1
- package/icons/x-circle.svg +0 -1
- package/icons/x.svg +0 -1
- package/icons/zap.0c0c0d.svg +0 -1
- package/icons/zap.svg +0 -1
- package/js/calendar.js +0 -486
- package/js/carousel.js +0 -300
- package/js/collapse.js +0 -234
- package/js/color-picker.js +0 -441
- package/js/component.js +0 -251
- package/js/countdown.js +0 -138
- package/js/data-bind.js +0 -1363
- package/js/datepicker.js +0 -716
- package/js/depends.js +0 -732
- package/js/dialog.js +0 -129
- package/js/drawer.js +0 -274
- package/js/dropdown.js +0 -509
- package/js/dynamic-tags.js +0 -265
- package/js/fileupload.js +0 -391
- package/js/form.js +0 -323
- package/js/global-events.js +0 -283
- package/js/heatmap.js +0 -399
- package/js/i18n.js +0 -226
- package/js/image-preview.js +0 -356
- package/js/initializer.js +0 -201
- package/js/kupola-config.js +0 -212
- package/js/kupola-core.js +0 -161
- package/js/kupola-lifecycle.js +0 -504
- package/js/message.js +0 -78
- package/js/modal.js +0 -348
- package/js/notification.js +0 -81
- package/js/numberinput.js +0 -140
- package/js/pagination.js +0 -258
- package/js/react-theme.js +0 -111
- package/js/registry.js +0 -218
- package/js/security.js +0 -113
- package/js/select.js +0 -701
- package/js/slide-captcha.js +0 -500
- package/js/slider.js +0 -504
- package/js/statcard.js +0 -213
- package/js/table.js +0 -1188
- package/js/tag.js +0 -330
- package/js/theme-preload.js +0 -75
- package/js/theme-standalone.js +0 -161
- package/js/theme.js +0 -372
- package/js/timepicker.js +0 -494
- package/js/tooltip.js +0 -353
- package/js/utils.js +0 -304
- package/js/validation.js +0 -567
- package/js/virtual-list.js +0 -572
- package/js/vue-theme.js +0 -78
- package/js/web-components.js +0 -279
- package/plugins/vite-plugin-kupola.js +0 -142
- package/plugins/webpack-plugin-kupola.js +0 -69
- package/scripts/build-css.cjs +0 -115
- package/scripts/build-svg-sprite.cjs +0 -107
- package/types/kupola.d.ts +0 -1608
package/README.md
CHANGED
|
@@ -1,487 +1,333 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
> A lightweight, dependency-free declarative UI component system for server-side rendered web applications.
|
|
4
|
-
>
|
|
5
|
-
> 零外部框架依赖的声明式 UI 组件系统,适用于任何服务端渲染 Web 应用。
|
|
6
|
-
|
|
7
|
-
[](https://github.com/kupola-cn/kupola/blob/main/LICENSE)
|
|
8
|
-
[](https://www.npmjs.com/package/@kupola/kupola)
|
|
9
|
-
[](https://bundlephobia.com/package/@kupola/kupola)
|
|
10
|
-
[](https://github.com/kupola-cn/kupola/stargazers)
|
|
11
|
-
|
|
12
|
-
**HTMX** (data fetching) + **Alpine.js** (declarative interaction) + **Bootstrap** (component richness) — in one zero-dependency package.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## 🌐 Languages / 语言
|
|
17
|
-
|
|
18
|
-
- [English](#english)
|
|
19
|
-
- [中文](#中文)
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## 📦 构建工具插件
|
|
24
|
-
|
|
25
|
-
### Vite 插件
|
|
26
|
-
|
|
27
|
-
```js
|
|
28
|
-
// vite.config.js
|
|
29
|
-
import { kupola } from '@kupola/kupola/vite';
|
|
30
|
-
|
|
31
|
-
export default {
|
|
32
|
-
plugins: [kupola()]
|
|
33
|
-
};
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
**配置选项:**
|
|
37
|
-
|
|
38
|
-
| 选项 | 类型 | 默认值 | 说明 |
|
|
39
|
-
|------|------|--------|------|
|
|
40
|
-
| `autoCSS` | boolean | `true` | 自动注入 Kupola CSS |
|
|
41
|
-
| `autoImport` | boolean | `true` | 自动导入 `useDeps`/`useQuery` |
|
|
42
|
-
| `devTools` | boolean | `true` | 开发模式下启用调试工具 |
|
|
43
|
-
| `cssPath` | string | `null` | 自定义 CSS 路径 |
|
|
44
|
-
| `themePreload` | boolean | `false` | 自动注入主题预加载脚本 |
|
|
1
|
+
[中文文档](./README.zh-CN.md)
|
|
45
2
|
|
|
46
|
-
|
|
3
|
+

|
|
4
|
+

|
|
5
|
+

|
|
6
|
+

|
|
47
7
|
|
|
48
|
-
|
|
49
|
-
// webpack.config.js
|
|
50
|
-
const KupolaWebpackPlugin = require('@kupola/kupola/webpack');
|
|
51
|
-
|
|
52
|
-
module.exports = {
|
|
53
|
-
plugins: [new KupolaWebpackPlugin()]
|
|
54
|
-
};
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
**配置选项:**
|
|
58
|
-
|
|
59
|
-
| 选项 | 类型 | 默认值 | 说明 |
|
|
60
|
-
|------|------|--------|------|
|
|
61
|
-
| `autoCSS` | boolean | `true` | 自动注入 Kupola CSS |
|
|
62
|
-
| `themePreload` | boolean | `false` | 自动注入主题预加载脚本 |
|
|
63
|
-
| `cssPath` | string | `null` | 自定义 CSS 路径 |
|
|
64
|
-
|
|
65
|
-
### themePreload 配置说明
|
|
66
|
-
|
|
67
|
-
**默认值:`false`**(v1.9.13 变更)
|
|
68
|
-
|
|
69
|
-
`themePreload` 用于在 CSS 加载前设置主题属性,防止主题切换时的闪屏问题。请根据你的使用方式决定是否开启:
|
|
70
|
-
|
|
71
|
-
| 使用方式 | themePreload | 说明 |
|
|
72
|
-
|---------|-------------|------|
|
|
73
|
-
| **ESM + initTheme()** | `false`(默认) | JS 模块加载时自动初始化,无需预加载 |
|
|
74
|
-
| **UMD / 纯 CSS** | `true` | 需要在 CSS 加载前设置主题,防止闪屏 |
|
|
75
|
-
|
|
76
|
-
**开启示例:**
|
|
77
|
-
|
|
78
|
-
```js
|
|
79
|
-
// Vite
|
|
80
|
-
kupola({ themePreload: true })
|
|
8
|
+
# Kupola
|
|
81
9
|
|
|
82
|
-
|
|
83
|
-
new KupolaWebpackPlugin({ themePreload: true })
|
|
84
|
-
```
|
|
10
|
+
**A zero-framework-dependency declarative UI engine + component library for any server-rendered web application.**
|
|
85
11
|
|
|
86
12
|
---
|
|
87
13
|
|
|
88
|
-
##
|
|
14
|
+
## Features
|
|
89
15
|
|
|
90
|
-
-
|
|
91
|
-
-
|
|
16
|
+
- ⚛️ **Signal-based Reactivity**: Fine-grained tracking via `signal` / `computed` / `effect` with automatic batched updates
|
|
17
|
+
- 📝 **Template Literals**: `html` tagged template + `render` for instant DOM binding — no compilation step
|
|
18
|
+
- 🖥️ **SSR Ready**: `renderToString` + `hydrate` for pristine hydration with zero client-side flicker
|
|
19
|
+
- 🧩 **48+ Components, Tree-shakeable**: Modal, Table, Dropdown, Form… each component is independently bundled
|
|
20
|
+
- 🪶 **Ultra-lightweight**: Core engine < 5KB gzip, zero third-party dependencies
|
|
92
21
|
|
|
93
22
|
---
|
|
94
23
|
|
|
95
|
-
|
|
96
|
-
## 📦 Build Tool Plugins
|
|
97
|
-
|
|
98
|
-
### Vite Plugin
|
|
99
|
-
|
|
100
|
-
```js
|
|
101
|
-
// vite.config.js
|
|
102
|
-
import { kupola } from '@kupola/kupola/vite';
|
|
103
|
-
|
|
104
|
-
export default {
|
|
105
|
-
plugins: [kupola()]
|
|
106
|
-
};
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
**Options:**
|
|
110
|
-
|
|
111
|
-
| Option | Type | Default | Description |
|
|
112
|
-
|--------|------|--------|-------------|
|
|
113
|
-
| `autoCSS` | boolean | `true` | Auto inject Kupola CSS |
|
|
114
|
-
| `autoImport` | boolean | `true` | Auto import `useDeps`/`useQuery` |
|
|
115
|
-
| `devTools` | boolean | `true` | Enable dev tools in dev mode |
|
|
116
|
-
| `cssPath` | string | `null` | Custom CSS path |
|
|
117
|
-
| `themePreload` | boolean | `false` | Auto inject theme preload script |
|
|
118
|
-
|
|
119
|
-
### Webpack Plugin
|
|
120
|
-
|
|
121
|
-
```js
|
|
122
|
-
// webpack.config.js
|
|
123
|
-
const KupolaWebpackPlugin = require('@kupola/kupola/webpack');
|
|
24
|
+
## Quick Start
|
|
124
25
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
26
|
+
```html
|
|
27
|
+
<script src="https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola-core.umd.js"></script>
|
|
28
|
+
<script src="https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola-core-directives.umd.js"></script>
|
|
29
|
+
<div k-data="{ count: 0 }">
|
|
30
|
+
<button k-on:click="count++">Clicked {{ count }} times</button>
|
|
31
|
+
</div>
|
|
32
|
+
<script>
|
|
33
|
+
Kupola.walk(document.body);
|
|
34
|
+
</script>
|
|
128
35
|
```
|
|
129
36
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
| Option | Type | Default | Description |
|
|
133
|
-
|--------|------|--------|-------------|
|
|
134
|
-
| `autoCSS` | boolean | `true` | Auto inject Kupola CSS |
|
|
135
|
-
| `themePreload` | boolean | `false` | Auto inject theme preload script |
|
|
136
|
-
| `cssPath` | string | `null` | Custom CSS path |
|
|
37
|
+
Or use the programmatic API:
|
|
137
38
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
| **UMD / CSS-only** | `true` | Needs theme set before CSS loads to prevent flash |
|
|
148
|
-
|
|
149
|
-
**Example with themePreload enabled:**
|
|
150
|
-
|
|
151
|
-
```js
|
|
152
|
-
// Vite
|
|
153
|
-
kupola({ themePreload: true })
|
|
154
|
-
|
|
155
|
-
// Webpack
|
|
156
|
-
new KupolaWebpackPlugin({ themePreload: true })
|
|
39
|
+
```html
|
|
40
|
+
<div id="app"></div>
|
|
41
|
+
<script type="module">
|
|
42
|
+
import { signal, html, render } from 'https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola-core.esm.js';
|
|
43
|
+
|
|
44
|
+
const count = signal(0);
|
|
45
|
+
const view = () => html`<button @click=${() => count.value++}>Clicked ${count} times</button>`;
|
|
46
|
+
render(view(), document.getElementById('app'));
|
|
47
|
+
</script>
|
|
157
48
|
```
|
|
158
49
|
|
|
159
50
|
---
|
|
160
51
|
|
|
161
|
-
##
|
|
162
|
-
|
|
163
|
-
- **50+ UI Components** — Buttons, inputs, cards, modals, datepickers, timepickers, heatmap, virtual list, stat cards, and more
|
|
164
|
-
- **Declarative Data Dependencies** — `useDeps()` with auto-caching, retry, refresh, and transform
|
|
165
|
-
- **HTTP Client Plugin System** — Plug in Axios, @navios/http, or any HTTP client; interceptors preserved
|
|
166
|
-
- **Reactive Data Binding** — Two-way binding with `ref()` / `store()` (Proxy-based)
|
|
167
|
-
- **Dual Themes** — Dark-first design with light theme support
|
|
168
|
-
- **11 Brand Colors** — Switchable brand themes inspired by Chinese traditional colors
|
|
169
|
-
- **Responsive** — PC, Pad, and Phone
|
|
170
|
-
- **Accessible** — WCAG AA compliant
|
|
171
|
-
- **Form Validation** — Built-in validation with custom rules
|
|
172
|
-
- **Zero Dependencies** — Pure HTML/CSS/JavaScript, ~75 KB minified gzipped
|
|
173
|
-
- **Backend Agnostic** — Works with Flask, Django, FastAPI, Gin, Spring Boot, ASP.NET, Express, Rails, Actix-web, and any backend that outputs HTML
|
|
174
|
-
- **TypeScript Ready** — Full type definitions included
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## 🚀 Quick Start
|
|
179
|
-
|
|
180
|
-
### Scaffold (recommended)
|
|
181
|
-
|
|
182
|
-
Create a fully configured Kupola project in seconds:
|
|
52
|
+
## Installation
|
|
183
53
|
|
|
184
54
|
```bash
|
|
185
|
-
|
|
55
|
+
npm install @kupola/kupola # Full package
|
|
56
|
+
# Or core engine only
|
|
57
|
+
npm install @kupola/kupola/core # signal + template + render + SSR
|
|
186
58
|
```
|
|
187
59
|
|
|
188
|
-
Choose from **Static**, **Flask**, **FastAPI**, or **Gin** — with dark theme, brand colors, and example pages out of the box.
|
|
189
|
-
|
|
190
|
-
### npm
|
|
191
|
-
|
|
192
60
|
```bash
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
```html
|
|
197
|
-
<link rel="stylesheet" href="node_modules/@kupola/kupola/dist/css/kupola.css">
|
|
198
|
-
<script src="node_modules/@kupola/kupola/dist/kupola.esm.js" type="module"></script>
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### CDN
|
|
202
|
-
|
|
203
|
-
```html
|
|
204
|
-
<!-- ESM (modern browsers) -->
|
|
205
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/css/kupola.css">
|
|
206
|
-
<script src="https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola.esm.js" type="module"></script>
|
|
207
|
-
|
|
208
|
-
<!-- UMD (legacy) -->
|
|
209
|
-
<script src="https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola.umd.js"></script>
|
|
61
|
+
# CDN
|
|
62
|
+
https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola-core.esm.js
|
|
63
|
+
https://cdn.jsdelivr.net/npm/@kupola/kupola/dist/kupola-core.cjs.js
|
|
210
64
|
```
|
|
211
65
|
|
|
212
66
|
---
|
|
213
67
|
|
|
214
|
-
##
|
|
215
|
-
|
|
216
|
-
### Components (HTML-only, no JS needed)
|
|
217
|
-
|
|
218
|
-
```html
|
|
219
|
-
<button class="ds-btn ds-btn--brand">Primary</button>
|
|
220
|
-
<button class="ds-btn ds-btn--outline">Outline</button>
|
|
221
|
-
|
|
222
|
-
<div class="ds-card">
|
|
223
|
-
<div class="ds-card__header">
|
|
224
|
-
<h3 class="ds-card__title">Card Title</h3>
|
|
225
|
-
</div>
|
|
226
|
-
<div class="ds-card__body">Card content</div>
|
|
227
|
-
</div>
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
### Data Binding
|
|
231
|
-
|
|
232
|
-
```html
|
|
233
|
-
<input type="text" data-bind="user.name:value" placeholder="Name">
|
|
234
|
-
<span data-bind="user.name:text"></span>
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
```js
|
|
238
|
-
kupolaData.data.user = { name: 'John' };
|
|
239
|
-
kupolaData.data.user.name = 'Jane'; // Auto-updates all bound elements
|
|
240
|
-
```
|
|
68
|
+
## Import Components on Demand
|
|
241
69
|
|
|
242
|
-
|
|
70
|
+
Each component is independently bundled — import only what you need:
|
|
243
71
|
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
<span data-bind="item.name:text"></span>
|
|
248
|
-
</template>
|
|
249
|
-
</div>
|
|
250
|
-
```
|
|
72
|
+
```javascript
|
|
73
|
+
// Import Modal only
|
|
74
|
+
import { Modal } from '@kupola/kupola/components/modal';
|
|
251
75
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
useDeps({ users: { url: '/api/users', staleTime: 60000 } });
|
|
76
|
+
const modal = Modal({ title: 'Confirm', content: 'This action cannot be undone.' });
|
|
77
|
+
modal.open();
|
|
255
78
|
```
|
|
256
79
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
80
|
+
```javascript
|
|
81
|
+
// Import Table only
|
|
82
|
+
import { Table } from '@kupola/kupola/components/table';
|
|
83
|
+
|
|
84
|
+
const table = Table({
|
|
85
|
+
columns: [
|
|
86
|
+
{ key: 'name', label: 'Name', sortable: true },
|
|
87
|
+
{ key: 'age', label: 'Age', sortable: true },
|
|
88
|
+
],
|
|
89
|
+
data: [
|
|
90
|
+
{ name: 'Alice', age: 28 },
|
|
91
|
+
{ name: 'Bob', age: 34 },
|
|
92
|
+
],
|
|
93
|
+
pageSize: 10,
|
|
268
94
|
});
|
|
269
|
-
|
|
270
|
-
// All useDeps() requests now go through Axios
|
|
271
|
-
configureHttpClient(createAxiosAdapter(api));
|
|
95
|
+
document.body.appendChild(table.element);
|
|
272
96
|
```
|
|
273
97
|
|
|
274
|
-
### HTTP Client Plugin (@navios/http Example)
|
|
275
|
-
|
|
276
|
-
```js
|
|
277
|
-
import { configureHttpClient } from 'kupola';
|
|
278
|
-
import { createNaviosAdapter } from 'kupola/adapters/navios-http';
|
|
279
|
-
import { create } from '@navios/http';
|
|
280
|
-
|
|
281
|
-
const client = create({ baseURL: '/api' });
|
|
282
|
-
client.interceptors.request.use(config => {
|
|
283
|
-
config.headers['Authorization'] = `Bearer ${getToken()}`;
|
|
284
|
-
return config;
|
|
285
|
-
});
|
|
286
|
-
|
|
287
|
-
configureHttpClient(createNaviosAdapter(client));
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
---
|
|
291
|
-
|
|
292
|
-
## 📖 Documentation
|
|
293
|
-
|
|
294
|
-
- [Usage Guide](docs/usage-guide.md) — Getting started and API reference
|
|
295
|
-
- [Integration Guide](INTEGRATION.md) — Framework integration examples
|
|
296
|
-
- [Kupola vs Vue/React](docs/kupola-vs-vue-react.md) — Architecture comparison
|
|
297
|
-
- [Contributing](CONTRIBUTING.md) — How to contribute
|
|
298
|
-
|
|
299
|
-
---
|
|
300
|
-
|
|
301
|
-
## 🛠️ Development
|
|
302
|
-
|
|
303
|
-
```bash
|
|
304
|
-
npm install # Install dependencies
|
|
305
|
-
npm run dev # Dev server (Vite, hot reload)
|
|
306
|
-
npm run build # Production build
|
|
307
|
-
npm run lint # Lint code
|
|
308
|
-
npm run test # Run tests
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
---
|
|
312
|
-
|
|
313
|
-
## 🌐 Browser Support
|
|
314
|
-
|
|
315
|
-
Chrome, Firefox, Safari, Edge (latest)
|
|
316
|
-
|
|
317
98
|
---
|
|
318
99
|
|
|
319
|
-
|
|
320
|
-
## ✨ 核心特性
|
|
321
|
-
|
|
322
|
-
- **50+ UI 组件** — 按钮、输入框、卡片、模态框、日期选择器、时间选择器、热力图、虚拟列表、统计卡片等
|
|
323
|
-
- **声明式数据依赖** — `useDeps()` 自动缓存、重试、刷新、数据转换
|
|
324
|
-
- **HTTP 客户端插件** — 无缝集成 Axios、@navios/http 或任意 HTTP 客户端,保留拦截器
|
|
325
|
-
- **响应式数据绑定** — 基于 Proxy 的双向绑定,`ref()` / `store()`
|
|
326
|
-
- **双主题** — 暗色优先设计,支持亮色主题切换
|
|
327
|
-
- **11 种品牌色** — 灵感源自中国传统色的可切换品牌主题
|
|
328
|
-
- **响应式** — 适配 PC、平板、手机
|
|
329
|
-
- **无障碍** — 符合 WCAG AA 标准
|
|
330
|
-
- **表单验证** — 内置验证系统,支持自定义规则
|
|
331
|
-
- **零依赖** — 纯 HTML/CSS/JavaScript,minified gzip 约 75 KB
|
|
332
|
-
- **后端无关** — 支持 Flask、Django、FastAPI、Gin、Spring Boot、ASP.NET、Express、Rails、Actix-web 等任何输出 HTML 的后端
|
|
333
|
-
- **TypeScript 支持** — 完整类型定义
|
|
100
|
+
## Core Engine API
|
|
334
101
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
## 🚀 快速开始
|
|
338
|
-
|
|
339
|
-
### 脚手架(推荐)
|
|
340
|
-
|
|
341
|
-
一行命令创建配置好的 Kupola 项目:
|
|
342
|
-
|
|
343
|
-
```bash
|
|
344
|
-
npx @kupola/create-kupola
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
支持 **Static**、**Flask**、**FastAPI**、**Gin** 四种后端模板,自带暗色主题、品牌色和示例页面。
|
|
348
|
-
|
|
349
|
-
### npm 安装
|
|
102
|
+
```javascript
|
|
103
|
+
import { signal, computed, effect, batch, html, render } from '@kupola/kupola';
|
|
350
104
|
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
```
|
|
105
|
+
// Signal — reactive state
|
|
106
|
+
const count = signal(0);
|
|
354
107
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
<script src="node_modules/@kupola/kupola/dist/kupola.esm.js" type="module"></script>
|
|
358
|
-
```
|
|
108
|
+
// Computed — derived value (auto-tracks dependencies)
|
|
109
|
+
const doubled = computed(() => count.value * 2);
|
|
359
110
|
|
|
360
|
-
|
|
111
|
+
// Effect — side effect (auto re-runs)
|
|
112
|
+
effect(() => console.log(`count = ${count.value}, doubled = ${doubled.value}`));
|
|
361
113
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
114
|
+
// Batch — merge multiple updates into one flush
|
|
115
|
+
batch(() => {
|
|
116
|
+
count.value++;
|
|
117
|
+
count.value++;
|
|
118
|
+
});
|
|
366
119
|
|
|
367
|
-
|
|
368
|
-
|
|
120
|
+
// Template + Render — declarative DOM
|
|
121
|
+
const view = () => html`
|
|
122
|
+
<div class="counter">
|
|
123
|
+
<p>Count: ${count}</p>
|
|
124
|
+
<button @click=${() => count.value++}>+1</button>
|
|
125
|
+
</div>
|
|
126
|
+
`;
|
|
127
|
+
render(view(), document.getElementById('app'));
|
|
369
128
|
```
|
|
370
129
|
|
|
371
130
|
---
|
|
372
131
|
|
|
373
|
-
##
|
|
132
|
+
## Directive System (Declarative HTML)
|
|
374
133
|
|
|
375
|
-
|
|
134
|
+
Add interactivity directly in HTML — no build tools required:
|
|
376
135
|
|
|
377
136
|
```html
|
|
378
|
-
<
|
|
379
|
-
<
|
|
380
|
-
|
|
381
|
-
<
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
137
|
+
<div k-data="{ name: '', items: [], show: true }">
|
|
138
|
+
<input k-model="name" placeholder="Enter search term">
|
|
139
|
+
<p k-show="name">Hello, {{ name }}!</p>
|
|
140
|
+
<ul>
|
|
141
|
+
<li k-for="item in items" k-text="item"></li>
|
|
142
|
+
</ul>
|
|
143
|
+
<button k-on:click="show = !show" k-bind:disabled="!name">
|
|
144
|
+
<span k-show="show">Hide</span>
|
|
145
|
+
<span k-show="!show">Show</span>
|
|
146
|
+
</button>
|
|
386
147
|
</div>
|
|
148
|
+
<script>
|
|
149
|
+
import { walk } from '@kupola/kupola/directives';
|
|
150
|
+
walk(document.body);
|
|
151
|
+
</script>
|
|
387
152
|
```
|
|
388
153
|
|
|
389
|
-
|
|
154
|
+
**Directives Overview**:
|
|
390
155
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
156
|
+
| Directive | Shorthand | Purpose |
|
|
157
|
+
|-----------|-----------|---------|
|
|
158
|
+
| `k-data` | — | Create a reactive scope |
|
|
159
|
+
| `k-show` | — | Conditional display (`display: none`) |
|
|
160
|
+
| `k-text` | — | Reactive textContent |
|
|
161
|
+
| `k-html` | — | Reactive innerHTML |
|
|
162
|
+
| `k-bind` | `:` | Dynamic attribute binding |
|
|
163
|
+
| `k-on` | `@` | Event listener |
|
|
164
|
+
| `k-model` | — | Two-way input binding |
|
|
165
|
+
| `k-for` | — | List rendering |
|
|
395
166
|
|
|
396
|
-
|
|
397
|
-
kupolaData.data.user = { name: '张三' };
|
|
398
|
-
kupolaData.data.user.name = '李四'; // 所有绑定元素自动更新
|
|
399
|
-
```
|
|
167
|
+
---
|
|
400
168
|
|
|
401
|
-
|
|
169
|
+
## SSR (Server-Side Rendering)
|
|
402
170
|
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
<span data-bind="item.name:text"></span>
|
|
407
|
-
</template>
|
|
408
|
-
</div>
|
|
409
|
-
```
|
|
171
|
+
```javascript
|
|
172
|
+
import { signal, html } from '@kupola/kupola';
|
|
173
|
+
import { renderToString } from '@kupola/kupola/server';
|
|
410
174
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
175
|
+
const title = signal('Hello Server');
|
|
176
|
+
const serverHtml = renderToString(html`<h1>${title}</h1>`);
|
|
177
|
+
// => '<h1>Hello Server<!----></h1>'
|
|
178
|
+
res.send(`<!DOCTYPE html><html><body>${serverHtml}</body></html>`);
|
|
414
179
|
```
|
|
415
180
|
|
|
416
|
-
|
|
181
|
+
Client-side hydration:
|
|
417
182
|
|
|
418
|
-
```
|
|
419
|
-
import {
|
|
420
|
-
import {
|
|
421
|
-
import axios from 'axios';
|
|
422
|
-
|
|
423
|
-
const api = axios.create({ baseURL: '/api' });
|
|
424
|
-
api.interceptors.request.use(config => {
|
|
425
|
-
config.headers.Authorization = `Bearer ${getToken()}`;
|
|
426
|
-
return config;
|
|
427
|
-
});
|
|
183
|
+
```javascript
|
|
184
|
+
import { signal, html } from '@kupola/kupola';
|
|
185
|
+
import { hydrate } from '@kupola/kupola/server';
|
|
428
186
|
|
|
429
|
-
|
|
430
|
-
|
|
187
|
+
const title = signal('Hello Server');
|
|
188
|
+
hydrate(html`<h1>${title}</h1>`, document.body);
|
|
189
|
+
// DOM is not rebuilt — only reactive bindings are attached
|
|
431
190
|
```
|
|
432
191
|
|
|
433
192
|
---
|
|
434
193
|
|
|
435
|
-
##
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
194
|
+
## Components
|
|
195
|
+
|
|
196
|
+
<details>
|
|
197
|
+
<summary><strong>Overlay & Navigation</strong> (6)</summary>
|
|
198
|
+
|
|
199
|
+
| Component | Import Path | Description |
|
|
200
|
+
|-----------|-------------|-------------|
|
|
201
|
+
| Modal | `@kupola/kupola/components/modal` | Modal dialog |
|
|
202
|
+
| Dropdown | `@kupola/kupola/components/dropdown` | Dropdown menu |
|
|
203
|
+
| Drawer | `@kupola/kupola/components/drawer` | Side drawer |
|
|
204
|
+
| Tabs | `@kupola/kupola/components/tabs` | Tab panel |
|
|
205
|
+
| Tooltip | `@kupola/kupola/components/tooltip` | Text tooltip |
|
|
206
|
+
| Menu | `@kupola/kupola/components/menu` | Navigation menu |
|
|
207
|
+
|
|
208
|
+
</details>
|
|
209
|
+
|
|
210
|
+
<details>
|
|
211
|
+
<summary><strong>Form</strong> (11)</summary>
|
|
212
|
+
|
|
213
|
+
| Component | Import Path | Description |
|
|
214
|
+
|-----------|-------------|-------------|
|
|
215
|
+
| Input | `@kupola/kupola/components/input` | Text input |
|
|
216
|
+
| Select | `@kupola/kupola/components/select` | Dropdown select |
|
|
217
|
+
| Checkbox | `@kupola/kupola/components/checkbox` | Checkbox |
|
|
218
|
+
| Radio | `@kupola/kupola/components/radio` | Radio button |
|
|
219
|
+
| Switch | `@kupola/kupola/components/switch` | Toggle switch |
|
|
220
|
+
| Slider | `@kupola/kupola/components/slider` | Range slider |
|
|
221
|
+
| NumberInput | `@kupola/kupola/components/numberinput` | Number input |
|
|
222
|
+
| Textarea | `@kupola/kupola/components/textarea` | Multi-line text |
|
|
223
|
+
| Datepicker | `@kupola/kupola/components/datepicker` | Date picker |
|
|
224
|
+
| Timepicker | `@kupola/kupola/components/timepicker` | Time picker |
|
|
225
|
+
| Form | `@kupola/kupola/components/form` | Form container + validation |
|
|
226
|
+
|
|
227
|
+
</details>
|
|
228
|
+
|
|
229
|
+
<details>
|
|
230
|
+
<summary><strong>Feedback</strong> (6)</summary>
|
|
231
|
+
|
|
232
|
+
| Component | Import Path | Description |
|
|
233
|
+
|-----------|-------------|-------------|
|
|
234
|
+
| Dialog | `@kupola/kupola/components/dialog` | Native confirm dialog |
|
|
235
|
+
| Notification | `@kupola/kupola/components/notification` | Notification toast |
|
|
236
|
+
| Message | `@kupola/kupola/components/message` | Lightweight global message |
|
|
237
|
+
| Alert | `@kupola/kupola/components/alert` | Alert banner |
|
|
238
|
+
| Spin | `@kupola/kupola/components/spin` | Loading spinner |
|
|
239
|
+
| Progress | `@kupola/kupola/components/progress` | Progress bar |
|
|
240
|
+
|
|
241
|
+
</details>
|
|
242
|
+
|
|
243
|
+
<details>
|
|
244
|
+
<summary><strong>Data Display</strong> (9)</summary>
|
|
245
|
+
|
|
246
|
+
| Component | Import Path | Description |
|
|
247
|
+
|-----------|-------------|-------------|
|
|
248
|
+
| Table | `@kupola/kupola/components/table` | Data table (sort/filter/paginate/select/edit) |
|
|
249
|
+
| Tree | `@kupola/kupola/components/tree` | Tree view |
|
|
250
|
+
| Calendar | `@kupola/kupola/components/calendar` | Calendar |
|
|
251
|
+
| Carousel | `@kupola/kupola/components/carousel` | Carousel / slider |
|
|
252
|
+
| Timeline | `@kupola/kupola/components/timeline` | Timeline |
|
|
253
|
+
| Collapse | `@kupola/kupola/components/collapse` | Collapse panel |
|
|
254
|
+
| Tag | `@kupola/kupola/components/tag` | Tag |
|
|
255
|
+
| Badge | `@kupola/kupola/components/badge` | Badge |
|
|
256
|
+
| Statcard | `@kupola/kupola/components/statcard` | Stat card |
|
|
257
|
+
|
|
258
|
+
</details>
|
|
259
|
+
|
|
260
|
+
<details>
|
|
261
|
+
<summary><strong>Interactive & Utility</strong> (16)</summary>
|
|
262
|
+
|
|
263
|
+
| Component | Import Path | Description |
|
|
264
|
+
|-----------|-------------|-------------|
|
|
265
|
+
| Pagination | `@kupola/kupola/components/pagination` | Pagination |
|
|
266
|
+
| Breadcrumb | `@kupola/kupola/components/breadcrumb` | Breadcrumb |
|
|
267
|
+
| FileUpload | `@kupola/kupola/components/fileupload` | File upload |
|
|
268
|
+
| DynamicTags | `@kupola/kupola/components/dynamictags` | Dynamic tags |
|
|
269
|
+
| ImagePreview | `@kupola/kupola/components/imagepreview` | Image preview |
|
|
270
|
+
| ColorPicker | `@kupola/kupola/components/colorpicker` | Color picker |
|
|
271
|
+
| VirtualList | `@kupola/kupola/components/virtuallist` | Virtual list |
|
|
272
|
+
| Heatmap | `@kupola/kupola/components/heatmap` | Heatmap |
|
|
273
|
+
| Countdown | `@kupola/kupola/components/countdown` | Countdown timer |
|
|
274
|
+
| Icons | `@kupola/kupola/components/icons` | SVG icon set |
|
|
275
|
+
| Validation | `@kupola/kupola/components/validation` | Validation engine |
|
|
276
|
+
| Avatar | `@kupola/kupola/components/avatar` | Avatar |
|
|
277
|
+
| Divider | `@kupola/kupola/components/divider` | Divider |
|
|
278
|
+
| Skeleton | `@kupola/kupola/components/skeleton` | Skeleton screen |
|
|
279
|
+
| Empty | `@kupola/kupola/components/empty` | Empty state |
|
|
280
|
+
| Kbd | `@kupola/kupola/components/kbd` | Keyboard key |
|
|
281
|
+
|
|
282
|
+
</details>
|
|
441
283
|
|
|
442
284
|
---
|
|
443
285
|
|
|
444
|
-
##
|
|
286
|
+
## TypeScript
|
|
445
287
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
288
|
+
Full type definitions included out of the box:
|
|
289
|
+
|
|
290
|
+
```typescript
|
|
291
|
+
import type { Modal, ModalOptions } from '@kupola/kupola/components/modal';
|
|
292
|
+
import type { Table, TableOptions, TableColumn } from '@kupola/kupola/components/table';
|
|
293
|
+
|
|
294
|
+
const options: ModalOptions = {
|
|
295
|
+
title: 'Confirm',
|
|
296
|
+
content: 'Are you sure you want to delete?',
|
|
297
|
+
onConfirm: () => console.log('confirmed'),
|
|
298
|
+
};
|
|
452
299
|
```
|
|
453
300
|
|
|
454
301
|
---
|
|
455
302
|
|
|
456
|
-
##
|
|
303
|
+
## Browser Support
|
|
457
304
|
|
|
458
|
-
Chrome
|
|
305
|
+
- Chrome / Edge >= 88
|
|
306
|
+
- Firefox >= 78
|
|
307
|
+
- Safari >= 14
|
|
308
|
+
- IE is not supported
|
|
459
309
|
|
|
460
310
|
---
|
|
461
311
|
|
|
462
|
-
##
|
|
312
|
+
## Documentation
|
|
463
313
|
|
|
464
|
-
|
|
314
|
+
- 📖 [Integration Guide](./INTEGRATION.md) — CDN / SSR / Vite / Webpack / React / Vue
|
|
315
|
+
- 🤝 [Contributing Guide](./CONTRIBUTING.md) — Dev setup & code standards
|
|
316
|
+
- 📋 [Changelog](./CHANGELOG.md)
|
|
317
|
+
- 📄 [MIT License](./LICENSE)
|
|
465
318
|
|
|
466
319
|
---
|
|
467
320
|
|
|
468
|
-
##
|
|
469
|
-
|
|
470
|
-
Kupola is built with the help of these excellent open-source tools:
|
|
321
|
+
## Ecosystem
|
|
471
322
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
-
|
|
476
|
-
-
|
|
477
|
-
- [Jest](https://jestjs.io/) — JavaScript testing framework
|
|
478
|
-
|
|
479
|
-
**HTTP Client Adapters (optional, user-installed):**
|
|
480
|
-
- [Axios](https://axios-http.com/) — Promise based HTTP client
|
|
481
|
-
- [@navios/http](https://www.npmjs.com/package/@navios/http) — Lightweight fetch-based Axios replacement
|
|
323
|
+
| Project | Description |
|
|
324
|
+
|---------|-------------|
|
|
325
|
+
| `@kupola/kupola` | Core engine + 48 UI components |
|
|
326
|
+
| `create-kupola` | Project scaffolding CLI |
|
|
327
|
+
| `his-sys` | HIS medical system built on Kupola |
|
|
482
328
|
|
|
483
329
|
---
|
|
484
330
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
331
|
+
<p align="center">
|
|
332
|
+
<strong>Kupola</strong> — Zero framework dependencies. Declarative UI. Import only what you need.
|
|
333
|
+
</p>
|