@winkintel/bootstrap-svelte 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +202 -0
- package/README.md +221 -0
- package/dist/Accordion/accordion-body.svelte +8 -0
- package/dist/Accordion/accordion-body.svelte.d.ts +4 -0
- package/dist/Accordion/accordion-button.svelte +25 -0
- package/dist/Accordion/accordion-button.svelte.d.ts +4 -0
- package/dist/Accordion/accordion-collapse.svelte +18 -0
- package/dist/Accordion/accordion-collapse.svelte.d.ts +4 -0
- package/dist/Accordion/accordion-header.svelte +8 -0
- package/dist/Accordion/accordion-header.svelte.d.ts +4 -0
- package/dist/Accordion/accordion-item.svelte +33 -0
- package/dist/Accordion/accordion-item.svelte.d.ts +4 -0
- package/dist/Accordion/accordion.svelte +65 -0
- package/dist/Accordion/accordion.svelte.d.ts +51 -0
- package/dist/Accordion/accordion.svelte.js +139 -0
- package/dist/Accordion/composition.d.ts +7 -0
- package/dist/Accordion/composition.js +6 -0
- package/dist/Accordion/index.d.ts +1 -0
- package/dist/Accordion/index.js +1 -0
- package/dist/Accordion/types.d.ts +15 -0
- package/dist/Accordion/types.js +1 -0
- package/dist/Alert/alert.svelte +73 -0
- package/dist/Alert/alert.svelte.d.ts +46 -0
- package/dist/Alert/index.d.ts +2 -0
- package/dist/Alert/index.js +2 -0
- package/dist/Alert/types.d.ts +11 -0
- package/dist/Alert/types.js +1 -0
- package/dist/Badge/badge.svelte +42 -0
- package/dist/Badge/badge.svelte.d.ts +36 -0
- package/dist/Badge/index.d.ts +2 -0
- package/dist/Badge/index.js +2 -0
- package/dist/Badge/types.d.ts +28 -0
- package/dist/Badge/types.js +24 -0
- package/dist/Breadcrumb/breadcrumb-item.svelte +66 -0
- package/dist/Breadcrumb/breadcrumb-item.svelte.d.ts +30 -0
- package/dist/Breadcrumb/breadcrumb.svelte +57 -0
- package/dist/Breadcrumb/breadcrumb.svelte.d.ts +34 -0
- package/dist/Breadcrumb/breadcrumb.svelte.js +41 -0
- package/dist/Breadcrumb/composition.d.ts +3 -0
- package/dist/Breadcrumb/composition.js +2 -0
- package/dist/Breadcrumb/index.d.ts +1 -0
- package/dist/Breadcrumb/index.js +1 -0
- package/dist/Breadcrumb/types.d.ts +9 -0
- package/dist/Breadcrumb/types.js +1 -0
- package/dist/BreakpointListener/breakpoint-listener.svelte +54 -0
- package/dist/BreakpointListener/breakpoint-listener.svelte.d.ts +4 -0
- package/dist/BreakpointListener/index.d.ts +2 -0
- package/dist/BreakpointListener/index.js +2 -0
- package/dist/BreakpointListener/types.d.ts +30 -0
- package/dist/BreakpointListener/types.js +20 -0
- package/dist/Button/button.svelte +87 -0
- package/dist/Button/button.svelte.d.ts +59 -0
- package/dist/Button/index.d.ts +2 -0
- package/dist/Button/index.js +2 -0
- package/dist/Button/types.d.ts +26 -0
- package/dist/Button/types.js +1 -0
- package/dist/ButtonGroup/button-check.svelte +70 -0
- package/dist/ButtonGroup/button-check.svelte.d.ts +35 -0
- package/dist/ButtonGroup/button-group.svelte +51 -0
- package/dist/ButtonGroup/button-group.svelte.d.ts +43 -0
- package/dist/ButtonGroup/button-toolbar.svelte +36 -0
- package/dist/ButtonGroup/button-toolbar.svelte.d.ts +28 -0
- package/dist/ButtonGroup/index.d.ts +4 -0
- package/dist/ButtonGroup/index.js +4 -0
- package/dist/ButtonGroup/types.d.ts +21 -0
- package/dist/ButtonGroup/types.js +1 -0
- package/dist/Card/card-body.svelte +10 -0
- package/dist/Card/card-body.svelte.d.ts +3 -0
- package/dist/Card/card-footer.svelte +10 -0
- package/dist/Card/card-footer.svelte.d.ts +3 -0
- package/dist/Card/card-group.svelte +10 -0
- package/dist/Card/card-group.svelte.d.ts +3 -0
- package/dist/Card/card-header.svelte +10 -0
- package/dist/Card/card-header.svelte.d.ts +3 -0
- package/dist/Card/card-img-overlay.svelte +10 -0
- package/dist/Card/card-img-overlay.svelte.d.ts +3 -0
- package/dist/Card/card-img.svelte +12 -0
- package/dist/Card/card-img.svelte.d.ts +4 -0
- package/dist/Card/card-link.svelte +10 -0
- package/dist/Card/card-link.svelte.d.ts +4 -0
- package/dist/Card/card-subtitle.svelte +11 -0
- package/dist/Card/card-subtitle.svelte.d.ts +4 -0
- package/dist/Card/card-text.svelte +10 -0
- package/dist/Card/card-text.svelte.d.ts +3 -0
- package/dist/Card/card-title.svelte +11 -0
- package/dist/Card/card-title.svelte.d.ts +4 -0
- package/dist/Card/card.svelte +45 -0
- package/dist/Card/card.svelte.d.ts +38 -0
- package/dist/Card/composition.d.ts +12 -0
- package/dist/Card/composition.js +11 -0
- package/dist/Card/index.d.ts +1 -0
- package/dist/Card/index.js +1 -0
- package/dist/Card/types.d.ts +22 -0
- package/dist/Card/types.js +1 -0
- package/dist/Carousel/carousel-caption.svelte +30 -0
- package/dist/Carousel/carousel-caption.svelte.d.ts +22 -0
- package/dist/Carousel/carousel-control-next.svelte +35 -0
- package/dist/Carousel/carousel-control-next.svelte.d.ts +21 -0
- package/dist/Carousel/carousel-control-prev.svelte +35 -0
- package/dist/Carousel/carousel-control-prev.svelte.d.ts +21 -0
- package/dist/Carousel/carousel-indicator-button.svelte +41 -0
- package/dist/Carousel/carousel-indicator-button.svelte.d.ts +21 -0
- package/dist/Carousel/carousel-indicators.svelte +33 -0
- package/dist/Carousel/carousel-indicators.svelte.d.ts +25 -0
- package/dist/Carousel/carousel-inner.svelte +30 -0
- package/dist/Carousel/carousel-inner.svelte.d.ts +22 -0
- package/dist/Carousel/carousel-item.svelte +138 -0
- package/dist/Carousel/carousel-item.svelte.d.ts +28 -0
- package/dist/Carousel/carousel.svelte +140 -0
- package/dist/Carousel/carousel.svelte.d.ts +46 -0
- package/dist/Carousel/carousel.svelte.js +551 -0
- package/dist/Carousel/composition.d.ts +9 -0
- package/dist/Carousel/composition.js +8 -0
- package/dist/Carousel/index.d.ts +1 -0
- package/dist/Carousel/index.js +1 -0
- package/dist/Carousel/types.d.ts +74 -0
- package/dist/Carousel/types.js +1 -0
- package/dist/CloseButton/close-button.svelte +32 -0
- package/dist/CloseButton/close-button.svelte.d.ts +29 -0
- package/dist/CloseButton/index.d.ts +2 -0
- package/dist/CloseButton/index.js +2 -0
- package/dist/CloseButton/types.d.ts +6 -0
- package/dist/CloseButton/types.js +1 -0
- package/dist/Col/col.svelte +133 -0
- package/dist/Col/col.svelte.d.ts +60 -0
- package/dist/Col/index.d.ts +2 -0
- package/dist/Col/index.js +2 -0
- package/dist/Col/types.d.ts +30 -0
- package/dist/Col/types.js +1 -0
- package/dist/Collapse/collapse-aria-attachment.svelte.d.ts +3 -0
- package/dist/Collapse/collapse-aria-attachment.svelte.js +32 -0
- package/dist/Collapse/collapse.svelte +63 -0
- package/dist/Collapse/collapse.svelte.d.ts +45 -0
- package/dist/Collapse/index.d.ts +3 -0
- package/dist/Collapse/index.js +3 -0
- package/dist/Collapse/transition.d.ts +5 -0
- package/dist/Collapse/transition.js +75 -0
- package/dist/Collapse/types.d.ts +18 -0
- package/dist/Collapse/types.js +1 -0
- package/dist/Container/container.svelte +46 -0
- package/dist/Container/container.svelte.d.ts +36 -0
- package/dist/Container/index.d.ts +2 -0
- package/dist/Container/index.js +2 -0
- package/dist/Container/types.d.ts +8 -0
- package/dist/Container/types.js +1 -0
- package/dist/Dropdown/composition.d.ts +8 -0
- package/dist/Dropdown/composition.js +7 -0
- package/dist/Dropdown/dropdown-divider.svelte +23 -0
- package/dist/Dropdown/dropdown-divider.svelte.d.ts +18 -0
- package/dist/Dropdown/dropdown-header.svelte +27 -0
- package/dist/Dropdown/dropdown-header.svelte.d.ts +19 -0
- package/dist/Dropdown/dropdown-item-text.svelte +26 -0
- package/dist/Dropdown/dropdown-item-text.svelte.d.ts +18 -0
- package/dist/Dropdown/dropdown-item.svelte +86 -0
- package/dist/Dropdown/dropdown-item.svelte.d.ts +24 -0
- package/dist/Dropdown/dropdown-menu.svelte +82 -0
- package/dist/Dropdown/dropdown-menu.svelte.d.ts +27 -0
- package/dist/Dropdown/dropdown-toggle.svelte +67 -0
- package/dist/Dropdown/dropdown-toggle.svelte.d.ts +24 -0
- package/dist/Dropdown/dropdown.svelte +106 -0
- package/dist/Dropdown/dropdown.svelte.d.ts +34 -0
- package/dist/Dropdown/dropdown.svelte.js +435 -0
- package/dist/Dropdown/index.d.ts +1 -0
- package/dist/Dropdown/index.js +1 -0
- package/dist/Dropdown/types.d.ts +47 -0
- package/dist/Dropdown/types.js +1 -0
- package/dist/Form/composition.d.ts +34 -0
- package/dist/Form/composition.js +33 -0
- package/dist/Form/form-check-input.svelte +92 -0
- package/dist/Form/form-check-input.svelte.d.ts +48 -0
- package/dist/Form/form-check-label.svelte +26 -0
- package/dist/Form/form-check-label.svelte.d.ts +21 -0
- package/dist/Form/form-check.svelte +55 -0
- package/dist/Form/form-check.svelte.d.ts +50 -0
- package/dist/Form/form-color-input.svelte +54 -0
- package/dist/Form/form-color-input.svelte.d.ts +30 -0
- package/dist/Form/form-date-input.svelte +64 -0
- package/dist/Form/form-date-input.svelte.d.ts +46 -0
- package/dist/Form/form-datetime-local-input.svelte +60 -0
- package/dist/Form/form-datetime-local-input.svelte.d.ts +45 -0
- package/dist/Form/form-email-input.svelte +64 -0
- package/dist/Form/form-email-input.svelte.d.ts +46 -0
- package/dist/Form/form-feedback.svelte +36 -0
- package/dist/Form/form-feedback.svelte.d.ts +26 -0
- package/dist/Form/form-file-input.svelte +43 -0
- package/dist/Form/form-file-input.svelte.d.ts +30 -0
- package/dist/Form/form-floating.svelte +44 -0
- package/dist/Form/form-floating.svelte.d.ts +38 -0
- package/dist/Form/form-helper-text.svelte +35 -0
- package/dist/Form/form-helper-text.svelte.d.ts +29 -0
- package/dist/Form/form-hidden-input.svelte +18 -0
- package/dist/Form/form-hidden-input.svelte.d.ts +16 -0
- package/dist/Form/form-image-input.svelte +30 -0
- package/dist/Form/form-image-input.svelte.d.ts +26 -0
- package/dist/Form/form-input-group-text.svelte +47 -0
- package/dist/Form/form-input-group-text.svelte.d.ts +42 -0
- package/dist/Form/form-input-group.svelte +52 -0
- package/dist/Form/form-input-group.svelte.d.ts +43 -0
- package/dist/Form/form-input-label.svelte +33 -0
- package/dist/Form/form-input-label.svelte.d.ts +28 -0
- package/dist/Form/form-month-input.svelte +63 -0
- package/dist/Form/form-month-input.svelte.d.ts +48 -0
- package/dist/Form/form-number-input.svelte +62 -0
- package/dist/Form/form-number-input.svelte.d.ts +47 -0
- package/dist/Form/form-password-input.svelte +60 -0
- package/dist/Form/form-password-input.svelte.d.ts +41 -0
- package/dist/Form/form-radio-input.svelte +47 -0
- package/dist/Form/form-radio-input.svelte.d.ts +41 -0
- package/dist/Form/form-radio-label.svelte +41 -0
- package/dist/Form/form-radio-label.svelte.d.ts +35 -0
- package/dist/Form/form-range-input.svelte +43 -0
- package/dist/Form/form-range-input.svelte.d.ts +39 -0
- package/dist/Form/form-search-input.svelte +63 -0
- package/dist/Form/form-search-input.svelte.d.ts +45 -0
- package/dist/Form/form-select.svelte +85 -0
- package/dist/Form/form-select.svelte.d.ts +59 -0
- package/dist/Form/form-switch-input.svelte +54 -0
- package/dist/Form/form-switch-input.svelte.d.ts +41 -0
- package/dist/Form/form-switch-label.svelte +25 -0
- package/dist/Form/form-switch-label.svelte.d.ts +19 -0
- package/dist/Form/form-telephone-input.svelte +129 -0
- package/dist/Form/form-telephone-input.svelte.d.ts +55 -0
- package/dist/Form/form-text-area.svelte +57 -0
- package/dist/Form/form-text-area.svelte.d.ts +38 -0
- package/dist/Form/form-text-input.svelte +55 -0
- package/dist/Form/form-text-input.svelte.d.ts +37 -0
- package/dist/Form/form-time-input.svelte +62 -0
- package/dist/Form/form-time-input.svelte.d.ts +47 -0
- package/dist/Form/form-url-input.svelte +60 -0
- package/dist/Form/form-url-input.svelte.d.ts +45 -0
- package/dist/Form/form-week-Input.svelte +62 -0
- package/dist/Form/form-week-Input.svelte.d.ts +47 -0
- package/dist/Form/form.svelte +37 -0
- package/dist/Form/form.svelte.d.ts +23 -0
- package/dist/Form/index.d.ts +1 -0
- package/dist/Form/index.js +1 -0
- package/dist/Form/types.d.ts +168 -0
- package/dist/Form/types.js +1 -0
- package/dist/ListGroup/composition.d.ts +4 -0
- package/dist/ListGroup/composition.js +3 -0
- package/dist/ListGroup/index.d.ts +1 -0
- package/dist/ListGroup/index.js +1 -0
- package/dist/ListGroup/list-group-item-action.svelte +50 -0
- package/dist/ListGroup/list-group-item-action.svelte.d.ts +23 -0
- package/dist/ListGroup/list-group-item.svelte +58 -0
- package/dist/ListGroup/list-group-item.svelte.d.ts +51 -0
- package/dist/ListGroup/list-group.svelte +83 -0
- package/dist/ListGroup/list-group.svelte.d.ts +68 -0
- package/dist/ListGroup/types.d.ts +20 -0
- package/dist/ListGroup/types.js +1 -0
- package/dist/Modal/composition.d.ts +8 -0
- package/dist/Modal/composition.js +7 -0
- package/dist/Modal/index.d.ts +1 -0
- package/dist/Modal/index.js +1 -0
- package/dist/Modal/modal-body.svelte +27 -0
- package/dist/Modal/modal-body.svelte.d.ts +19 -0
- package/dist/Modal/modal-content.svelte +35 -0
- package/dist/Modal/modal-content.svelte.d.ts +27 -0
- package/dist/Modal/modal-dialog.svelte +65 -0
- package/dist/Modal/modal-dialog.svelte.d.ts +52 -0
- package/dist/Modal/modal-footer.svelte +28 -0
- package/dist/Modal/modal-footer.svelte.d.ts +20 -0
- package/dist/Modal/modal-header.svelte +50 -0
- package/dist/Modal/modal-header.svelte.d.ts +29 -0
- package/dist/Modal/modal-title.svelte +45 -0
- package/dist/Modal/modal-title.svelte.d.ts +26 -0
- package/dist/Modal/modal.svelte +233 -0
- package/dist/Modal/modal.svelte.d.ts +52 -0
- package/dist/Modal/modal.svelte.js +86 -0
- package/dist/Modal/types.d.ts +31 -0
- package/dist/Modal/types.js +1 -0
- package/dist/Nav/composition.d.ts +4 -0
- package/dist/Nav/composition.js +3 -0
- package/dist/Nav/index.d.ts +1 -0
- package/dist/Nav/index.js +1 -0
- package/dist/Nav/nav-item.svelte +25 -0
- package/dist/Nav/nav-item.svelte.d.ts +18 -0
- package/dist/Nav/nav-link.svelte +77 -0
- package/dist/Nav/nav-link.svelte.d.ts +22 -0
- package/dist/Nav/nav.svelte +93 -0
- package/dist/Nav/nav.svelte.d.ts +56 -0
- package/dist/Nav/types.d.ts +26 -0
- package/dist/Nav/types.js +1 -0
- package/dist/Navbar/composition.d.ts +8 -0
- package/dist/Navbar/composition.js +7 -0
- package/dist/Navbar/index.d.ts +1 -0
- package/dist/Navbar/index.js +1 -0
- package/dist/Navbar/navbar-brand.svelte +55 -0
- package/dist/Navbar/navbar-brand.svelte.d.ts +48 -0
- package/dist/Navbar/navbar-collapse.svelte +76 -0
- package/dist/Navbar/navbar-collapse.svelte.d.ts +55 -0
- package/dist/Navbar/navbar-nav.svelte +66 -0
- package/dist/Navbar/navbar-nav.svelte.d.ts +53 -0
- package/dist/Navbar/navbar-text.svelte +36 -0
- package/dist/Navbar/navbar-text.svelte.d.ts +28 -0
- package/dist/Navbar/navbar-toggler-icon.svelte +34 -0
- package/dist/Navbar/navbar-toggler-icon.svelte.d.ts +28 -0
- package/dist/Navbar/navbar-toggler.svelte +75 -0
- package/dist/Navbar/navbar-toggler.svelte.d.ts +48 -0
- package/dist/Navbar/navbar.svelte +116 -0
- package/dist/Navbar/navbar.svelte.d.ts +88 -0
- package/dist/Navbar/types.d.ts +23 -0
- package/dist/Navbar/types.js +1 -0
- package/dist/Offcanvas/composition.d.ts +5 -0
- package/dist/Offcanvas/composition.js +4 -0
- package/dist/Offcanvas/index.d.ts +1 -0
- package/dist/Offcanvas/index.js +1 -0
- package/dist/Offcanvas/offcanvas-body.svelte +25 -0
- package/dist/Offcanvas/offcanvas-body.svelte.d.ts +19 -0
- package/dist/Offcanvas/offcanvas-header.svelte +39 -0
- package/dist/Offcanvas/offcanvas-header.svelte.d.ts +20 -0
- package/dist/Offcanvas/offcanvas-title.svelte +31 -0
- package/dist/Offcanvas/offcanvas-title.svelte.d.ts +25 -0
- package/dist/Offcanvas/offcanvas.svelte +220 -0
- package/dist/Offcanvas/offcanvas.svelte.d.ts +61 -0
- package/dist/Offcanvas/types.d.ts +25 -0
- package/dist/Offcanvas/types.js +1 -0
- package/dist/Pagination/composition.d.ts +4 -0
- package/dist/Pagination/composition.js +3 -0
- package/dist/Pagination/index.d.ts +1 -0
- package/dist/Pagination/index.js +1 -0
- package/dist/Pagination/pagination-item.svelte +81 -0
- package/dist/Pagination/pagination-item.svelte.d.ts +35 -0
- package/dist/Pagination/pagination-link.svelte +45 -0
- package/dist/Pagination/pagination-link.svelte.d.ts +25 -0
- package/dist/Pagination/pagination.svelte +60 -0
- package/dist/Pagination/pagination.svelte.d.ts +37 -0
- package/dist/Pagination/pagination.svelte.js +117 -0
- package/dist/Pagination/types.d.ts +19 -0
- package/dist/Pagination/types.js +1 -0
- package/dist/Placeholder/composition.d.ts +3 -0
- package/dist/Placeholder/composition.js +2 -0
- package/dist/Placeholder/index.d.ts +1 -0
- package/dist/Placeholder/index.js +1 -0
- package/dist/Placeholder/placeholder-item.svelte +53 -0
- package/dist/Placeholder/placeholder-item.svelte.d.ts +48 -0
- package/dist/Placeholder/placeholder.svelte +37 -0
- package/dist/Placeholder/placeholder.svelte.d.ts +32 -0
- package/dist/Placeholder/types.d.ts +12 -0
- package/dist/Placeholder/types.js +1 -0
- package/dist/Popover/composition.d.ts +4 -0
- package/dist/Popover/composition.js +3 -0
- package/dist/Popover/index.d.ts +1 -0
- package/dist/Popover/index.js +1 -0
- package/dist/Popover/popover-body.svelte +10 -0
- package/dist/Popover/popover-body.svelte.d.ts +3 -0
- package/dist/Popover/popover-header.svelte +11 -0
- package/dist/Popover/popover-header.svelte.d.ts +4 -0
- package/dist/Popover/popover.svelte +74 -0
- package/dist/Popover/popover.svelte.d.ts +53 -0
- package/dist/Popover/types.d.ts +20 -0
- package/dist/Popover/types.js +1 -0
- package/dist/Portal/index.d.ts +2 -0
- package/dist/Portal/index.js +2 -0
- package/dist/Portal/portal-host.svelte +5 -0
- package/dist/Portal/portal-host.svelte.d.ts +7 -0
- package/dist/Portal/portal.svelte +69 -0
- package/dist/Portal/portal.svelte.d.ts +32 -0
- package/dist/Portal/types.d.ts +6 -0
- package/dist/Portal/types.js +1 -0
- package/dist/Progress/index.d.ts +3 -0
- package/dist/Progress/index.js +3 -0
- package/dist/Progress/progress-bar.svelte +101 -0
- package/dist/Progress/progress-bar.svelte.d.ts +39 -0
- package/dist/Progress/progress-stacked.svelte +34 -0
- package/dist/Progress/progress-stacked.svelte.d.ts +24 -0
- package/dist/Progress/progress.svelte.d.ts +31 -0
- package/dist/Progress/progress.svelte.js +52 -0
- package/dist/Progress/types.d.ts +40 -0
- package/dist/Progress/types.js +1 -0
- package/dist/Row/index.d.ts +2 -0
- package/dist/Row/index.js +2 -0
- package/dist/Row/row.svelte +75 -0
- package/dist/Row/row.svelte.d.ts +46 -0
- package/dist/Row/types.d.ts +12 -0
- package/dist/Row/types.js +1 -0
- package/dist/Scrollspy/index.d.ts +2 -0
- package/dist/Scrollspy/index.js +2 -0
- package/dist/Scrollspy/scrollspy-attachment.svelte.d.ts +10 -0
- package/dist/Scrollspy/scrollspy-attachment.svelte.js +122 -0
- package/dist/Scrollspy/types.d.ts +9 -0
- package/dist/Scrollspy/types.js +1 -0
- package/dist/Spinner/index.d.ts +2 -0
- package/dist/Spinner/index.js +2 -0
- package/dist/Spinner/spinner.svelte +77 -0
- package/dist/Spinner/spinner.svelte.d.ts +70 -0
- package/dist/Spinner/types.d.ts +9 -0
- package/dist/Spinner/types.js +1 -0
- package/dist/Tab/composition.d.ts +5 -0
- package/dist/Tab/composition.js +4 -0
- package/dist/Tab/index.d.ts +1 -0
- package/dist/Tab/index.js +1 -0
- package/dist/Tab/tab-content.svelte +29 -0
- package/dist/Tab/tab-content.svelte.d.ts +23 -0
- package/dist/Tab/tab-nav-link.svelte +69 -0
- package/dist/Tab/tab-nav-link.svelte.d.ts +22 -0
- package/dist/Tab/tab-pane.svelte +72 -0
- package/dist/Tab/tab-pane.svelte.d.ts +26 -0
- package/dist/Tab/tab.svelte +63 -0
- package/dist/Tab/tab.svelte.d.ts +50 -0
- package/dist/Tab/types.d.ts +18 -0
- package/dist/Tab/types.js +1 -0
- package/dist/Table/composition.d.ts +9 -0
- package/dist/Table/composition.js +8 -0
- package/dist/Table/index.d.ts +1 -0
- package/dist/Table/index.js +1 -0
- package/dist/Table/table-body.svelte +30 -0
- package/dist/Table/table-body.svelte.d.ts +23 -0
- package/dist/Table/table-caption.svelte +20 -0
- package/dist/Table/table-caption.svelte.d.ts +15 -0
- package/dist/Table/table-data.svelte +30 -0
- package/dist/Table/table-data.svelte.d.ts +19 -0
- package/dist/Table/table-foot.svelte +31 -0
- package/dist/Table/table-foot.svelte.d.ts +24 -0
- package/dist/Table/table-head.svelte +31 -0
- package/dist/Table/table-head.svelte.d.ts +24 -0
- package/dist/Table/table-header.svelte +38 -0
- package/dist/Table/table-header.svelte.d.ts +17 -0
- package/dist/Table/table-row.svelte +34 -0
- package/dist/Table/table-row.svelte.d.ts +23 -0
- package/dist/Table/table.svelte +154 -0
- package/dist/Table/table.svelte.d.ts +98 -0
- package/dist/Table/table.svelte.js +92 -0
- package/dist/Table/types.d.ts +43 -0
- package/dist/Table/types.js +1 -0
- package/dist/Toast/composition.d.ts +5 -0
- package/dist/Toast/composition.js +4 -0
- package/dist/Toast/index.d.ts +1 -0
- package/dist/Toast/index.js +1 -0
- package/dist/Toast/toast-body.svelte +26 -0
- package/dist/Toast/toast-body.svelte.d.ts +18 -0
- package/dist/Toast/toast-container.svelte +44 -0
- package/dist/Toast/toast-container.svelte.d.ts +36 -0
- package/dist/Toast/toast-header.svelte +56 -0
- package/dist/Toast/toast-header.svelte.d.ts +36 -0
- package/dist/Toast/toast.svelte +112 -0
- package/dist/Toast/toast.svelte.d.ts +54 -0
- package/dist/Toast/toast.svelte.js +83 -0
- package/dist/Toast/types.d.ts +53 -0
- package/dist/Toast/types.js +19 -0
- package/dist/Tooltip/composition.d.ts +3 -0
- package/dist/Tooltip/composition.js +2 -0
- package/dist/Tooltip/index.d.ts +1 -0
- package/dist/Tooltip/index.js +1 -0
- package/dist/Tooltip/tooltip-inner.svelte +10 -0
- package/dist/Tooltip/tooltip-inner.svelte.d.ts +4 -0
- package/dist/Tooltip/tooltip.svelte +213 -0
- package/dist/Tooltip/tooltip.svelte.d.ts +54 -0
- package/dist/Tooltip/types.d.ts +43 -0
- package/dist/Tooltip/types.js +1 -0
- package/dist/common/context.d.ts +47 -0
- package/dist/common/context.js +70 -0
- package/dist/common/css.d.ts +71 -0
- package/dist/common/css.js +133 -0
- package/dist/common/dom.d.ts +51 -0
- package/dist/common/dom.js +98 -0
- package/dist/common/index.d.ts +6 -0
- package/dist/common/index.js +5 -0
- package/dist/common/nav-tab.svelte.d.ts +88 -0
- package/dist/common/nav-tab.svelte.js +188 -0
- package/dist/common/navbar-offcanvas.svelte.d.ts +101 -0
- package/dist/common/navbar-offcanvas.svelte.js +228 -0
- package/dist/common/noop.d.ts +4 -0
- package/dist/common/noop.js +4 -0
- package/dist/common/scrollbar.d.ts +20 -0
- package/dist/common/scrollbar.js +53 -0
- package/dist/common/types.d.ts +143 -0
- package/dist/common/types.js +40 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +33 -0
- package/package.json +105 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ## Modal.Footer
|
|
3
|
+
* Footer component for the Modal content.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```svelte
|
|
7
|
+
* <Modal.Footer>
|
|
8
|
+
* <Button colorVariant="secondary" onclick={() => setIsShown(false)}>Close</Button>
|
|
9
|
+
* <Button colorVariant="primary" onclick={() => handleSave()}>Save changes</Button>
|
|
10
|
+
* </Modal.Footer>
|
|
11
|
+
* ```
|
|
12
|
+
* ### Props
|
|
13
|
+
* - `children` (slot): Content to display inside the footer
|
|
14
|
+
* - `class` (string): Optional. Additional CSS classes
|
|
15
|
+
* - `elementRef` (HTMLElement): Optional. Reference to the footer DOM element
|
|
16
|
+
* - `id` (string): Optional. ID for the footer element
|
|
17
|
+
*/
|
|
18
|
+
declare const ModalFooter: import("svelte").Component<import("../index.js").DivElement, {}, "elementRef">;
|
|
19
|
+
type ModalFooter = ReturnType<typeof ModalFooter>;
|
|
20
|
+
export default ModalFooter;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
## Modal.Header
|
|
4
|
+
Header component for the Modal. Usually contains the Modal.Title and a close button.
|
|
5
|
+
|
|
6
|
+
@example
|
|
7
|
+
```svelte
|
|
8
|
+
<Modal.Header>
|
|
9
|
+
<Modal.Title>Modal Title</Modal.Title>
|
|
10
|
+
</Modal.Header>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
#### Without close button
|
|
14
|
+
```svelte
|
|
15
|
+
<Modal.Header isDismissible={false}>
|
|
16
|
+
<Modal.Title>Modal Title</Modal.Title>
|
|
17
|
+
</Modal.Header>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Props
|
|
21
|
+
- `children` (slot): Content to display inside the header
|
|
22
|
+
- `class` (string): Optional. Additional CSS classes
|
|
23
|
+
- `elementRef` (HTMLElement): Optional. Reference to the header DOM element
|
|
24
|
+
- `id` (string): Optional. ID for the header element
|
|
25
|
+
- `isDismissible` (boolean): Optional. Controls whether the header has a close button
|
|
26
|
+
-->
|
|
27
|
+
<script lang="ts">import { uniqueClsx } from '../common/css.js';
|
|
28
|
+
import { CloseButton } from '../index.js';
|
|
29
|
+
import { Modal } from './index.js';
|
|
30
|
+
import { initModalHeaderState, ModalHeaderState } from './modal.svelte.js';
|
|
31
|
+
// Generate a unique ID for the modal header element, in case one is not provided...
|
|
32
|
+
const uid = $props.id();
|
|
33
|
+
let { children, class: classValues, elementRef = $bindable(null), id = `modal-header-${uid}`, isDismissible = true, ...restOfProps } = $props();
|
|
34
|
+
const headerState = initModalHeaderState({
|
|
35
|
+
get isDismissible() {
|
|
36
|
+
return isDismissible;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
let classes = $derived(uniqueClsx('modal-header', classValues));
|
|
40
|
+
const handleClick = (_event) => {
|
|
41
|
+
headerState.onclick();
|
|
42
|
+
};
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<div bind:this={elementRef} class={classes} {id} {...restOfProps}>
|
|
46
|
+
{@render children?.()}
|
|
47
|
+
{#if isDismissible}
|
|
48
|
+
<CloseButton onclick={handleClick}></CloseButton>
|
|
49
|
+
{/if}
|
|
50
|
+
</div>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Modal } from './index.js';
|
|
2
|
+
/**
|
|
3
|
+
* ## Modal.Header
|
|
4
|
+
* Header component for the Modal. Usually contains the Modal.Title and a close button.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```svelte
|
|
8
|
+
* <Modal.Header>
|
|
9
|
+
* <Modal.Title>Modal Title</Modal.Title>
|
|
10
|
+
* </Modal.Header>
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* #### Without close button
|
|
14
|
+
* ```svelte
|
|
15
|
+
* <Modal.Header isDismissible={false}>
|
|
16
|
+
* <Modal.Title>Modal Title</Modal.Title>
|
|
17
|
+
* </Modal.Header>
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* ### Props
|
|
21
|
+
* - `children` (slot): Content to display inside the header
|
|
22
|
+
* - `class` (string): Optional. Additional CSS classes
|
|
23
|
+
* - `elementRef` (HTMLElement): Optional. Reference to the header DOM element
|
|
24
|
+
* - `id` (string): Optional. ID for the header element
|
|
25
|
+
* - `isDismissible` (boolean): Optional. Controls whether the header has a close button
|
|
26
|
+
*/
|
|
27
|
+
declare const ModalHeader: import("svelte").Component<Modal.HeaderProps, {}, "elementRef">;
|
|
28
|
+
type ModalHeader = ReturnType<typeof ModalHeader>;
|
|
29
|
+
export default ModalHeader;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
## Modal.Title
|
|
4
|
+
Title component for the Modal.Header.
|
|
5
|
+
|
|
6
|
+
@example
|
|
7
|
+
```svelte
|
|
8
|
+
<Modal.Title>Modal Title</Modal.Title>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
#### Custom heading level
|
|
12
|
+
```svelte
|
|
13
|
+
<Modal.Title level={1}>H1 Title</Modal.Title>
|
|
14
|
+
<Modal.Title level={2}>H2 Title</Modal.Title>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Props
|
|
18
|
+
- `children` (slot): Content to display inside the title
|
|
19
|
+
- `class` (string): Optional. Additional CSS classes
|
|
20
|
+
- `elementRef` (HTMLElement): Optional. Reference to the title DOM element
|
|
21
|
+
- `id` (string): Optional. ID for the title element
|
|
22
|
+
- `level` (number): Optional. Heading level (1-6) for the title element
|
|
23
|
+
-->
|
|
24
|
+
<script lang="ts">import { uniqueClsx } from '../common/css.js';
|
|
25
|
+
import { onDestroy } from 'svelte';
|
|
26
|
+
import { getOptionalModalRootState } from './modal.svelte.js';
|
|
27
|
+
// Generate a unique ID for the modal title element, in case one is not provided...
|
|
28
|
+
const uid = $props.id();
|
|
29
|
+
let { children, class: classValues, elementRef = $bindable(null), id = `modal-title-${uid}`, level = 5, ...restOfProps } = $props();
|
|
30
|
+
let elementType = $derived(`h${level}`);
|
|
31
|
+
let classes = $derived(uniqueClsx('modal-title', classValues));
|
|
32
|
+
const rootState = getOptionalModalRootState();
|
|
33
|
+
$effect(() => {
|
|
34
|
+
if (id)
|
|
35
|
+
rootState?.registerTitleId(id);
|
|
36
|
+
});
|
|
37
|
+
onDestroy(() => {
|
|
38
|
+
if (id)
|
|
39
|
+
rootState?.unregisterTitleId(id);
|
|
40
|
+
});
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<svelte:element this={elementType} bind:this={elementRef} class={classes} {id} {...restOfProps}>
|
|
44
|
+
{@render children?.()}
|
|
45
|
+
</svelte:element>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Modal } from './index.js';
|
|
2
|
+
/**
|
|
3
|
+
* ## Modal.Title
|
|
4
|
+
* Title component for the Modal.Header.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```svelte
|
|
8
|
+
* <Modal.Title>Modal Title</Modal.Title>
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* #### Custom heading level
|
|
12
|
+
* ```svelte
|
|
13
|
+
* <Modal.Title level={1}>H1 Title</Modal.Title>
|
|
14
|
+
* <Modal.Title level={2}>H2 Title</Modal.Title>
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* ### Props
|
|
18
|
+
* - `children` (slot): Content to display inside the title
|
|
19
|
+
* - `class` (string): Optional. Additional CSS classes
|
|
20
|
+
* - `elementRef` (HTMLElement): Optional. Reference to the title DOM element
|
|
21
|
+
* - `id` (string): Optional. ID for the title element
|
|
22
|
+
* - `level` (number): Optional. Heading level (1-6) for the title element
|
|
23
|
+
*/
|
|
24
|
+
declare const ModalTitle: import("svelte").Component<Modal.TitleProps, {}, "elementRef">;
|
|
25
|
+
type ModalTitle = ReturnType<typeof ModalTitle>;
|
|
26
|
+
export default ModalTitle;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
## Modal
|
|
4
|
+
Add dialogs to your site for lightboxes, user notifications, or completely custom content.
|
|
5
|
+
|
|
6
|
+
@example
|
|
7
|
+
```svelte
|
|
8
|
+
<Modal isShown={true}>
|
|
9
|
+
<Modal.Dialog>
|
|
10
|
+
<Modal.Content>
|
|
11
|
+
<Modal.Header>
|
|
12
|
+
<Modal.Title>Modal Title</Modal.Title>
|
|
13
|
+
</Modal.Header>
|
|
14
|
+
<Modal.Body>
|
|
15
|
+
Modal content goes here.
|
|
16
|
+
</Modal.Body>
|
|
17
|
+
<Modal.Footer>
|
|
18
|
+
<Button onclick={() => setIsShown(false)}>Close</Button>
|
|
19
|
+
</Modal.Footer>
|
|
20
|
+
</Modal.Content>
|
|
21
|
+
</Modal.Dialog>
|
|
22
|
+
</Modal>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
#### Static backdrop
|
|
26
|
+
```svelte
|
|
27
|
+
<Modal useBackdrop="static">...</Modal>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
#### Keyboard dismissible
|
|
31
|
+
```svelte
|
|
32
|
+
<Modal isKeyboardDismissible={true}>...</Modal>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Props
|
|
36
|
+
- `children` (slot): Content to display inside the modal.
|
|
37
|
+
- `class` (string): Optional. Additional CSS classes.
|
|
38
|
+
- `elementRef` (HTMLElement): Optional. Reference to the modal DOM element.
|
|
39
|
+
- `id` (string): Optional. ID for the modal element.
|
|
40
|
+
- `isFocusable` (boolean): Optional. Controls whether the modal can receive focus.
|
|
41
|
+
- `isKeyboardDismissible` (boolean): Optional. Controls whether the modal can be dismissed with the Escape key.
|
|
42
|
+
- `isShown` (boolean): Optional. Controls whether the modal is visible.
|
|
43
|
+
- `onHide` (function): Optional. Callback to invoke when the modal starts hiding.
|
|
44
|
+
- `onHidden` (function): Optional. Callback to invoke when the modal has been hidden.
|
|
45
|
+
- `onShow` (function): Optional. Callback to invoke when the modal starts showing.
|
|
46
|
+
- `onShown` (function): Optional. Callback to invoke when the modal has been shown.
|
|
47
|
+
- `useBackdrop` (boolean | 'static'): Optional. Controls whether the modal has a backdrop and if it's static (non-dismissible).
|
|
48
|
+
- `useFade` (boolean): Optional. Controls whether the modal uses a fade transition.
|
|
49
|
+
-->
|
|
50
|
+
<script lang="ts">import { disableBodyScrolling, noop, resetBodyScrolling, uniqueClsx } from '../common/index.js';
|
|
51
|
+
import { Portal } from '../index.js';
|
|
52
|
+
import { onMount, tick } from 'svelte';
|
|
53
|
+
import { fade, fly } from 'svelte/transition';
|
|
54
|
+
import { initModalRootState, ModalRootState } from './modal.svelte.js';
|
|
55
|
+
// Generate a unique ID for the modal element, in case one is not provided...
|
|
56
|
+
const uid = $props.id();
|
|
57
|
+
let { children, class: classValues, elementRef = $bindable(null), id = `modal-${uid}`, isShown = false, isKeyboardDismissible = true, isFocusable = true, onHide = noop, onHidePrevented = noop, onHidden = noop, onShow = noop, onShown = noop, useBackdrop = true, useFade = true, ...restOfProps } = $props();
|
|
58
|
+
// Initialize the root state of the modal component...
|
|
59
|
+
let bodyElement = $state(null);
|
|
60
|
+
let previouslyFocusedElement = null;
|
|
61
|
+
const unset = Symbol('unset');
|
|
62
|
+
let previousIsShown = unset;
|
|
63
|
+
let previousRootIsShown = false;
|
|
64
|
+
let previousUseBackdrop = unset;
|
|
65
|
+
const rootState = initModalRootState({
|
|
66
|
+
get isShown() {
|
|
67
|
+
return isShown;
|
|
68
|
+
},
|
|
69
|
+
get useBackdrop() {
|
|
70
|
+
return useBackdrop;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
// Derived classes for the modal component...
|
|
74
|
+
let isHidePrevented = $state(false);
|
|
75
|
+
let backDropClasses = $derived(uniqueClsx('modal-backdrop', { fade: useFade, show: rootState.isShown }));
|
|
76
|
+
let classes = $derived(uniqueClsx('modal', {
|
|
77
|
+
fade: useFade,
|
|
78
|
+
show: rootState.isShown,
|
|
79
|
+
'd-block': rootState.isShown,
|
|
80
|
+
'modal-static': isHidePrevented
|
|
81
|
+
}, classValues));
|
|
82
|
+
// Listen changes to the isShown prop and update the root state accordingly...
|
|
83
|
+
$effect(() => {
|
|
84
|
+
if (previousIsShown !== unset && previousIsShown !== isShown) {
|
|
85
|
+
if (isShown && !rootState.isShown) {
|
|
86
|
+
rootState.toggleIsShown();
|
|
87
|
+
}
|
|
88
|
+
else if (!isShown && rootState.isShown) {
|
|
89
|
+
rootState.toggleIsShown();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
previousIsShown = isShown;
|
|
93
|
+
});
|
|
94
|
+
// Listen changes to the useBackdrop prop and update the root state accordingly...
|
|
95
|
+
$effect(() => {
|
|
96
|
+
if (previousUseBackdrop !== unset && previousUseBackdrop !== useBackdrop) {
|
|
97
|
+
if (useBackdrop && !rootState.useBackdrop) {
|
|
98
|
+
rootState.useBackdrop = useBackdrop;
|
|
99
|
+
}
|
|
100
|
+
else if (!useBackdrop && rootState.useBackdrop) {
|
|
101
|
+
rootState.useBackdrop = useBackdrop;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
previousUseBackdrop = useBackdrop;
|
|
105
|
+
});
|
|
106
|
+
$effect(() => {
|
|
107
|
+
if (rootState.isShown && !previousRootIsShown) {
|
|
108
|
+
previouslyFocusedElement = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
109
|
+
focusModal();
|
|
110
|
+
}
|
|
111
|
+
else if (!rootState.isShown && previousRootIsShown) {
|
|
112
|
+
restoreFocus();
|
|
113
|
+
}
|
|
114
|
+
previousRootIsShown = rootState.isShown;
|
|
115
|
+
});
|
|
116
|
+
const handleOnShow = (event) => {
|
|
117
|
+
if (bodyElement) {
|
|
118
|
+
disableBodyScrolling(bodyElement);
|
|
119
|
+
bodyElement.classList.add('modal-open');
|
|
120
|
+
}
|
|
121
|
+
onShow(event);
|
|
122
|
+
};
|
|
123
|
+
const handleOnHidden = (event) => {
|
|
124
|
+
if (bodyElement) {
|
|
125
|
+
resetBodyScrolling(bodyElement);
|
|
126
|
+
bodyElement.classList.remove('modal-open');
|
|
127
|
+
}
|
|
128
|
+
onHidden(event);
|
|
129
|
+
};
|
|
130
|
+
async function focusModal() {
|
|
131
|
+
if (!isFocusable)
|
|
132
|
+
return;
|
|
133
|
+
await tick();
|
|
134
|
+
const focusTarget = getFocusableElements()[0] ?? elementRef;
|
|
135
|
+
focusTarget?.focus({ preventScroll: true });
|
|
136
|
+
}
|
|
137
|
+
function restoreFocus() {
|
|
138
|
+
if (previouslyFocusedElement?.isConnected) {
|
|
139
|
+
previouslyFocusedElement.focus({ preventScroll: true });
|
|
140
|
+
}
|
|
141
|
+
previouslyFocusedElement = null;
|
|
142
|
+
}
|
|
143
|
+
function getFocusableElements() {
|
|
144
|
+
if (!elementRef)
|
|
145
|
+
return [];
|
|
146
|
+
return Array.from(elementRef.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter((element) => !element.hasAttribute('disabled') && element.getAttribute('aria-hidden') !== 'true');
|
|
147
|
+
}
|
|
148
|
+
function trapFocus(event) {
|
|
149
|
+
const focusableElements = getFocusableElements();
|
|
150
|
+
const firstElement = focusableElements[0] ?? elementRef;
|
|
151
|
+
const lastElement = focusableElements[focusableElements.length - 1] ?? elementRef;
|
|
152
|
+
if (!firstElement || !lastElement)
|
|
153
|
+
return;
|
|
154
|
+
if (event.shiftKey && document.activeElement === firstElement) {
|
|
155
|
+
event.preventDefault();
|
|
156
|
+
lastElement.focus();
|
|
157
|
+
}
|
|
158
|
+
else if (!event.shiftKey && document.activeElement === lastElement) {
|
|
159
|
+
event.preventDefault();
|
|
160
|
+
firstElement.focus();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Get the body element when the component is mounted...
|
|
164
|
+
onMount(() => {
|
|
165
|
+
if (typeof window !== 'undefined') {
|
|
166
|
+
bodyElement = document.querySelector('body');
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
// Dismiss the modal when the backdrop is clicked...
|
|
170
|
+
const handleBackdropMouseDown = (event) => {
|
|
171
|
+
const target = event.target;
|
|
172
|
+
const closestModal = target.closest('.modal-dialog');
|
|
173
|
+
if (closestModal) {
|
|
174
|
+
event.stopPropagation();
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (rootState.isShown && useBackdrop === 'static') {
|
|
178
|
+
event.stopPropagation();
|
|
179
|
+
onHidePrevented(event);
|
|
180
|
+
isHidePrevented = true;
|
|
181
|
+
setTimeout(() => {
|
|
182
|
+
isHidePrevented = false;
|
|
183
|
+
}, 300);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (rootState.isShown && useBackdrop !== 'static') {
|
|
187
|
+
event.stopPropagation();
|
|
188
|
+
rootState.toggleIsShown();
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
// Handle keyboard events to dismiss modal on Escape key press
|
|
192
|
+
const handleKeydown = (event) => {
|
|
193
|
+
const keyboardEvent = event;
|
|
194
|
+
if (!rootState.isShown)
|
|
195
|
+
return;
|
|
196
|
+
if (keyboardEvent.key === 'Tab') {
|
|
197
|
+
trapFocus(keyboardEvent);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (rootState.isShown && isKeyboardDismissible && keyboardEvent.key === 'Escape') {
|
|
201
|
+
rootState.toggleIsShown();
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
</script>
|
|
205
|
+
|
|
206
|
+
<svelte:window on:keydown={handleKeydown} />
|
|
207
|
+
|
|
208
|
+
{#if rootState.isShown}
|
|
209
|
+
<div
|
|
210
|
+
aria-labelledby={rootState.titleId}
|
|
211
|
+
aria-modal={rootState.isShown}
|
|
212
|
+
bind:this={elementRef}
|
|
213
|
+
class={classes}
|
|
214
|
+
{id}
|
|
215
|
+
role="dialog"
|
|
216
|
+
tabindex={isFocusable ? -1 : undefined}
|
|
217
|
+
onmousedown={handleBackdropMouseDown}
|
|
218
|
+
onintrostart={handleOnShow}
|
|
219
|
+
onintroend={onShown}
|
|
220
|
+
onoutrostart={onHide}
|
|
221
|
+
onoutroend={handleOnHidden}
|
|
222
|
+
transition:fly={{ duration: useFade ? 300 : 0, y: '-50px', opacity: 0 }}
|
|
223
|
+
{...restOfProps}>
|
|
224
|
+
{@render children?.()}
|
|
225
|
+
</div>
|
|
226
|
+
{/if}
|
|
227
|
+
|
|
228
|
+
<Portal target="body">
|
|
229
|
+
{#if rootState.isBackdropShown}
|
|
230
|
+
<div class={backDropClasses} onmousedown={handleBackdropMouseDown} role="presentation" transition:fade={{ duration: useFade ? 150 : 0 }}>
|
|
231
|
+
</div>
|
|
232
|
+
{/if}
|
|
233
|
+
</Portal>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Modal } from './index.js';
|
|
2
|
+
/**
|
|
3
|
+
* ## Modal
|
|
4
|
+
* Add dialogs to your site for lightboxes, user notifications, or completely custom content.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```svelte
|
|
8
|
+
* <Modal isShown={true}>
|
|
9
|
+
* <Modal.Dialog>
|
|
10
|
+
* <Modal.Content>
|
|
11
|
+
* <Modal.Header>
|
|
12
|
+
* <Modal.Title>Modal Title</Modal.Title>
|
|
13
|
+
* </Modal.Header>
|
|
14
|
+
* <Modal.Body>
|
|
15
|
+
* Modal content goes here.
|
|
16
|
+
* </Modal.Body>
|
|
17
|
+
* <Modal.Footer>
|
|
18
|
+
* <Button onclick={() => setIsShown(false)}>Close</Button>
|
|
19
|
+
* </Modal.Footer>
|
|
20
|
+
* </Modal.Content>
|
|
21
|
+
* </Modal.Dialog>
|
|
22
|
+
* </Modal>
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* #### Static backdrop
|
|
26
|
+
* ```svelte
|
|
27
|
+
* <Modal useBackdrop="static">...</Modal>
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* #### Keyboard dismissible
|
|
31
|
+
* ```svelte
|
|
32
|
+
* <Modal isKeyboardDismissible={true}>...</Modal>
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* ### Props
|
|
36
|
+
* - `children` (slot): Content to display inside the modal.
|
|
37
|
+
* - `class` (string): Optional. Additional CSS classes.
|
|
38
|
+
* - `elementRef` (HTMLElement): Optional. Reference to the modal DOM element.
|
|
39
|
+
* - `id` (string): Optional. ID for the modal element.
|
|
40
|
+
* - `isFocusable` (boolean): Optional. Controls whether the modal can receive focus.
|
|
41
|
+
* - `isKeyboardDismissible` (boolean): Optional. Controls whether the modal can be dismissed with the Escape key.
|
|
42
|
+
* - `isShown` (boolean): Optional. Controls whether the modal is visible.
|
|
43
|
+
* - `onHide` (function): Optional. Callback to invoke when the modal starts hiding.
|
|
44
|
+
* - `onHidden` (function): Optional. Callback to invoke when the modal has been hidden.
|
|
45
|
+
* - `onShow` (function): Optional. Callback to invoke when the modal starts showing.
|
|
46
|
+
* - `onShown` (function): Optional. Callback to invoke when the modal has been shown.
|
|
47
|
+
* - `useBackdrop` (boolean | 'static'): Optional. Controls whether the modal has a backdrop and if it's static (non-dismissible).
|
|
48
|
+
* - `useFade` (boolean): Optional. Controls whether the modal uses a fade transition.
|
|
49
|
+
*/
|
|
50
|
+
declare const Modal: import("svelte").Component<Modal.RootProps, {}, "elementRef">;
|
|
51
|
+
type Modal = ReturnType<typeof Modal>;
|
|
52
|
+
export default Modal;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Context } from '../common/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* ModalRootState is the state of the Modal component.
|
|
4
|
+
* It is used to manage the state of the Modal and its children.
|
|
5
|
+
*/
|
|
6
|
+
export class ModalRootState {
|
|
7
|
+
props;
|
|
8
|
+
// Private
|
|
9
|
+
#isShown = $state(false);
|
|
10
|
+
#useBackdrop = $state(true);
|
|
11
|
+
titleId = $state(undefined);
|
|
12
|
+
constructor(props) {
|
|
13
|
+
this.props = props;
|
|
14
|
+
this.toggleIsShown = this.toggleIsShown.bind(this);
|
|
15
|
+
this.#isShown = this.props.isShown ?? false;
|
|
16
|
+
this.#useBackdrop = this.props.useBackdrop ?? true;
|
|
17
|
+
}
|
|
18
|
+
get isBackdropShown() {
|
|
19
|
+
return this.isShown && this.#useBackdrop !== false;
|
|
20
|
+
}
|
|
21
|
+
get isShown() {
|
|
22
|
+
return this.#isShown;
|
|
23
|
+
}
|
|
24
|
+
get useBackdrop() {
|
|
25
|
+
return this.#useBackdrop;
|
|
26
|
+
}
|
|
27
|
+
set useBackdrop(value) {
|
|
28
|
+
this.#useBackdrop = value;
|
|
29
|
+
}
|
|
30
|
+
toggleIsShown() {
|
|
31
|
+
this.#isShown = !this.#isShown;
|
|
32
|
+
}
|
|
33
|
+
registerTitleId(id) {
|
|
34
|
+
this.titleId ??= id;
|
|
35
|
+
}
|
|
36
|
+
unregisterTitleId(id) {
|
|
37
|
+
if (this.titleId === id) {
|
|
38
|
+
this.titleId = undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* ModalHeaderState is the state of the Modal.Header component.
|
|
44
|
+
* It is used to manage the state of the Modal.Header and its children.
|
|
45
|
+
*/
|
|
46
|
+
export class ModalHeaderState {
|
|
47
|
+
props;
|
|
48
|
+
root;
|
|
49
|
+
isShown = $derived.by(() => this.root.isShown);
|
|
50
|
+
isDismissible = $state(false);
|
|
51
|
+
constructor(props, root) {
|
|
52
|
+
this.props = props;
|
|
53
|
+
this.root = root;
|
|
54
|
+
this.isDismissible = this.props.isDismissible ?? false;
|
|
55
|
+
}
|
|
56
|
+
onclick() {
|
|
57
|
+
this.root.toggleIsShown();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const ModalRootContext = new Context('modal-root');
|
|
61
|
+
/**
|
|
62
|
+
* Creates a new ModalRootState and sets it in the ModalRootContext.
|
|
63
|
+
* This is used to manage the state of the Modal component and its children.
|
|
64
|
+
* @param props The props of the Modal component.
|
|
65
|
+
* @returns The created ModalRootState.
|
|
66
|
+
*/
|
|
67
|
+
export function initModalRootState(props) {
|
|
68
|
+
const rootState = new ModalRootState(props);
|
|
69
|
+
return ModalRootContext.set(rootState);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Creates a new ModalHeaderState and sets it in the ModalHeaderContext.
|
|
73
|
+
* This is used to manage the state of the Modal.Header component and its children.
|
|
74
|
+
* @param props The props of the Modal.Header component.
|
|
75
|
+
* @returns The created ModalHeaderState.
|
|
76
|
+
*/
|
|
77
|
+
export function initModalHeaderState(props) {
|
|
78
|
+
const rootState = ModalRootContext.get();
|
|
79
|
+
return new ModalHeaderState(props, rootState);
|
|
80
|
+
}
|
|
81
|
+
export function getModalRootState() {
|
|
82
|
+
return ModalRootContext.get();
|
|
83
|
+
}
|
|
84
|
+
export function getOptionalModalRootState() {
|
|
85
|
+
return ModalRootContext.getOr(undefined);
|
|
86
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { BaseBreakpoint, DivElement, HeadingElement, HeadingLevels } from '../common/types.js';
|
|
2
|
+
export type ModalBackdrop = 'static' | boolean;
|
|
3
|
+
export type ModalFullscreenBreakpoint = BaseBreakpoint | 'always';
|
|
4
|
+
export type ModalSize = 'sm' | 'lg' | 'xl';
|
|
5
|
+
export type ModalRootProps = DivElement & {
|
|
6
|
+
isFocusable?: boolean;
|
|
7
|
+
isKeyboardDismissible?: boolean;
|
|
8
|
+
isShown?: boolean;
|
|
9
|
+
onHide?: EventListener;
|
|
10
|
+
onHidePrevented?: EventListener;
|
|
11
|
+
onHidden?: EventListener;
|
|
12
|
+
onShow?: EventListener;
|
|
13
|
+
onShown?: EventListener;
|
|
14
|
+
useBackdrop?: ModalBackdrop;
|
|
15
|
+
useFade?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type ModalDialogProps = DivElement & {
|
|
18
|
+
fullscreenOnBreakpoint?: ModalFullscreenBreakpoint;
|
|
19
|
+
isScrollable?: boolean;
|
|
20
|
+
isVerticallyCentered?: boolean;
|
|
21
|
+
size?: ModalSize;
|
|
22
|
+
};
|
|
23
|
+
export type ModalContentProps = DivElement;
|
|
24
|
+
export type ModalHeaderProps = DivElement & {
|
|
25
|
+
isDismissible?: boolean;
|
|
26
|
+
};
|
|
27
|
+
export type ModalTitleProps = HeadingElement & {
|
|
28
|
+
level?: HeadingLevels;
|
|
29
|
+
};
|
|
30
|
+
export type ModalBodyProps = DivElement;
|
|
31
|
+
export type ModalFooterProps = DivElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as Item } from './nav-item.svelte';
|
|
2
|
+
export { default as Link } from './nav-link.svelte';
|
|
3
|
+
export { default as Root } from './nav.svelte';
|
|
4
|
+
export type { NavItemProps as ItemProps, NavLinkProps as LinkProps, NavRootProps as RootProps } from './types.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * as Nav from './composition.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * as Nav from './composition.js';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
## Nav.Item
|
|
4
|
+
Nav item component to wrap Nav.Link components.
|
|
5
|
+
|
|
6
|
+
@example
|
|
7
|
+
```svelte
|
|
8
|
+
<Nav.Item>
|
|
9
|
+
<Nav.Link href="#!" isActive={true}>Active</Nav.Link>
|
|
10
|
+
</Nav.Item>
|
|
11
|
+
```
|
|
12
|
+
### Props
|
|
13
|
+
- `class` (string): Optional. Additional CSS classes
|
|
14
|
+
- `elementRef` (HTMLElement): Optional. Reference to the item DOM element
|
|
15
|
+
-->
|
|
16
|
+
<script lang="ts">import { uniqueClsx } from '../common/css.js';
|
|
17
|
+
import { doesTabRootContextExists } from '../common/nav-tab.svelte.js';
|
|
18
|
+
let { children, class: classValues, elementRef = $bindable(null), role, ...restOfProps } = $props();
|
|
19
|
+
let defaultRole = $derived(doesTabRootContextExists() ? 'presentation' : role);
|
|
20
|
+
let classes = $derived(uniqueClsx('nav-item', classValues));
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<li bind:this={elementRef} class={classes} role={defaultRole} {...restOfProps}>
|
|
24
|
+
{@render children?.()}
|
|
25
|
+
</li>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Nav } from './index.js';
|
|
2
|
+
/**
|
|
3
|
+
* ## Nav.Item
|
|
4
|
+
* Nav item component to wrap Nav.Link components.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```svelte
|
|
8
|
+
* <Nav.Item>
|
|
9
|
+
* <Nav.Link href="#!" isActive={true}>Active</Nav.Link>
|
|
10
|
+
* </Nav.Item>
|
|
11
|
+
* ```
|
|
12
|
+
* ### Props
|
|
13
|
+
* - `class` (string): Optional. Additional CSS classes
|
|
14
|
+
* - `elementRef` (HTMLElement): Optional. Reference to the item DOM element
|
|
15
|
+
*/
|
|
16
|
+
declare const NavItem: import("svelte").Component<Nav.ItemProps, {}, "elementRef">;
|
|
17
|
+
type NavItem = ReturnType<typeof NavItem>;
|
|
18
|
+
export default NavItem;
|