cornet-ui 0.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +95 -0
- package/components/Actions/du-button/du-button.types.ts +14 -0
- package/components/Actions/du-button/du-button.vue +149 -0
- package/components/Actions/du-dropdown/du-dropdown.types.ts +15 -0
- package/components/Actions/du-dropdown/du-dropdown.vue +75 -0
- package/components/Actions/du-fab/du-fab.types.ts +28 -0
- package/components/Actions/du-fab/du-fab.vue +270 -0
- package/components/Actions/du-modal/du-modal.types.ts +10 -0
- package/components/Actions/du-modal/du-modal.vue +123 -0
- package/components/Actions/du-swap/du-swap.types.ts +3 -0
- package/components/Actions/du-swap/du-swap.vue +68 -0
- package/components/DataDisplay/du-accordion/du-accordion-item.vue +37 -0
- package/components/DataDisplay/du-accordion/du-accordion.types.ts +15 -0
- package/components/DataDisplay/du-accordion/du-accordion.vue +73 -0
- package/components/DataDisplay/du-avatar/du-avatar.types.ts +59 -0
- package/components/DataDisplay/du-avatar/du-avatar.vue +139 -0
- package/components/DataDisplay/du-badge/du-badge.types.ts +21 -0
- package/components/DataDisplay/du-badge/du-badge.vue +81 -0
- package/components/DataDisplay/du-card/du-card.types.ts +18 -0
- package/components/DataDisplay/du-card/du-card.vue +86 -0
- package/components/DataDisplay/du-carousel/du-carousel-item.vue +11 -0
- package/components/DataDisplay/du-carousel/du-carousel.types.ts +15 -0
- package/components/DataDisplay/du-carousel/du-carousel.vue +46 -0
- package/components/DataDisplay/du-chat/du-chat-item.vue +56 -0
- package/components/DataDisplay/du-chat/du-chat.types.ts +31 -0
- package/components/DataDisplay/du-chat/du-chat.vue +71 -0
- package/components/DataDisplay/du-collapse/du-collapse.types.ts +15 -0
- package/components/DataDisplay/du-collapse/du-collapse.vue +59 -0
- package/components/DataDisplay/du-countdown/du-countdown-group.vue +88 -0
- package/components/DataDisplay/du-countdown/du-countdown.types.ts +15 -0
- package/components/DataDisplay/du-countdown/du-countdown.vue +180 -0
- package/components/DataDisplay/du-diff/du-diff.types.ts +9 -0
- package/components/DataDisplay/du-diff/du-diff.vue +44 -0
- package/components/DataDisplay/du-kbd/du-kbd.types.ts +9 -0
- package/components/DataDisplay/du-kbd/du-kbd.vue +21 -0
- package/components/DataDisplay/du-list/du-list-row.vue +12 -0
- package/components/DataDisplay/du-list/du-list.types.ts +3 -0
- package/components/DataDisplay/du-list/du-list.vue +11 -0
- package/components/DataDisplay/du-stat/du-stat.types.ts +12 -0
- package/components/DataDisplay/du-stat/du-stat.vue +28 -0
- package/components/DataDisplay/du-stats/du-stats.types.ts +3 -0
- package/components/DataDisplay/du-stats/du-stats.vue +91 -0
- package/components/DataDisplay/du-status/du-status.types.ts +21 -0
- package/components/DataDisplay/du-status/du-status.vue +51 -0
- package/components/DataDisplay/du-table/du-table-item.types.ts +6 -0
- package/components/DataDisplay/du-table/du-table-item.vue +24 -0
- package/components/DataDisplay/du-table/du-table.types.ts +26 -0
- package/components/DataDisplay/du-table/du-table.vue +125 -0
- package/components/DataDisplay/du-timeline/du-timeline-item.vue +85 -0
- package/components/DataDisplay/du-timeline/du-timeline.types.ts +22 -0
- package/components/DataDisplay/du-timeline/du-timeline.vue +138 -0
- package/components/DataInput/du-checkbox/du-checkbox.types.ts +17 -0
- package/components/DataInput/du-checkbox/du-checkbox.vue +40 -0
- package/components/DataInput/du-fieldset/du-fieldset.types.ts +4 -0
- package/components/DataInput/du-fieldset/du-fieldset.vue +16 -0
- package/components/DataInput/du-file-input/du-file-input.types.ts +29 -0
- package/components/DataInput/du-file-input/du-file-input.vue +31 -0
- package/components/DataInput/du-filter/du-filter.types.ts +30 -0
- package/components/DataInput/du-filter/du-filter.vue +47 -0
- package/components/DataInput/du-input-field/du-input-field.types.ts +43 -0
- package/components/DataInput/du-input-field/du-input-field.vue +47 -0
- package/components/DataInput/du-label/du-label.types.ts +3 -0
- package/components/DataInput/du-label/du-label.vue +28 -0
- package/components/DataInput/du-label-input-validator/du-label-input-validator.types.ts +7 -0
- package/components/DataInput/du-label-input-validator/du-label-input-validator.vue +51 -0
- package/components/DataInput/du-radio/du-radio.types.ts +15 -0
- package/components/DataInput/du-radio/du-radio.vue +27 -0
- package/components/DataInput/du-range/du-range.types.ts +18 -0
- package/components/DataInput/du-range/du-range.vue +60 -0
- package/components/DataInput/du-rating/du-rating-item.vue +65 -0
- package/components/DataInput/du-rating/du-rating.types.ts +46 -0
- package/components/DataInput/du-rating/du-rating.vue +127 -0
- package/components/DataInput/du-search/du-search.types.ts +44 -0
- package/components/DataInput/du-search/du-search.vue +425 -0
- package/components/DataInput/du-select/du-select.types.ts +31 -0
- package/components/DataInput/du-select/du-select.vue +384 -0
- package/components/DataInput/du-text-area/du-text-area.types.ts +11 -0
- package/components/DataInput/du-text-area/du-text-area.vue +41 -0
- package/components/Feedback/du-alert/du-alert.types.ts +16 -0
- package/components/Feedback/du-alert/du-alert.vue +113 -0
- package/components/Feedback/du-loading/du-loading.types.ts +11 -0
- package/components/Feedback/du-loading/du-loading.vue +33 -0
- package/components/Feedback/du-progress/du-progress.types.ts +8 -0
- package/components/Feedback/du-progress/du-progress.vue +23 -0
- package/components/Feedback/du-radial-progress/du-radial-progress.types.ts +9 -0
- package/components/Feedback/du-radial-progress/du-radial-progress.vue +64 -0
- package/components/Feedback/du-skeleton/du-skeleton.types.ts +3 -0
- package/components/Feedback/du-skeleton/du-skeleton.vue +11 -0
- package/components/Feedback/du-toast/du-toast.types.ts +11 -0
- package/components/Feedback/du-toast/du-toast.vue +54 -0
- package/components/Feedback/du-tooltip/du-tooltip.types.ts +12 -0
- package/components/Feedback/du-tooltip/du-tooltip.vue +55 -0
- package/components/Layout/du-drawer/du-drawer.types.ts +27 -0
- package/components/Layout/du-drawer/du-drawer.vue +224 -0
- package/components/Layout/du-join/du-join.types.ts +7 -0
- package/components/Layout/du-join/du-join.vue +31 -0
- package/components/Navigation/du-breadcrumbs/du-breadcrumbs.types.ts +13 -0
- package/components/Navigation/du-breadcrumbs/du-breadcrumbs.vue +79 -0
- package/components/Navigation/du-button-link/du-button-link.types.ts +17 -0
- package/components/Navigation/du-button-link/du-button-link.vue +77 -0
- package/components/Navigation/du-dock/du-dock.types.ts +19 -0
- package/components/Navigation/du-dock/du-dock.vue +73 -0
- package/components/Navigation/du-link/du-link.types.ts +7 -0
- package/components/Navigation/du-link/du-link.vue +25 -0
- package/components/Navigation/du-menu/du-menu-item.vue +160 -0
- package/components/Navigation/du-menu/du-menu.types.ts +33 -0
- package/components/Navigation/du-menu/du-menu.vue +87 -0
- package/components/Navigation/du-navbar/du-navbar.types.ts +3 -0
- package/components/Navigation/du-navbar/du-navbar.vue +21 -0
- package/components/Navigation/du-pagination/du-pagination.types.ts +30 -0
- package/components/Navigation/du-pagination/du-pagination.vue +186 -0
- package/components/Navigation/du-step-item/du-step-item.types.ts +9 -0
- package/components/Navigation/du-step-item/du-step-item.vue +46 -0
- package/components/Navigation/du-steps/du-steps.types.ts +20 -0
- package/components/Navigation/du-steps/du-steps.vue +85 -0
- package/components/Navigation/du-tabs/du-tabs.types.ts +25 -0
- package/components/Navigation/du-tabs/du-tabs.vue +96 -0
- package/composables/useSizeProps.ts +26 -0
- package/composables/useVariantProps.ts +18 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
- package/dist/components/Actions/du-button/du-button.js +5 -0
- package/dist/components/Actions/du-button/du-button.types.d.ts +4 -0
- package/dist/components/Actions/du-button/du-button.vue.d.ts +58 -0
- package/dist/components/Actions/du-button/du-button.vue_vue_type_script_setup_true_lang.js +98 -0
- package/dist/components/Actions/du-dropdown/du-dropdown.js +5 -0
- package/dist/components/Actions/du-dropdown/du-dropdown.types.d.ts +4 -0
- package/dist/components/Actions/du-dropdown/du-dropdown.vue.d.ts +33 -0
- package/dist/components/Actions/du-dropdown/du-dropdown.vue_vue_type_script_setup_true_lang.js +53 -0
- package/dist/components/Actions/du-fab/du-fab.js +5 -0
- package/dist/components/Actions/du-fab/du-fab.types.d.ts +24 -0
- package/dist/components/Actions/du-fab/du-fab.vue.d.ts +87 -0
- package/dist/components/Actions/du-fab/du-fab.vue_vue_type_script_setup_true_lang.js +204 -0
- package/dist/components/Actions/du-modal/du-modal.js +5 -0
- package/dist/components/Actions/du-modal/du-modal.types.d.ts +2 -0
- package/dist/components/Actions/du-modal/du-modal.vue.d.ts +48 -0
- package/dist/components/Actions/du-modal/du-modal.vue_vue_type_script_setup_true_lang.js +92 -0
- package/dist/components/Actions/du-swap/du-swap.js +5 -0
- package/dist/components/Actions/du-swap/du-swap.types.d.ts +2 -0
- package/dist/components/Actions/du-swap/du-swap.vue.d.ts +36 -0
- package/dist/components/Actions/du-swap/du-swap.vue_vue_type_script_setup_true_lang.js +61 -0
- package/dist/components/DataDisplay/du-accordion/du-accordion-item.js +5 -0
- package/dist/components/DataDisplay/du-accordion/du-accordion-item.vue.d.ts +24 -0
- package/dist/components/DataDisplay/du-accordion/du-accordion-item.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/components/DataDisplay/du-accordion/du-accordion.js +5 -0
- package/dist/components/DataDisplay/du-accordion/du-accordion.types.d.ts +8 -0
- package/dist/components/DataDisplay/du-accordion/du-accordion.vue.d.ts +45 -0
- package/dist/components/DataDisplay/du-accordion/du-accordion.vue_vue_type_script_setup_true_lang.js +45 -0
- package/dist/components/DataDisplay/du-avatar/du-avatar.js +7 -0
- package/dist/components/DataDisplay/du-avatar/du-avatar.types.d.ts +12 -0
- package/dist/components/DataDisplay/du-avatar/du-avatar.vue.d.ts +38 -0
- package/dist/components/DataDisplay/du-avatar/du-avatar.vue_vue_type_script_setup_true_lang.js +57 -0
- package/dist/components/DataDisplay/du-avatar/du-avatar.vue_vue_type_style_index_0_scoped_fdc61ebe_lang.css +1 -0
- package/dist/components/DataDisplay/du-badge/du-badge.js +5 -0
- package/dist/components/DataDisplay/du-badge/du-badge.types.d.ts +4 -0
- package/dist/components/DataDisplay/du-badge/du-badge.vue.d.ts +32 -0
- package/dist/components/DataDisplay/du-badge/du-badge.vue_vue_type_script_setup_true_lang.js +54 -0
- package/dist/components/DataDisplay/du-card/du-card.js +5 -0
- package/dist/components/DataDisplay/du-card/du-card.types.d.ts +4 -0
- package/dist/components/DataDisplay/du-card/du-card.vue.d.ts +43 -0
- package/dist/components/DataDisplay/du-card/du-card.vue_vue_type_script_setup_true_lang.js +61 -0
- package/dist/components/DataDisplay/du-carousel/du-carousel-item.js +5 -0
- package/dist/components/DataDisplay/du-carousel/du-carousel-item.vue.d.ts +16 -0
- package/dist/components/DataDisplay/du-carousel/du-carousel-item.vue_vue_type_script_setup_true_lang.js +14 -0
- package/dist/components/DataDisplay/du-carousel/du-carousel.js +5 -0
- package/dist/components/DataDisplay/du-carousel/du-carousel.types.d.ts +9 -0
- package/dist/components/DataDisplay/du-carousel/du-carousel.vue.d.ts +27 -0
- package/dist/components/DataDisplay/du-carousel/du-carousel.vue_vue_type_script_setup_true_lang.js +46 -0
- package/dist/components/DataDisplay/du-chat/du-chat-item.js +5 -0
- package/dist/components/DataDisplay/du-chat/du-chat-item.vue.d.ts +32 -0
- package/dist/components/DataDisplay/du-chat/du-chat-item.vue_vue_type_script_setup_true_lang.js +36 -0
- package/dist/components/DataDisplay/du-chat/du-chat.js +5 -0
- package/dist/components/DataDisplay/du-chat/du-chat.types.d.ts +18 -0
- package/dist/components/DataDisplay/du-chat/du-chat.vue.d.ts +38 -0
- package/dist/components/DataDisplay/du-chat/du-chat.vue_vue_type_script_setup_true_lang.js +55 -0
- package/dist/components/DataDisplay/du-collapse/du-collapse.js +5 -0
- package/dist/components/DataDisplay/du-collapse/du-collapse.types.d.ts +8 -0
- package/dist/components/DataDisplay/du-collapse/du-collapse.vue.d.ts +33 -0
- package/dist/components/DataDisplay/du-collapse/du-collapse.vue_vue_type_script_setup_true_lang.js +36 -0
- package/dist/components/DataDisplay/du-countdown/du-countdown-group.js +5 -0
- package/dist/components/DataDisplay/du-countdown/du-countdown-group.vue.d.ts +23 -0
- package/dist/components/DataDisplay/du-countdown/du-countdown-group.vue_vue_type_script_setup_true_lang.js +83 -0
- package/dist/components/DataDisplay/du-countdown/du-countdown.js +5 -0
- package/dist/components/DataDisplay/du-countdown/du-countdown.types.d.ts +8 -0
- package/dist/components/DataDisplay/du-countdown/du-countdown.vue.d.ts +27 -0
- package/dist/components/DataDisplay/du-countdown/du-countdown.vue_vue_type_script_setup_true_lang.js +67 -0
- package/dist/components/DataDisplay/du-diff/du-diff.js +5 -0
- package/dist/components/DataDisplay/du-diff/du-diff.types.d.ts +2 -0
- package/dist/components/DataDisplay/du-diff/du-diff.vue.d.ts +25 -0
- package/dist/components/DataDisplay/du-diff/du-diff.vue_vue_type_script_setup_true_lang.js +33 -0
- package/dist/components/DataDisplay/du-kbd/du-kbd.js +5 -0
- package/dist/components/DataDisplay/du-kbd/du-kbd.types.d.ts +2 -0
- package/dist/components/DataDisplay/du-kbd/du-kbd.vue.d.ts +19 -0
- package/dist/components/DataDisplay/du-kbd/du-kbd.vue_vue_type_script_setup_true_lang.js +13 -0
- package/dist/components/DataDisplay/du-list/du-list-row.js +5 -0
- package/dist/components/DataDisplay/du-list/du-list-row.vue.d.ts +17 -0
- package/dist/components/DataDisplay/du-list/du-list-row.vue_vue_type_script_setup_true_lang.js +22 -0
- package/dist/components/DataDisplay/du-list/du-list.js +5 -0
- package/dist/components/DataDisplay/du-list/du-list.types.d.ts +3 -0
- package/dist/components/DataDisplay/du-list/du-list.vue.d.ts +14 -0
- package/dist/components/DataDisplay/du-list/du-list.vue_vue_type_script_setup_true_lang.js +12 -0
- package/dist/components/DataDisplay/du-stat/du-stat.js +5 -0
- package/dist/components/DataDisplay/du-stat/du-stat.types.d.ts +12 -0
- package/dist/components/DataDisplay/du-stat/du-stat.vue.d.ts +27 -0
- package/dist/components/DataDisplay/du-stat/du-stat.vue_vue_type_script_setup_true_lang.js +37 -0
- package/dist/components/DataDisplay/du-stats/du-stats.js +7 -0
- package/dist/components/DataDisplay/du-stats/du-stats.types.d.ts +2 -0
- package/dist/components/DataDisplay/du-stats/du-stats.vue.d.ts +40 -0
- package/dist/components/DataDisplay/du-stats/du-stats.vue_vue_type_script_setup_true_lang.js +67 -0
- package/dist/components/DataDisplay/du-stats/du-stats.vue_vue_type_style_index_0_scoped_db955aa9_lang.css +1 -0
- package/dist/components/DataDisplay/du-status/du-status.js +5 -0
- package/dist/components/DataDisplay/du-status/du-status.types.d.ts +4 -0
- package/dist/components/DataDisplay/du-status/du-status.vue.d.ts +16 -0
- package/dist/components/DataDisplay/du-status/du-status.vue_vue_type_script_setup_true_lang.js +54 -0
- package/dist/components/DataDisplay/du-table/du-table-item.js +5 -0
- package/dist/components/DataDisplay/du-table/du-table-item.types.d.ts +6 -0
- package/dist/components/DataDisplay/du-table/du-table-item.vue.d.ts +19 -0
- package/dist/components/DataDisplay/du-table/du-table-item.vue_vue_type_script_setup_true_lang.js +30 -0
- package/dist/components/DataDisplay/du-table/du-table.js +5 -0
- package/dist/components/DataDisplay/du-table/du-table.types.d.ts +23 -0
- package/dist/components/DataDisplay/du-table/du-table.vue.d.ts +42 -0
- package/dist/components/DataDisplay/du-table/du-table.vue_vue_type_script_setup_true_lang.js +75 -0
- package/dist/components/DataDisplay/du-timeline/du-timeline-item.js +5 -0
- package/dist/components/DataDisplay/du-timeline/du-timeline-item.vue.d.ts +34 -0
- package/dist/components/DataDisplay/du-timeline/du-timeline-item.vue_vue_type_script_setup_true_lang.js +51 -0
- package/dist/components/DataDisplay/du-timeline/du-timeline.js +5 -0
- package/dist/components/DataDisplay/du-timeline/du-timeline.types.d.ts +12 -0
- package/dist/components/DataDisplay/du-timeline/du-timeline.vue.d.ts +61 -0
- package/dist/components/DataDisplay/du-timeline/du-timeline.vue_vue_type_script_setup_true_lang.js +75 -0
- package/dist/components/DataInput/du-checkbox/du-checkbox.js +5 -0
- package/dist/components/DataInput/du-checkbox/du-checkbox.types.d.ts +14 -0
- package/dist/components/DataInput/du-checkbox/du-checkbox.vue.d.ts +19 -0
- package/dist/components/DataInput/du-checkbox/du-checkbox.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/components/DataInput/du-fieldset/du-fieldset.js +5 -0
- package/dist/components/DataInput/du-fieldset/du-fieldset.types.d.ts +4 -0
- package/dist/components/DataInput/du-fieldset/du-fieldset.vue.d.ts +14 -0
- package/dist/components/DataInput/du-fieldset/du-fieldset.vue_vue_type_script_setup_true_lang.js +21 -0
- package/dist/components/DataInput/du-file-input/du-file-input.js +5 -0
- package/dist/components/DataInput/du-file-input/du-file-input.types.d.ts +10 -0
- package/dist/components/DataInput/du-file-input/du-file-input.vue.d.ts +9 -0
- package/dist/components/DataInput/du-file-input/du-file-input.vue_vue_type_script_setup_true_lang.js +34 -0
- package/dist/components/DataInput/du-filter/du-filter.js +5 -0
- package/dist/components/DataInput/du-filter/du-filter.types.d.ts +27 -0
- package/dist/components/DataInput/du-filter/du-filter.vue.d.ts +17 -0
- package/dist/components/DataInput/du-filter/du-filter.vue_vue_type_script_setup_true_lang.js +28 -0
- package/dist/components/DataInput/du-input-field/du-input-field.js +5 -0
- package/dist/components/DataInput/du-input-field/du-input-field.types.d.ts +26 -0
- package/dist/components/DataInput/du-input-field/du-input-field.vue.d.ts +21 -0
- package/dist/components/DataInput/du-input-field/du-input-field.vue_vue_type_script_setup_true_lang.js +76 -0
- package/dist/components/DataInput/du-label/du-label.js +5 -0
- package/dist/components/DataInput/du-label/du-label.types.d.ts +3 -0
- package/dist/components/DataInput/du-label/du-label.vue.d.ts +14 -0
- package/dist/components/DataInput/du-label/du-label.vue_vue_type_script_setup_true_lang.js +19 -0
- package/dist/components/DataInput/du-label-input-validator/du-label-input-validator.js +5 -0
- package/dist/components/DataInput/du-label-input-validator/du-label-input-validator.types.d.ts +5 -0
- package/dist/components/DataInput/du-label-input-validator/du-label-input-validator.vue.d.ts +37 -0
- package/dist/components/DataInput/du-label-input-validator/du-label-input-validator.vue_vue_type_script_setup_true_lang.js +90 -0
- package/dist/components/DataInput/du-radio/du-radio.js +5 -0
- package/dist/components/DataInput/du-radio/du-radio.types.d.ts +12 -0
- package/dist/components/DataInput/du-radio/du-radio.vue.d.ts +9 -0
- package/dist/components/DataInput/du-radio/du-radio.vue_vue_type_script_setup_true_lang.js +34 -0
- package/dist/components/DataInput/du-range/du-range.js +5 -0
- package/dist/components/DataInput/du-range/du-range.types.d.ts +15 -0
- package/dist/components/DataInput/du-range/du-range.vue.d.ts +20 -0
- package/dist/components/DataInput/du-range/du-range.vue_vue_type_script_setup_true_lang.js +52 -0
- package/dist/components/DataInput/du-rating/du-rating-item.js +5 -0
- package/dist/components/DataInput/du-rating/du-rating-item.vue.d.ts +15 -0
- package/dist/components/DataInput/du-rating/du-rating-item.vue_vue_type_script_setup_true_lang.js +57 -0
- package/dist/components/DataInput/du-rating/du-rating.js +5 -0
- package/dist/components/DataInput/du-rating/du-rating.types.d.ts +38 -0
- package/dist/components/DataInput/du-rating/du-rating.vue.d.ts +34 -0
- package/dist/components/DataInput/du-rating/du-rating.vue_vue_type_script_setup_true_lang.js +100 -0
- package/dist/components/DataInput/du-search/du-search.js +5 -0
- package/dist/components/DataInput/du-search/du-search.types.d.ts +40 -0
- package/dist/components/DataInput/du-search/du-search.vue.d.ts +52 -0
- package/dist/components/DataInput/du-search/du-search.vue_vue_type_script_setup_true_lang.js +270 -0
- package/dist/components/DataInput/du-select/du-select.js +7 -0
- package/dist/components/DataInput/du-select/du-select.types.d.ts +28 -0
- package/dist/components/DataInput/du-select/du-select.vue.d.ts +60 -0
- package/dist/components/DataInput/du-select/du-select.vue_vue_type_script_setup_true_lang.js +321 -0
- package/dist/components/DataInput/du-select/du-select.vue_vue_type_style_index_0_scoped_2bcf0acd_lang.css +1 -0
- package/dist/components/DataInput/du-text-area/du-text-area.js +5 -0
- package/dist/components/DataInput/du-text-area/du-text-area.types.d.ts +10 -0
- package/dist/components/DataInput/du-text-area/du-text-area.vue.d.ts +15 -0
- package/dist/components/DataInput/du-text-area/du-text-area.vue_vue_type_script_setup_true_lang.js +46 -0
- package/dist/components/Feedback/du-alert/du-alert.js +5 -0
- package/dist/components/Feedback/du-alert/du-alert.types.d.ts +14 -0
- package/dist/components/Feedback/du-alert/du-alert.vue.d.ts +25 -0
- package/dist/components/Feedback/du-alert/du-alert.vue_vue_type_script_setup_true_lang.js +94 -0
- package/dist/components/Feedback/du-loading/du-loading.js +5 -0
- package/dist/components/Feedback/du-loading/du-loading.types.d.ts +9 -0
- package/dist/components/Feedback/du-loading/du-loading.vue.d.ts +8 -0
- package/dist/components/Feedback/du-loading/du-loading.vue_vue_type_script_setup_true_lang.js +30 -0
- package/dist/components/Feedback/du-progress/du-progress.js +5 -0
- package/dist/components/Feedback/du-progress/du-progress.types.d.ts +7 -0
- package/dist/components/Feedback/du-progress/du-progress.vue.d.ts +9 -0
- package/dist/components/Feedback/du-progress/du-progress.vue_vue_type_script_setup_true_lang.js +29 -0
- package/dist/components/Feedback/du-radial-progress/du-radial-progress.js +7 -0
- package/dist/components/Feedback/du-radial-progress/du-radial-progress.types.d.ts +8 -0
- package/dist/components/Feedback/du-radial-progress/du-radial-progress.vue.d.ts +19 -0
- package/dist/components/Feedback/du-radial-progress/du-radial-progress.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/components/Feedback/du-radial-progress/du-radial-progress.vue_vue_type_style_index_0_scoped_4d489040_lang.css +1 -0
- package/dist/components/Feedback/du-skeleton/du-skeleton.js +5 -0
- package/dist/components/Feedback/du-skeleton/du-skeleton.types.d.ts +3 -0
- package/dist/components/Feedback/du-skeleton/du-skeleton.vue.d.ts +14 -0
- package/dist/components/Feedback/du-skeleton/du-skeleton.vue_vue_type_script_setup_true_lang.js +12 -0
- package/dist/components/Feedback/du-toast/du-toast.js +5 -0
- package/dist/components/Feedback/du-toast/du-toast.types.d.ts +9 -0
- package/dist/components/Feedback/du-toast/du-toast.vue.d.ts +20 -0
- package/dist/components/Feedback/du-toast/du-toast.vue_vue_type_script_setup_true_lang.js +45 -0
- package/dist/components/Feedback/du-tooltip/du-tooltip.js +5 -0
- package/dist/components/Feedback/du-tooltip/du-tooltip.types.d.ts +10 -0
- package/dist/components/Feedback/du-tooltip/du-tooltip.vue.d.ts +22 -0
- package/dist/components/Feedback/du-tooltip/du-tooltip.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/components/Layout/du-drawer/du-drawer.js +5 -0
- package/dist/components/Layout/du-drawer/du-drawer.types.d.ts +23 -0
- package/dist/components/Layout/du-drawer/du-drawer.vue.d.ts +58 -0
- package/dist/components/Layout/du-drawer/du-drawer.vue_vue_type_script_setup_true_lang.js +129 -0
- package/dist/components/Layout/du-join/du-join.js +5 -0
- package/dist/components/Layout/du-join/du-join.types.d.ts +6 -0
- package/dist/components/Layout/du-join/du-join.vue.d.ts +17 -0
- package/dist/components/Layout/du-join/du-join.vue_vue_type_script_setup_true_lang.js +24 -0
- package/dist/components/Navigation/du-breadcrumbs/du-breadcrumbs.js +7 -0
- package/dist/components/Navigation/du-breadcrumbs/du-breadcrumbs.types.d.ts +11 -0
- package/dist/components/Navigation/du-breadcrumbs/du-breadcrumbs.vue.d.ts +6 -0
- package/dist/components/Navigation/du-breadcrumbs/du-breadcrumbs.vue_vue_type_script_setup_true_lang.js +42 -0
- package/dist/components/Navigation/du-breadcrumbs/du-breadcrumbs.vue_vue_type_style_index_0_scoped_9364edec_lang.css +1 -0
- package/dist/components/Navigation/du-button-link/du-button-link.js +5 -0
- package/dist/components/Navigation/du-button-link/du-button-link.types.d.ts +16 -0
- package/dist/components/Navigation/du-button-link/du-button-link.vue.d.ts +27 -0
- package/dist/components/Navigation/du-button-link/du-button-link.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/components/Navigation/du-dock/du-dock.js +5 -0
- package/dist/components/Navigation/du-dock/du-dock.types.d.ts +16 -0
- package/dist/components/Navigation/du-dock/du-dock.vue.d.ts +59 -0
- package/dist/components/Navigation/du-dock/du-dock.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/components/Navigation/du-link/du-link.js +5 -0
- package/dist/components/Navigation/du-link/du-link.types.d.ts +6 -0
- package/dist/components/Navigation/du-link/du-link.vue.d.ts +18 -0
- package/dist/components/Navigation/du-link/du-link.vue_vue_type_script_setup_true_lang.js +28 -0
- package/dist/components/Navigation/du-menu/du-menu-item.js +5 -0
- package/dist/components/Navigation/du-menu/du-menu-item.vue.d.ts +17 -0
- package/dist/components/Navigation/du-menu/du-menu-item.vue_vue_type_script_setup_true_lang.js +186 -0
- package/dist/components/Navigation/du-menu/du-menu.js +6 -0
- package/dist/components/Navigation/du-menu/du-menu.types.d.ts +29 -0
- package/dist/components/Navigation/du-menu/du-menu.vue.d.ts +26 -0
- package/dist/components/Navigation/du-menu/du-menu.vue_vue_type_script_setup_true_lang.js +57 -0
- package/dist/components/Navigation/du-menu/du-menu.vue_vue_type_style_index_0_lang.css +1 -0
- package/dist/components/Navigation/du-navbar/du-navbar.js +5 -0
- package/dist/components/Navigation/du-navbar/du-navbar.types.d.ts +2 -0
- package/dist/components/Navigation/du-navbar/du-navbar.vue.d.ts +20 -0
- package/dist/components/Navigation/du-navbar/du-navbar.vue_vue_type_script_setup_true_lang.js +24 -0
- package/dist/components/Navigation/du-pagination/du-pagination.js +7 -0
- package/dist/components/Navigation/du-pagination/du-pagination.types.d.ts +29 -0
- package/dist/components/Navigation/du-pagination/du-pagination.vue.d.ts +51 -0
- package/dist/components/Navigation/du-pagination/du-pagination.vue_vue_type_script_setup_true_lang.js +156 -0
- package/dist/components/Navigation/du-pagination/du-pagination.vue_vue_type_style_index_0_scoped_7407b690_lang.css +1 -0
- package/dist/components/Navigation/du-step-item/du-step-item.js +5 -0
- package/dist/components/Navigation/du-step-item/du-step-item.types.d.ts +8 -0
- package/dist/components/Navigation/du-step-item/du-step-item.vue.d.ts +24 -0
- package/dist/components/Navigation/du-step-item/du-step-item.vue_vue_type_script_setup_true_lang.js +27 -0
- package/dist/components/Navigation/du-steps/du-steps.js +5 -0
- package/dist/components/Navigation/du-steps/du-steps.types.d.ts +17 -0
- package/dist/components/Navigation/du-steps/du-steps.vue.d.ts +40 -0
- package/dist/components/Navigation/du-steps/du-steps.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/components/Navigation/du-tabs/du-tabs.js +5 -0
- package/dist/components/Navigation/du-tabs/du-tabs.types.d.ts +22 -0
- package/dist/components/Navigation/du-tabs/du-tabs.vue.d.ts +50 -0
- package/dist/components/Navigation/du-tabs/du-tabs.vue_vue_type_script_setup_true_lang.js +76 -0
- package/dist/composables/useSizeProps.d.ts +15 -0
- package/dist/composables/useSizeProps.js +22 -0
- package/dist/composables/useVariantProps.d.ts +14 -0
- package/dist/composables/useVariantProps.js +7 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.js +65 -0
- package/dist/plugin-vite.d.ts +64 -0
- package/dist/plugin-vite.js +137 -0
- package/dist/types/index.d.ts +58 -0
- package/index.css +5 -0
- package/index.ts +69 -0
- package/package.json +99 -0
- package/plugin-vite.ts +286 -0
- package/types/index.ts +59 -0
- package/types/types.sh +80 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type Size } from "../../../composables/useSizeProps"
|
|
2
|
+
import { type Variant } from "../../../composables/useVariantProps"
|
|
3
|
+
|
|
4
|
+
export const SELECT_VARIANTS = ['default', 'select-primary', 'select-secondary', 'select-accent', 'select-info', 'select-success', 'select-warning', 'select-error'] as const
|
|
5
|
+
export const SELECT_SIZES = ['default', 'select-xs', 'select-sm', 'select-md', 'select-lg', 'select-xl'] as const
|
|
6
|
+
|
|
7
|
+
export type SELECTVariant = (typeof SELECT_VARIANTS)[number]
|
|
8
|
+
export type SELECTSize = (typeof SELECT_SIZES)[number]
|
|
9
|
+
|
|
10
|
+
export interface SELECTProps {
|
|
11
|
+
ghost?: boolean
|
|
12
|
+
variant?: Variant
|
|
13
|
+
size?: Size
|
|
14
|
+
disabled?: boolean
|
|
15
|
+
multiple?: boolean
|
|
16
|
+
modelValue?: any
|
|
17
|
+
placeholder?: string
|
|
18
|
+
search?: boolean
|
|
19
|
+
searchPlaceholder?: string
|
|
20
|
+
searchNoResultsText?: string
|
|
21
|
+
options?: any[]
|
|
22
|
+
searchable?: boolean
|
|
23
|
+
searchableInside?: boolean
|
|
24
|
+
checkboxes?: boolean
|
|
25
|
+
closeOnSelect?: boolean
|
|
26
|
+
trackBy?: string
|
|
27
|
+
labelBy?: string
|
|
28
|
+
returnObject?: boolean
|
|
29
|
+
clearable?: boolean
|
|
30
|
+
removeItemLabel?: string
|
|
31
|
+
}
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ref, computed, watch, onMounted, onBeforeUnmount, nextTick, inject } from 'vue'
|
|
3
|
+
import { useSizeMapping } from "../../../composables/useSizeProps"
|
|
4
|
+
import { useVariantMapping } from "../../../composables/useVariantProps"
|
|
5
|
+
import type { SELECTProps } from './du-select.types'
|
|
6
|
+
|
|
7
|
+
const props = withDefaults(defineProps<SELECTProps>(), {
|
|
8
|
+
options: () => [],
|
|
9
|
+
multiple: false,
|
|
10
|
+
placeholder: 'Select...',
|
|
11
|
+
searchable: false,
|
|
12
|
+
searchableInside: false,
|
|
13
|
+
searchPlaceholder: 'Search...',
|
|
14
|
+
searchNoResultsText: 'No options found',
|
|
15
|
+
checkboxes: false,
|
|
16
|
+
closeOnSelect: true,
|
|
17
|
+
trackBy: 'id',
|
|
18
|
+
labelBy: 'name',
|
|
19
|
+
returnObject: false,
|
|
20
|
+
clearable: false,
|
|
21
|
+
ghost: false,
|
|
22
|
+
variant: 'default',
|
|
23
|
+
size: 'default',
|
|
24
|
+
disabled: false,
|
|
25
|
+
search: false,
|
|
26
|
+
removeItemLabel: 'Remove',
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const emit = defineEmits<{
|
|
30
|
+
'update:modelValue': [value: any]
|
|
31
|
+
select: [option: any]
|
|
32
|
+
remove: [option: any]
|
|
33
|
+
open: []
|
|
34
|
+
close: []
|
|
35
|
+
}>()
|
|
36
|
+
|
|
37
|
+
const { colorClass } = useVariantMapping(props, "select")
|
|
38
|
+
const { sizeClass: inputSizeClass } = useSizeMapping(props, "input")
|
|
39
|
+
const { sizeClass: subMenuSizeClass } = useSizeMapping(props, "menu")
|
|
40
|
+
const ghostClass = computed(() => (props.ghost ? "select-ghost" : ""))
|
|
41
|
+
|
|
42
|
+
const isInLabel = inject("isInLabel", false);
|
|
43
|
+
|
|
44
|
+
const root = ref<HTMLElement | null>(null)
|
|
45
|
+
const searchInput = ref<HTMLInputElement | null>(null)
|
|
46
|
+
const searchInputInside = ref<HTMLInputElement | null>(null)
|
|
47
|
+
const open = ref(false)
|
|
48
|
+
const query = ref('')
|
|
49
|
+
const highlightedIndex = ref(-1)
|
|
50
|
+
const listId = `du-select-list-${Math.random().toString(36).slice(2, 9)}`
|
|
51
|
+
|
|
52
|
+
function optionValue(opt: any): any {
|
|
53
|
+
if (opt && typeof opt === 'object') return opt[props.trackBy] ?? opt.value ?? opt.id ?? opt
|
|
54
|
+
return opt
|
|
55
|
+
}
|
|
56
|
+
function optionLabel(opt: any): string {
|
|
57
|
+
if (opt && typeof opt === 'object') return opt[props.labelBy] ?? opt.label ?? opt.name ?? String(opt)
|
|
58
|
+
return String(opt)
|
|
59
|
+
}
|
|
60
|
+
function labelFromOption(opt: any): string { return optionLabel(opt) }
|
|
61
|
+
function labelFromValue(val: any): string {
|
|
62
|
+
const o = props.options.find(o => optionValue(o) === val)
|
|
63
|
+
return o ? optionLabel(o) : String(val)
|
|
64
|
+
}
|
|
65
|
+
function keyForOption(opt: any, i: number): string {
|
|
66
|
+
const v = optionValue(opt)
|
|
67
|
+
return `${String(v)}__${i}`
|
|
68
|
+
}
|
|
69
|
+
function valKey(val: any, idx: number): string { return `${String(val)}__${idx}` }
|
|
70
|
+
|
|
71
|
+
const selectedValues = ref<any[]>([])
|
|
72
|
+
const selectedSingle = ref<any>(null)
|
|
73
|
+
|
|
74
|
+
function syncFromModel() {
|
|
75
|
+
if (props.multiple) {
|
|
76
|
+
if (Array.isArray(props.modelValue)) {
|
|
77
|
+
selectedValues.value = props.modelValue.map(v => (v && typeof v === 'object' ? optionValue(v) : v))
|
|
78
|
+
} else {
|
|
79
|
+
selectedValues.value = []
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
if (props.modelValue && typeof props.modelValue === 'object') {
|
|
83
|
+
selectedSingle.value = optionValue(props.modelValue)
|
|
84
|
+
} else {
|
|
85
|
+
selectedSingle.value = props.modelValue
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
watch(() => props.modelValue, () => syncFromModel(), { immediate: true })
|
|
91
|
+
|
|
92
|
+
const filteredOptions = computed(() => {
|
|
93
|
+
const q = query.value?.toString().trim().toLowerCase()
|
|
94
|
+
if (!q) return props.options
|
|
95
|
+
return props.options.filter(o => optionLabel(o).toString().toLowerCase().includes(q))
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
function isSelected(opt: any): boolean {
|
|
99
|
+
const v = optionValue(opt)
|
|
100
|
+
if (props.multiple) return selectedValues.value.includes(v)
|
|
101
|
+
return selectedSingle.value === v
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function optionFromValue(v: any): any {
|
|
105
|
+
return props.options.find(o => optionValue(o) === v) ?? v
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function emitModelForMultiple() {
|
|
109
|
+
const out = props.returnObject ? selectedValues.value.map(v => optionFromValue(v)) : [...selectedValues.value]
|
|
110
|
+
emit('update:modelValue', out)
|
|
111
|
+
}
|
|
112
|
+
function emitModelForSingle(val: any) {
|
|
113
|
+
const out = props.returnObject ? optionFromValue(val) : val
|
|
114
|
+
emit('update:modelValue', out)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function toggleOption(opt: any) {
|
|
118
|
+
const v = optionValue(opt)
|
|
119
|
+
if (props.multiple) {
|
|
120
|
+
const idx = selectedValues.value.indexOf(v)
|
|
121
|
+
if (idx === -1) {
|
|
122
|
+
selectedValues.value.push(v)
|
|
123
|
+
emit('select', optionFromValue(v))
|
|
124
|
+
} else {
|
|
125
|
+
selectedValues.value.splice(idx, 1)
|
|
126
|
+
emit('remove', optionFromValue(v))
|
|
127
|
+
}
|
|
128
|
+
emitModelForMultiple()
|
|
129
|
+
} else {
|
|
130
|
+
if (props.clearable && selectedSingle.value === v) {
|
|
131
|
+
selectedSingle.value = null
|
|
132
|
+
emit('update:modelValue', null)
|
|
133
|
+
close()
|
|
134
|
+
} else {
|
|
135
|
+
selectedSingle.value = v
|
|
136
|
+
emit('select', optionFromValue(v))
|
|
137
|
+
emitModelForSingle(v)
|
|
138
|
+
if (props.closeOnSelect) close()
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function handleOptionClick(opt: any) {
|
|
144
|
+
toggleOption(opt)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function removeValue(val: any) {
|
|
148
|
+
if (!props.multiple) return
|
|
149
|
+
const idx = selectedValues.value.indexOf(val)
|
|
150
|
+
if (idx > -1) {
|
|
151
|
+
selectedValues.value.splice(idx, 1)
|
|
152
|
+
emit('remove', optionFromValue(val))
|
|
153
|
+
emitModelForMultiple()
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function openDropdown() {
|
|
158
|
+
open.value = true
|
|
159
|
+
emit('open')
|
|
160
|
+
highlightedIndex.value = 0
|
|
161
|
+
nextTick(() => {
|
|
162
|
+
if (props.searchable && (props.searchableInside || props.multiple)) {
|
|
163
|
+
// focus internal search if present
|
|
164
|
+
if (searchInput.value) searchInput.value.focus()
|
|
165
|
+
if (searchInputInside.value) searchInputInside.value.focus()
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
}
|
|
169
|
+
function close() {
|
|
170
|
+
open.value = false
|
|
171
|
+
query.value = ''
|
|
172
|
+
highlightedIndex.value = -1
|
|
173
|
+
emit('close')
|
|
174
|
+
}
|
|
175
|
+
function toggle() {
|
|
176
|
+
if (open.value) close()
|
|
177
|
+
else openDropdown()
|
|
178
|
+
}
|
|
179
|
+
function focusToggle() {
|
|
180
|
+
if (!open.value) openDropdown()
|
|
181
|
+
else {
|
|
182
|
+
// focus search input if there
|
|
183
|
+
nextTick(() => {
|
|
184
|
+
if (searchInput.value) searchInput.value.focus()
|
|
185
|
+
if (searchInputInside.value) searchInputInside.value.focus()
|
|
186
|
+
})
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function onQuery() {
|
|
191
|
+
highlightedIndex.value = 0
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function onKeydown(e: KeyboardEvent) {
|
|
195
|
+
if (!open.value && ['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(e.key)) {
|
|
196
|
+
openDropdown()
|
|
197
|
+
e.preventDefault()
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
const len = filteredOptions.value.length
|
|
201
|
+
if (e.key === 'ArrowDown') {
|
|
202
|
+
highlightedIndex.value = (highlightedIndex.value + 1 + len) % len
|
|
203
|
+
scrollHighlightedIntoView()
|
|
204
|
+
e.preventDefault()
|
|
205
|
+
} else if (e.key === 'ArrowUp') {
|
|
206
|
+
highlightedIndex.value = (highlightedIndex.value - 1 + len) % len
|
|
207
|
+
scrollHighlightedIntoView()
|
|
208
|
+
e.preventDefault()
|
|
209
|
+
} else if (e.key === 'Enter') {
|
|
210
|
+
if (highlightedIndex.value >= 0 && highlightedIndex.value < len) {
|
|
211
|
+
toggleOption(filteredOptions.value[highlightedIndex.value])
|
|
212
|
+
}
|
|
213
|
+
e.preventDefault()
|
|
214
|
+
} else if (e.key === 'Escape') {
|
|
215
|
+
close()
|
|
216
|
+
e.preventDefault()
|
|
217
|
+
} else if (e.key === 'Backspace' && props.multiple && query.value === '') {
|
|
218
|
+
// remove last tag
|
|
219
|
+
const last = selectedValues.value[selectedValues.value.length - 1]
|
|
220
|
+
if (last !== undefined) removeValue(last)
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function scrollHighlightedIntoView() {
|
|
225
|
+
nextTick(() => {
|
|
226
|
+
const list = root.value?.querySelector(`#${listId}`)
|
|
227
|
+
const active = list?.querySelectorAll('li')[highlightedIndex.value]
|
|
228
|
+
if (active && active.scrollIntoView) active.scrollIntoView({ block: 'nearest' })
|
|
229
|
+
})
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function onClickOutside(e: Event) {
|
|
233
|
+
if (!root.value) return
|
|
234
|
+
if (!root.value.contains(e.target as Node)) close()
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function onFocusOut(_e: FocusEvent) {
|
|
238
|
+
setTimeout(() => {
|
|
239
|
+
if (!root.value) return
|
|
240
|
+
|
|
241
|
+
// Check if the new focus target is outside our component
|
|
242
|
+
const activeElement = document.activeElement
|
|
243
|
+
if (!activeElement || !root.value.contains(activeElement)) {
|
|
244
|
+
close()
|
|
245
|
+
}
|
|
246
|
+
}, 0)
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function onFocus(_e: FocusEvent) {
|
|
250
|
+
if (!open.value) {
|
|
251
|
+
openDropdown()
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
onMounted(() => {
|
|
256
|
+
document.addEventListener('click', onClickOutside)
|
|
257
|
+
root.value?.addEventListener('focusout', onFocusOut)
|
|
258
|
+
})
|
|
259
|
+
onBeforeUnmount(() => {
|
|
260
|
+
document.removeEventListener('click', onClickOutside)
|
|
261
|
+
root.value?.removeEventListener('focusout', onFocusOut)
|
|
262
|
+
})
|
|
263
|
+
|
|
264
|
+
const selectedOption = computed(() => optionFromValue(selectedSingle.value))
|
|
265
|
+
|
|
266
|
+
</script>
|
|
267
|
+
|
|
268
|
+
<template>
|
|
269
|
+
<div class="relative" :class="[isInLabel && 'w-full']" ref="root" @keydown="onKeydown">
|
|
270
|
+
<div class="input input-bordered flex items-center gap-2 cursor-text w-full overflow-x-clip"
|
|
271
|
+
:class="[colorClass, inputSizeClass, ghostClass, { 'input-disabled': disabled }, { 'outline-none rounded-l-none border-x-0': isInLabel }]" tabindex="0" role="combobox"
|
|
272
|
+
:aria-expanded="open" :aria-controls="listId" @click="focusToggle" @focus="onFocus">
|
|
273
|
+
<template v-if="multiple">
|
|
274
|
+
<template v-for="(val, idx) in selectedValues" :key="valKey(val, idx)">
|
|
275
|
+
<slot name="tag" :value="optionFromValue(val)" :index="idx">
|
|
276
|
+
<label class="badge badge-sm badge-neutral mr-1 flex items-center gap-2 cursor-pointer">
|
|
277
|
+
{{ labelFromValue(val) }}
|
|
278
|
+
<button class="btn btn-ghost btn-circle btn-xs p-0" @click.stop="removeValue(val)"
|
|
279
|
+
:aria-label="removeItemLabel">✕</button>
|
|
280
|
+
</label>
|
|
281
|
+
</slot>
|
|
282
|
+
</template>
|
|
283
|
+
|
|
284
|
+
<input v-if="searchable" ref="searchInput" v-model="query" @focus="open = true" @input="onQuery"
|
|
285
|
+
class="input input-ghost flex-1 w-full !outline-none pl-0"
|
|
286
|
+
:class="{ ' placeholder:!text-base-content': selectedValues.length }"
|
|
287
|
+
:placeholder="selectedValues.length ? '' : placeholder" aria-autocomplete="list" />
|
|
288
|
+
|
|
289
|
+
<span v-else class="flex-1" :class="{ 'text-gray-400': !selectedValues.length }">
|
|
290
|
+
{{ !selectedValues.length ? placeholder : '' }}
|
|
291
|
+
</span>
|
|
292
|
+
</template>
|
|
293
|
+
|
|
294
|
+
<template v-else>
|
|
295
|
+
<template v-if="searchable">
|
|
296
|
+
<input ref="searchInput" v-model="query" @focus="open = true" @input="onQuery"
|
|
297
|
+
class="input input-ghost flex-1 min-w-[6rem] !outline-none pl-0"
|
|
298
|
+
:class="{ ' placeholder:!text-base-content': selectedOption }"
|
|
299
|
+
:placeholder="selectedOption ? labelFromOption(selectedOption) : placeholder"
|
|
300
|
+
aria-autocomplete="list" />
|
|
301
|
+
</template>
|
|
302
|
+
<template v-else>
|
|
303
|
+
<slot name="selected" :selected="selectedOption">
|
|
304
|
+
<span class="flex-1">{{ selectedOption ? labelFromOption(selectedOption) : placeholder }}</span>
|
|
305
|
+
</slot>
|
|
306
|
+
</template>
|
|
307
|
+
</template>
|
|
308
|
+
|
|
309
|
+
<div class="btn btn-ghost btn-sm outline-none! h-4/5" type="button" @click.stop="toggle">
|
|
310
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none"
|
|
311
|
+
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
312
|
+
<polyline points="6 9 12 15 18 9"></polyline>
|
|
313
|
+
</svg>
|
|
314
|
+
</div>
|
|
315
|
+
</div>
|
|
316
|
+
|
|
317
|
+
<transition enter-active-class="transition ease-out duration-100" enter-from-class="opacity-0 scale-95"
|
|
318
|
+
enter-to-class="opacity-100 scale-100" leave-active-class="transition ease-in duration-75"
|
|
319
|
+
leave-from-class="opacity-100 scale-100" leave-to-class="opacity-0 scale-95">
|
|
320
|
+
<div v-if="open"
|
|
321
|
+
class="absolute dropdown-content menu flex-nowrap bg-base-100 rounded-box shadow mt-1 w-full z-50 p-0"
|
|
322
|
+
role="listbox" :id="listId" :class="[subMenuSizeClass]">
|
|
323
|
+
<!-- optional internal search at top of dropdown -->
|
|
324
|
+
<div v-if="searchable && searchableInside" class="p-2">
|
|
325
|
+
<input v-model="query" ref="searchInputInside" class="input input-bordered w-full"
|
|
326
|
+
:placeholder="searchPlaceholder" @input="onQuery" />
|
|
327
|
+
</div>
|
|
328
|
+
|
|
329
|
+
<div class="block max-h-72 overflow-auto">
|
|
330
|
+
<ul class="block m-0 p-2">
|
|
331
|
+
<li v-for="(opt, i) in filteredOptions" :key="keyForOption(opt, i)"
|
|
332
|
+
class="block w-full rounded-box"
|
|
333
|
+
:class="[{ 'bg-primary text-primary-content': isSelected(opt), 'bg-base-300': i === highlightedIndex, 'bg-primary/75': isSelected(opt) && i === highlightedIndex }, 'cursor-pointer']"
|
|
334
|
+
role="option" :aria-selected="isSelected(opt)" @mousedown.prevent="handleOptionClick(opt)"
|
|
335
|
+
@mouseover.prevent="highlightedIndex = i">
|
|
336
|
+
<a class="flex items-center gap-3 py-2 px-3 text-balance! bg-transparent">
|
|
337
|
+
<input v-if="checkboxes" type="checkbox" class="checkbox checkbox-sm"
|
|
338
|
+
:checked="isSelected(opt)" @change.stop.prevent="toggleOption(opt)" tabindex="-1" />
|
|
339
|
+
<slot name="option" :option="opt" :index="i">
|
|
340
|
+
{{ labelFromOption(opt) }}
|
|
341
|
+
</slot>
|
|
342
|
+
<span v-if="clearable && isSelected(opt)" class="ml-auto opacity-60 hover:opacity-100" aria-hidden="true">✕</span>
|
|
343
|
+
</a>
|
|
344
|
+
</li>
|
|
345
|
+
|
|
346
|
+
<li v-if="filteredOptions.length === 0" class="p-2 text-sm text-gray-500">
|
|
347
|
+
<slot name="no-options">{{ searchNoResultsText }}</slot>
|
|
348
|
+
</li>
|
|
349
|
+
</ul>
|
|
350
|
+
</div>
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
</div>
|
|
354
|
+
</transition>
|
|
355
|
+
</div>
|
|
356
|
+
</template>
|
|
357
|
+
|
|
358
|
+
<style scoped>
|
|
359
|
+
.dropdown-content.menu {
|
|
360
|
+
@supports (scrollbar-color: auto) {
|
|
361
|
+
|
|
362
|
+
*,
|
|
363
|
+
*:hover {
|
|
364
|
+
scrollbar-width: thin;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
@supports (scrollbar-width: none) {
|
|
369
|
+
|
|
370
|
+
*,
|
|
371
|
+
*:hover {
|
|
372
|
+
scrollbar-width: thin;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
& ul {
|
|
377
|
+
display: block;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
& li a {
|
|
381
|
+
white-space: nowrap;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Variant } from "../../../composables/useVariantProps"
|
|
2
|
+
import { type Size } from "../../../composables/useSizeProps"
|
|
3
|
+
|
|
4
|
+
export interface TEXTAREAProps {
|
|
5
|
+
modelValue?: string
|
|
6
|
+
placeholder?: string
|
|
7
|
+
disabled?: boolean
|
|
8
|
+
variant?: Variant
|
|
9
|
+
size?: Size
|
|
10
|
+
ghost?: boolean
|
|
11
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type TEXTAREAProps } from './du-text-area.types'
|
|
3
|
+
import { useVariantMapping } from "../../../composables/useVariantProps"
|
|
4
|
+
import { useSizeMapping } from "../../../composables/useSizeProps"
|
|
5
|
+
import { computed } from "vue"
|
|
6
|
+
|
|
7
|
+
const props = withDefaults(
|
|
8
|
+
defineProps<TEXTAREAProps>(),
|
|
9
|
+
{
|
|
10
|
+
modelValue: "",
|
|
11
|
+
placeholder: "",
|
|
12
|
+
disabled: false,
|
|
13
|
+
variant: "default",
|
|
14
|
+
size: "default",
|
|
15
|
+
ghost: false,
|
|
16
|
+
},
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
const emit = defineEmits<{
|
|
20
|
+
(e: "update:modelValue", value: string): void
|
|
21
|
+
}>()
|
|
22
|
+
|
|
23
|
+
const ghostClass = computed(() => (props.ghost ? "textarea-ghost" : ""))
|
|
24
|
+
const { colorClass } = useVariantMapping(props, "textarea")
|
|
25
|
+
const { sizeClass } = useSizeMapping(props, "textarea")
|
|
26
|
+
|
|
27
|
+
const handleInput = (event: Event) => {
|
|
28
|
+
const value = (event.target as HTMLTextAreaElement).value
|
|
29
|
+
emit("update:modelValue", value)
|
|
30
|
+
}
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<template>
|
|
34
|
+
<textarea
|
|
35
|
+
:value="modelValue"
|
|
36
|
+
:placeholder="placeholder"
|
|
37
|
+
:disabled="disabled"
|
|
38
|
+
@input="handleInput"
|
|
39
|
+
:class="['textarea', ghostClass, colorClass, sizeClass]"
|
|
40
|
+
/>
|
|
41
|
+
</template>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const DU_ALERT_VARIANTS = ["default", "success", "error", "warning", "info"] as const;
|
|
2
|
+
export type AlertVariant = (typeof DU_ALERT_VARIANTS)[number];
|
|
3
|
+
|
|
4
|
+
export const DU_ALERT_DIRECTIONS = ["default", "vertical", "horizontal", "responsive"] as const;
|
|
5
|
+
export type AlertDirection = (typeof DU_ALERT_DIRECTIONS)[number];
|
|
6
|
+
|
|
7
|
+
export interface AlertProps {
|
|
8
|
+
variant?: AlertVariant;
|
|
9
|
+
direction?: AlertDirection;
|
|
10
|
+
soft?: boolean;
|
|
11
|
+
outline?: boolean;
|
|
12
|
+
dash?: boolean;
|
|
13
|
+
dismissible?: boolean;
|
|
14
|
+
autoDismissible?: boolean;
|
|
15
|
+
icon?: boolean;
|
|
16
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, onMounted, ref } from "vue";
|
|
3
|
+
import { type AlertProps } from "./du-alert.types";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const props = withDefaults(
|
|
7
|
+
defineProps<AlertProps>(),
|
|
8
|
+
{
|
|
9
|
+
variant: "default",
|
|
10
|
+
direction: "default",
|
|
11
|
+
soft: false,
|
|
12
|
+
outline: false,
|
|
13
|
+
dash: false,
|
|
14
|
+
dismissible: false,
|
|
15
|
+
autoDismissible: false,
|
|
16
|
+
icon: true,
|
|
17
|
+
},
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
// Détermine si l'alerte est visible
|
|
21
|
+
const visible = ref(true);
|
|
22
|
+
|
|
23
|
+
const onClick = () => {
|
|
24
|
+
visible.value = false;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
onMounted(() => {
|
|
28
|
+
if (props.autoDismissible) {
|
|
29
|
+
setTimeout(() => {
|
|
30
|
+
visible.value = false;
|
|
31
|
+
}, 5000);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Détermine la classe CSS en fonction du type d'alerte
|
|
36
|
+
const alertColorClass = computed(() => {
|
|
37
|
+
return {
|
|
38
|
+
default: "",
|
|
39
|
+
success: "alert-success",
|
|
40
|
+
error: "alert-error",
|
|
41
|
+
warning: "alert-warning",
|
|
42
|
+
info: "alert-info",
|
|
43
|
+
}[props.variant];
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
const directionClass = computed(() => {
|
|
47
|
+
return {
|
|
48
|
+
default: "",
|
|
49
|
+
vertical: "alert-vertical",
|
|
50
|
+
horizontal: "alert-horizontal",
|
|
51
|
+
responsive: "alert-vertical sm:alert-horizontal",
|
|
52
|
+
}[props.direction];
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const softClass = computed(() => {
|
|
56
|
+
return props.soft ? "alert-soft" : "";
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const outlineClass = computed(() => {
|
|
60
|
+
return props.outline ? "alert-outline" : "";
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const dashClass = computed(() => {
|
|
64
|
+
return props.dash ? "alert-dash" : "";
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// SVG en fonction du type d'alerte
|
|
68
|
+
const svgIcons = {
|
|
69
|
+
default: `
|
|
70
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="stroke-info h-6 w-6 shrink-0">
|
|
71
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
|
72
|
+
</svg>`,
|
|
73
|
+
success: `
|
|
74
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 shrink-0 stroke-current" fill="none" viewBox="0 0 24 24">
|
|
75
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
76
|
+
</svg>`,
|
|
77
|
+
error: `
|
|
78
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 shrink-0 stroke-current" fill="none" viewBox="0 0 24 24">
|
|
79
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
80
|
+
</svg>`,
|
|
81
|
+
warning: `
|
|
82
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 shrink-0 stroke-current" fill="none" viewBox="0 0 24 24">
|
|
83
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
|
|
84
|
+
</svg>`,
|
|
85
|
+
info: `
|
|
86
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="h-6 w-6 shrink-0 stroke-current">
|
|
87
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
|
88
|
+
</svg>`,
|
|
89
|
+
};
|
|
90
|
+
</script>
|
|
91
|
+
|
|
92
|
+
<template>
|
|
93
|
+
<div role="alert" v-if="visible" :class="[
|
|
94
|
+
'alert',
|
|
95
|
+
alertColorClass,
|
|
96
|
+
softClass,
|
|
97
|
+
outlineClass,
|
|
98
|
+
dashClass,
|
|
99
|
+
directionClass,
|
|
100
|
+
]">
|
|
101
|
+
<template v-if="icon"><span v-html="svgIcons[variant]"></span></template>
|
|
102
|
+
<slot>Default alert</slot>
|
|
103
|
+
<div v-if="$slots.actions || dismissible">
|
|
104
|
+
<slot name="actions"></slot>
|
|
105
|
+
<button v-if="dismissible" @click="onClick" class="btn btn-sm btn-square btn-ghost">
|
|
106
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
|
|
107
|
+
<path fill="currentColor"
|
|
108
|
+
d="M3.64 2.27L7.5 6.13l3.84-3.84A.92.92 0 0 1 12 2a1 1 0 0 1 1 1a.9.9 0 0 1-.27.66L8.84 7.5l3.89 3.89A.9.9 0 0 1 13 12a1 1 0 0 1-1 1a.92.92 0 0 1-.69-.27L7.5 8.87l-3.85 3.85A.92.92 0 0 1 3 13a1 1 0 0 1-1-1a.9.9 0 0 1 .27-.66L6.16 7.5L2.27 3.61A.9.9 0 0 1 2 3a1 1 0 0 1 1-1c.24.003.47.1.64.27" />
|
|
109
|
+
</svg>
|
|
110
|
+
</button>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</template>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Variant } from "../../../composables/useVariantProps";
|
|
2
|
+
import { type Size } from "../../../composables/useSizeProps";
|
|
3
|
+
|
|
4
|
+
export const DU_LOADING_ANIMATIONS = ["spinner", "dots", "ring", "ball", "bars", "infinity"] as const;
|
|
5
|
+
export type LoadingAnimation = (typeof DU_LOADING_ANIMATIONS)[number];
|
|
6
|
+
|
|
7
|
+
export interface LoadingProps {
|
|
8
|
+
animation?: LoadingAnimation;
|
|
9
|
+
size?: Size;
|
|
10
|
+
variant?: Variant;
|
|
11
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from "vue";
|
|
3
|
+
import { useVariantMapping } from "../../../composables/useVariantProps";
|
|
4
|
+
import { useSizeMapping } from "../../../composables/useSizeProps";
|
|
5
|
+
import { type LoadingProps } from "./du-loading.types";
|
|
6
|
+
|
|
7
|
+
const props = withDefaults(
|
|
8
|
+
defineProps<LoadingProps>(),
|
|
9
|
+
{
|
|
10
|
+
animation: "spinner",
|
|
11
|
+
size: "default",
|
|
12
|
+
variant: "default",
|
|
13
|
+
},
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
const animationClass = computed(() => {
|
|
17
|
+
return {
|
|
18
|
+
spinner: "loading-spinner",
|
|
19
|
+
dots: "loading-dots",
|
|
20
|
+
ring: "loading-ring",
|
|
21
|
+
ball: "loading-ball",
|
|
22
|
+
bars: "loading-bars",
|
|
23
|
+
infinity: "loading-infinity",
|
|
24
|
+
}[props.animation];
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const { sizeClass } = useSizeMapping(props, "loading");
|
|
28
|
+
const { colorClass } = useVariantMapping(props, "text");
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<template>
|
|
32
|
+
<span :class="['loading', sizeClass, animationClass, colorClass]"></span>
|
|
33
|
+
</template>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useVariantMapping } from "../../../composables/useVariantProps";
|
|
3
|
+
import { type ProgressProps } from "./du-progress.types";
|
|
4
|
+
|
|
5
|
+
const props = withDefaults(
|
|
6
|
+
defineProps<ProgressProps>(),
|
|
7
|
+
{
|
|
8
|
+
variant: "default",
|
|
9
|
+
value: 0,
|
|
10
|
+
max: 100,
|
|
11
|
+
indeterminate: false,
|
|
12
|
+
},
|
|
13
|
+
);
|
|
14
|
+
const { colorClass } = useVariantMapping(props, "progress");
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<progress
|
|
19
|
+
:class="['progress', 'w-56', colorClass]"
|
|
20
|
+
:value="!indeterminate ? value : undefined"
|
|
21
|
+
:max="!indeterminate ? max : undefined"
|
|
22
|
+
></progress>
|
|
23
|
+
</template>
|