flowbite-svelte 0.44.8 → 0.44.10
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/.env +2 -0
- package/.eslintrc.cjs +20 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +33 -0
- package/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
- package/.github/pull_request_template.md +71 -0
- package/.github/workflows/playwright-and-lint.yaml +47 -0
- package/.prettierignore +16 -0
- package/.prettierrc +9 -0
- package/CHANGELOG.md +3858 -0
- package/CONTRIBUTING.md +66 -0
- package/dist/bottom-nav/BottomNavItem.svelte +3 -1
- package/dist/bottom-nav/BottomNavItem.svelte.d.ts +2 -0
- package/dist/bottom-nav/BottomNavItem.svelte.d.ts.map +1 -1
- package/dist/carousels/Carousel.svelte +52 -153
- package/dist/carousels/Carousel.svelte.d.ts +22 -37
- package/dist/carousels/Carousel.svelte.d.ts.map +1 -1
- package/dist/carousels/ControlButton.svelte +31 -0
- package/dist/carousels/ControlButton.svelte.d.ts +29 -0
- package/dist/carousels/ControlButton.svelte.d.ts.map +1 -0
- package/dist/carousels/Controls.svelte +17 -0
- package/dist/carousels/Controls.svelte.d.ts +23 -0
- package/dist/carousels/Controls.svelte.d.ts.map +1 -0
- package/dist/carousels/Indicators.svelte +26 -0
- package/dist/carousels/Indicators.svelte.d.ts +32 -0
- package/dist/carousels/Indicators.svelte.d.ts.map +1 -0
- package/dist/carousels/Thumbnail.svelte +6 -23
- package/dist/carousels/Thumbnail.svelte.d.ts +5 -16
- package/dist/carousels/Thumbnail.svelte.d.ts.map +1 -1
- package/dist/carousels/Thumbnails.svelte +26 -0
- package/dist/carousels/Thumbnails.svelte.d.ts +33 -0
- package/dist/carousels/Thumbnails.svelte.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/tables/TableSearch.svelte +2 -2
- package/dist/tables/TableSearch.svelte.d.ts +1 -1
- package/mdsvex.config.js +18 -0
- package/package.json +18 -80
- package/playwright.config.ts +12 -0
- package/postcss.config.cjs +12 -0
- package/src/app.css +45 -0
- package/src/app.d.ts +9 -0
- package/src/app.html +28 -0
- package/src/app.postcss +55 -0
- package/src/hooks.server.js +27 -0
- package/src/lib/accordion/Accordion.svelte +61 -0
- package/src/lib/accordion/AccordionItem.svelte +120 -0
- package/src/lib/alerts/Alert.svelte +60 -0
- package/src/lib/avatar/Avatar.svelte +56 -0
- package/src/lib/avatar/Placeholder.svelte +16 -0
- package/src/lib/badges/Badge.svelte +108 -0
- package/src/lib/banner/Banner.svelte +64 -0
- package/src/lib/bottom-nav/BottomNav.svelte +76 -0
- package/src/lib/bottom-nav/BottomNavHeader.svelte +19 -0
- package/src/lib/bottom-nav/BottomNavHeaderItem.svelte +23 -0
- package/src/lib/bottom-nav/BottomNavItem.svelte +76 -0
- package/src/lib/breadcrumbs/Breadcrumb.svelte +25 -0
- package/src/lib/breadcrumbs/BreadcrumbItem.svelte +51 -0
- package/src/lib/buttongroups/ButtonGroup.svelte +22 -0
- package/src/lib/buttons/Button.svelte +100 -0
- package/src/lib/buttons/GradientButton.svelte +79 -0
- package/src/lib/cards/Card.svelte +70 -0
- package/src/lib/carousels/Carousel.svelte +166 -0
- package/src/lib/carousels/ControlButton.svelte +34 -0
- package/src/lib/carousels/Controls.svelte +21 -0
- package/src/lib/carousels/Indicators.svelte +31 -0
- package/src/lib/carousels/Thumbnail.svelte +20 -0
- package/src/lib/carousels/Thumbnails.svelte +30 -0
- package/src/lib/charts/Chart.svelte +35 -0
- package/src/lib/darkmode/DarkMode.svelte +58 -0
- package/src/lib/datepicker/Calender.svelte +3 -0
- package/src/lib/datepicker/Datepicker.svelte +66 -0
- package/src/lib/device-mockup/Android.svelte +24 -0
- package/src/lib/device-mockup/DefaultMockup.svelte +21 -0
- package/src/lib/device-mockup/DeviceMockup.svelte +235 -0
- package/src/lib/device-mockup/Ios.svelte +21 -0
- package/src/lib/device-mockup/Smartwatch.svelte +15 -0
- package/src/lib/device-mockup/Tablet.svelte +21 -0
- package/src/lib/drawer/Drawer.svelte +87 -0
- package/src/lib/dropdowns/Dropdown.svelte +81 -0
- package/src/lib/dropdowns/DropdownDivider.svelte +13 -0
- package/src/lib/dropdowns/DropdownHeader.svelte +21 -0
- package/src/lib/dropdowns/DropdownItem.svelte +47 -0
- package/src/lib/footer/Footer.svelte +18 -0
- package/src/lib/footer/FooterBrand.svelte +39 -0
- package/src/lib/footer/FooterCopyright.svelte +38 -0
- package/src/lib/footer/FooterIcon.svelte +25 -0
- package/src/lib/footer/FooterLink.svelte +26 -0
- package/src/lib/footer/FooterLinkGroup.svelte +15 -0
- package/src/lib/forms/Checkbox.svelte +70 -0
- package/src/lib/forms/Dropzone.svelte +32 -0
- package/src/lib/forms/Fileupload.svelte +21 -0
- package/src/lib/forms/FloatingLabelInput.svelte +94 -0
- package/src/lib/forms/Helper.svelte +23 -0
- package/src/lib/forms/Input.svelte +83 -0
- package/src/lib/forms/InputAddon.svelte +47 -0
- package/src/lib/forms/Label.svelte +40 -0
- package/src/lib/forms/MultiSelect.svelte +126 -0
- package/src/lib/forms/NumberInput.svelte +16 -0
- package/src/lib/forms/Radio.svelte +53 -0
- package/src/lib/forms/RadioInline.svelte +9 -0
- package/src/lib/forms/Range.svelte +24 -0
- package/src/lib/forms/Search.svelte +44 -0
- package/src/lib/forms/Select.svelte +49 -0
- package/src/lib/forms/Textarea.svelte +51 -0
- package/src/lib/forms/Toggle.svelte +56 -0
- package/src/lib/forms/VoiceSearch.svelte +57 -0
- package/src/lib/gallery/Gallery.svelte +31 -0
- package/src/lib/index.ts +225 -0
- package/src/lib/indicators/Indicator.svelte +86 -0
- package/src/lib/kbd/ArrowKeyDown.svelte +15 -0
- package/src/lib/kbd/ArrowKeyLeft.svelte +15 -0
- package/src/lib/kbd/ArrowKeyRight.svelte +15 -0
- package/src/lib/kbd/ArrowKeyUp.svelte +15 -0
- package/src/lib/kbd/Kbd.svelte +15 -0
- package/src/lib/list-group/Listgroup.svelte +45 -0
- package/src/lib/list-group/ListgroupItem.svelte +57 -0
- package/src/lib/megamenu/MegaMenu.svelte +52 -0
- package/src/lib/modals/Modal.svelte +162 -0
- package/src/lib/navbar/Menu.svelte +38 -0
- package/src/lib/navbar/NavBrand.svelte +15 -0
- package/src/lib/navbar/NavHamburger.svelte +20 -0
- package/src/lib/navbar/NavLi.svelte +37 -0
- package/src/lib/navbar/NavSidebarHamburger.svelte +20 -0
- package/src/lib/navbar/NavUl.svelte +68 -0
- package/src/lib/navbar/Navbar.svelte +42 -0
- package/src/lib/navbar/SidebarMenu.svelte +37 -0
- package/src/lib/paginations/Pagination.svelte +59 -0
- package/src/lib/paginations/PaginationItem.svelte +40 -0
- package/src/lib/popover/Popover.svelte +34 -0
- package/src/lib/progressbars/Progressbar.svelte +52 -0
- package/src/lib/ratings/AdvancedRating.svelte +45 -0
- package/src/lib/ratings/Heart.svelte +39 -0
- package/src/lib/ratings/Rating.svelte +57 -0
- package/src/lib/ratings/RatingComment.svelte +85 -0
- package/src/lib/ratings/Review.svelte +78 -0
- package/src/lib/ratings/ScoreRating.svelte +76 -0
- package/src/lib/ratings/Star.svelte +47 -0
- package/src/lib/ratings/Thumbup.svelte +39 -0
- package/src/lib/sidebars/Sidebar.svelte +40 -0
- package/src/lib/sidebars/SidebarBrand.svelte +24 -0
- package/src/lib/sidebars/SidebarCta.svelte +28 -0
- package/src/lib/sidebars/SidebarDropdownItem.svelte +26 -0
- package/src/lib/sidebars/SidebarDropdownWrapper.svelte +71 -0
- package/src/lib/sidebars/SidebarGroup.svelte +24 -0
- package/src/lib/sidebars/SidebarItem.svelte +49 -0
- package/src/lib/sidebars/SidebarWrapper.svelte +16 -0
- package/src/lib/skeleton/CardPlaceholder.svelte +48 -0
- package/src/lib/skeleton/ImagePlaceholder.svelte +31 -0
- package/src/lib/skeleton/ListPlaceholder.svelte +50 -0
- package/src/lib/skeleton/Skeleton.svelte +38 -0
- package/src/lib/skeleton/TestimonialPlaceholder.svelte +24 -0
- package/src/lib/skeleton/TextPlaceholder.svelte +60 -0
- package/src/lib/skeleton/VideoPlaceholder.svelte +33 -0
- package/src/lib/skeleton/WidgetPlaceholder.svelte +26 -0
- package/src/lib/speed-dial/SpeedDial.svelte +80 -0
- package/src/lib/speed-dial/SpeedDialButton.svelte +49 -0
- package/src/lib/spinners/Spinner.svelte +49 -0
- package/src/lib/steps/StepIndicator.svelte +75 -0
- package/src/lib/tables/Table.svelte +49 -0
- package/src/lib/tables/TableBody.svelte +14 -0
- package/src/lib/tables/TableBodyCell.svelte +22 -0
- package/src/lib/tables/TableBodyRow.svelte +50 -0
- package/src/lib/tables/TableHead.svelte +45 -0
- package/src/lib/tables/TableHeadCell.svelte +15 -0
- package/src/lib/tables/TableSearch.svelte +73 -0
- package/src/lib/tabs/TabItem.svelte +61 -0
- package/src/lib/tabs/Tabs.svelte +78 -0
- package/src/lib/timeline/Activity.svelte +16 -0
- package/src/lib/timeline/ActivityItem.svelte +59 -0
- package/src/lib/timeline/Group.svelte +27 -0
- package/src/lib/timeline/GroupItem.svelte +59 -0
- package/src/lib/timeline/Timeline.svelte +25 -0
- package/src/lib/timeline/TimelineHorizontal.svelte +17 -0
- package/src/lib/timeline/TimelineItem.svelte +116 -0
- package/src/lib/timeline/TimelineItemHorizontal.svelte +72 -0
- package/src/lib/timeline/TimelineItemVertical.svelte +44 -0
- package/src/lib/toasts/Toast.svelte +99 -0
- package/src/lib/toolbar/Toolbar.svelte +52 -0
- package/src/lib/toolbar/ToolbarButton.svelte +67 -0
- package/src/lib/toolbar/ToolbarGroup.svelte +20 -0
- package/src/lib/tooltips/Tooltip.svelte +42 -0
- package/src/lib/types.ts +163 -0
- package/src/lib/typography/A.svelte +20 -0
- package/src/lib/typography/Blockquote.svelte +51 -0
- package/src/lib/typography/DescriptionList.svelte +22 -0
- package/src/lib/typography/Heading.svelte +28 -0
- package/src/lib/typography/Hr.svelte +37 -0
- package/src/lib/typography/Img.svelte +39 -0
- package/src/lib/typography/Layout.svelte +21 -0
- package/src/lib/typography/Li.svelte +19 -0
- package/src/lib/typography/List.svelte +33 -0
- package/src/lib/typography/Mark.svelte +20 -0
- package/src/lib/typography/P.svelte +102 -0
- package/src/lib/typography/Secondary.svelte +18 -0
- package/src/lib/typography/Span.svelte +35 -0
- package/src/lib/utils/CloseButton.svelte +19 -0
- package/src/lib/utils/Frame.svelte +142 -0
- package/src/lib/utils/Popper.svelte +206 -0
- package/src/lib/utils/Wrapper.svelte +22 -0
- package/src/lib/utils/backdrop.ts +101 -0
- package/src/lib/utils/clickOutside.ts +16 -0
- package/src/lib/utils/createEventDispatcher.ts +24 -0
- package/src/lib/utils/focusTrap.js +42 -0
- package/src/lib/utils/generateId.js +5 -0
- package/src/lib/video/Video.svelte +29 -0
- package/src/routes/+error.svelte +5 -0
- package/src/routes/+layout.svelte +98 -0
- package/src/routes/+page.server.ts +18 -0
- package/src/routes/+page.svelte +55 -0
- package/src/routes/api/posts/+server.js +7 -0
- package/src/routes/component-data/A.json +10 -0
- package/src/routes/component-data/Accordion.json +12 -0
- package/src/routes/component-data/AccordionItem.json +23 -0
- package/src/routes/component-data/Activity.json +1 -0
- package/src/routes/component-data/ActivityItem.json +16 -0
- package/src/routes/component-data/AdvancedRating.json +13 -0
- package/src/routes/component-data/Alert.json +9 -0
- package/src/routes/component-data/Android.json +12 -0
- package/src/routes/component-data/ArrowKeyDown.json +1 -0
- package/src/routes/component-data/ArrowKeyLeft.json +1 -0
- package/src/routes/component-data/ArrowKeyRight.json +1 -0
- package/src/routes/component-data/ArrowKeyUp.json +1 -0
- package/src/routes/component-data/Avatar.json +15 -0
- package/src/routes/component-data/Badge.json +10 -0
- package/src/routes/component-data/Banner.json +12 -0
- package/src/routes/component-data/Blockquote.json +15 -0
- package/src/routes/component-data/BottomNav.json +13 -0
- package/src/routes/component-data/BottomNavHeader.json +9 -0
- package/src/routes/component-data/BottomNavHeaderItem.json +11 -0
- package/src/routes/component-data/BottomNavItem.json +12 -0
- package/src/routes/component-data/Breadcrumb.json +11 -0
- package/src/routes/component-data/BreadcrumbItem.json +12 -0
- package/src/routes/component-data/Button.json +14 -0
- package/src/routes/component-data/ButtonGroup.json +9 -0
- package/src/routes/component-data/Calender.json +1 -0
- package/src/routes/component-data/Card.json +13 -0
- package/src/routes/component-data/CardPlaceholder.json +9 -0
- package/src/routes/component-data/Carousel.json +11 -0
- package/src/routes/component-data/Chart.json +1 -0
- package/src/routes/component-data/Checkbox.json +14 -0
- package/src/routes/component-data/CloseButton.json +1 -0
- package/src/routes/component-data/ControlButton.json +9 -0
- package/src/routes/component-data/Controls.json +1 -0
- package/src/routes/component-data/DarkMode.json +9 -0
- package/src/routes/component-data/Datepicker.json +14 -0
- package/src/routes/component-data/DefaultMockup.json +11 -0
- package/src/routes/component-data/DescriptionList.json +10 -0
- package/src/routes/component-data/DeviceMockup.json +50 -0
- package/src/routes/component-data/Drawer.json +23 -0
- package/src/routes/component-data/Dropdown.json +13 -0
- package/src/routes/component-data/DropdownDivider.json +1 -0
- package/src/routes/component-data/DropdownHeader.json +9 -0
- package/src/routes/component-data/DropdownItem.json +10 -0
- package/src/routes/component-data/Dropzone.json +10 -0
- package/src/routes/component-data/Fileupload.json +10 -0
- package/src/routes/component-data/FloatingLabelInput.json +14 -0
- package/src/routes/component-data/Footer.json +1 -0
- package/src/routes/component-data/FooterBrand.json +15 -0
- package/src/routes/component-data/FooterCopyright.json +14 -0
- package/src/routes/component-data/FooterIcon.json +11 -0
- package/src/routes/component-data/FooterLink.json +11 -0
- package/src/routes/component-data/FooterLinkGroup.json +1 -0
- package/src/routes/component-data/Frame.json +18 -0
- package/src/routes/component-data/Gallery.json +9 -0
- package/src/routes/component-data/GradientButton.json +9 -0
- package/src/routes/component-data/Group.json +11 -0
- package/src/routes/component-data/GroupItem.json +13 -0
- package/src/routes/component-data/Heading.json +10 -0
- package/src/routes/component-data/Heart.json +14 -0
- package/src/routes/component-data/Helper.json +9 -0
- package/src/routes/component-data/Hr.json +13 -0
- package/src/routes/component-data/ImagePlaceholder.json +9 -0
- package/src/routes/component-data/Img.json +17 -0
- package/src/routes/component-data/Indicator.json +13 -0
- package/src/routes/component-data/Indicators.json +9 -0
- package/src/routes/component-data/Input.json +13 -0
- package/src/routes/component-data/InputAddon.json +1 -0
- package/src/routes/component-data/Ios.json +11 -0
- package/src/routes/component-data/Kbd.json +1 -0
- package/src/routes/component-data/Label.json +10 -0
- package/src/routes/component-data/Layout.json +10 -0
- package/src/routes/component-data/Li.json +9 -0
- package/src/routes/component-data/List.json +10 -0
- package/src/routes/component-data/ListPlaceholder.json +1 -0
- package/src/routes/component-data/Listgroup.json +10 -0
- package/src/routes/component-data/ListgroupItem.json +17 -0
- package/src/routes/component-data/Mark.json +10 -0
- package/src/routes/component-data/MegaMenu.json +11 -0
- package/src/routes/component-data/Menu.json +11 -0
- package/src/routes/component-data/Modal.json +17 -0
- package/src/routes/component-data/MultiSelect.json +11 -0
- package/src/routes/component-data/NavBrand.json +1 -0
- package/src/routes/component-data/NavHamburger.json +9 -0
- package/src/routes/component-data/NavLi.json +10 -0
- package/src/routes/component-data/NavSidebarHamburger.json +9 -0
- package/src/routes/component-data/NavUl.json +14 -0
- package/src/routes/component-data/Navbar.json +10 -0
- package/src/routes/component-data/NumberInput.json +1 -0
- package/src/routes/component-data/P.json +19 -0
- package/src/routes/component-data/Pagination.json +13 -0
- package/src/routes/component-data/PaginationItem.json +12 -0
- package/src/routes/component-data/Placeholder.json +1 -0
- package/src/routes/component-data/Popover.json +9 -0
- package/src/routes/component-data/Popper.json +17 -0
- package/src/routes/component-data/Progressbar.json +14 -0
- package/src/routes/component-data/Radio.json +13 -0
- package/src/routes/component-data/RadioInline.json +1 -0
- package/src/routes/component-data/Range.json +9 -0
- package/src/routes/component-data/Rating.json +14 -0
- package/src/routes/component-data/RatingComment.json +10 -0
- package/src/routes/component-data/Review.json +13 -0
- package/src/routes/component-data/ScoreRating.json +13 -0
- package/src/routes/component-data/Search.json +10 -0
- package/src/routes/component-data/Secondary.json +9 -0
- package/src/routes/component-data/Select.json +14 -0
- package/src/routes/component-data/Sidebar.json +11 -0
- package/src/routes/component-data/SidebarBrand.json +11 -0
- package/src/routes/component-data/SidebarCta.json +11 -0
- package/src/routes/component-data/SidebarDropdownItem.json +12 -0
- package/src/routes/component-data/SidebarDropdownWrapper.json +14 -0
- package/src/routes/component-data/SidebarGroup.json +10 -0
- package/src/routes/component-data/SidebarItem.json +12 -0
- package/src/routes/component-data/SidebarMenu.json +11 -0
- package/src/routes/component-data/SidebarWrapper.json +1 -0
- package/src/routes/component-data/Skeleton.json +9 -0
- package/src/routes/component-data/Smartwatch.json +9 -0
- package/src/routes/component-data/Span.json +16 -0
- package/src/routes/component-data/SpeedDial.json +18 -0
- package/src/routes/component-data/SpeedDialButton.json +14 -0
- package/src/routes/component-data/Spinner.json +13 -0
- package/src/routes/component-data/Star.json +14 -0
- package/src/routes/component-data/StepIndicator.json +15 -0
- package/src/routes/component-data/TabItem.json +12 -0
- package/src/routes/component-data/Table.json +14 -0
- package/src/routes/component-data/TableBody.json +1 -0
- package/src/routes/component-data/TableBodyCell.json +1 -0
- package/src/routes/component-data/TableBodyRow.json +1 -0
- package/src/routes/component-data/TableHead.json +9 -0
- package/src/routes/component-data/TableHeadCell.json +1 -0
- package/src/routes/component-data/TableSearch.json +19 -0
- package/src/routes/component-data/Tablet.json +11 -0
- package/src/routes/component-data/Tabs.json +13 -0
- package/src/routes/component-data/TestimonialPlaceholder.json +1 -0
- package/src/routes/component-data/TextPlaceholder.json +9 -0
- package/src/routes/component-data/Textarea.json +11 -0
- package/src/routes/component-data/Thumbnail.json +10 -0
- package/src/routes/component-data/Thumbnails.json +9 -0
- package/src/routes/component-data/Thumbup.json +14 -0
- package/src/routes/component-data/Timeline.json +1 -0
- package/src/routes/component-data/TimelineHorizontal.json +1 -0
- package/src/routes/component-data/TimelineItem.json +10 -0
- package/src/routes/component-data/TimelineItemHorizontal.json +19 -0
- package/src/routes/component-data/TimelineItemVertical.json +13 -0
- package/src/routes/component-data/Toast.json +15 -0
- package/src/routes/component-data/Toggle.json +12 -0
- package/src/routes/component-data/Toolbar.json +9 -0
- package/src/routes/component-data/ToolbarButton.json +12 -0
- package/src/routes/component-data/ToolbarGroup.json +1 -0
- package/src/routes/component-data/Tooltip.json +9 -0
- package/src/routes/component-data/Video.json +12 -0
- package/src/routes/component-data/VideoPlaceholder.json +9 -0
- package/src/routes/component-data/VoiceSearch.json +16 -0
- package/src/routes/component-data/WidgetPlaceholder.json +1 -0
- package/src/routes/component-data/Wrapper.json +10 -0
- package/src/routes/component-data/backdrop.json +9 -0
- package/src/routes/component-data/clickOutside.json +1 -0
- package/src/routes/component-data/createEventDispatcher.json +1 -0
- package/src/routes/component-data/focusTrap.json +1 -0
- package/src/routes/component-data/generateId.json +1 -0
- package/src/routes/component-data/index.json +1 -0
- package/src/routes/component-data/types.json +1 -0
- package/src/routes/docs/+layout.js +10 -0
- package/src/routes/docs/+layout.svelte +74 -0
- package/src/routes/docs/components/[slug]/+page.js +13 -0
- package/src/routes/docs/components/[slug]/+page.svelte +6 -0
- package/src/routes/docs/components/accordion.md +315 -0
- package/src/routes/docs/components/alert.md +342 -0
- package/src/routes/docs/components/avatar.md +215 -0
- package/src/routes/docs/components/badge.md +269 -0
- package/src/routes/docs/components/banner.md +166 -0
- package/src/routes/docs/components/bottom-navigation.md +397 -0
- package/src/routes/docs/components/breadcrumb.md +112 -0
- package/src/routes/docs/components/button-group.md +198 -0
- package/src/routes/docs/components/button.md +314 -0
- package/src/routes/docs/components/card.md +423 -0
- package/src/routes/docs/components/carousel.md +242 -0
- package/src/routes/docs/components/darkmode.md +111 -0
- package/src/routes/docs/components/device-mockups.md +212 -0
- package/src/routes/docs/components/drawer.md +638 -0
- package/src/routes/docs/components/dropdown.md +748 -0
- package/src/routes/docs/components/footer.md +268 -0
- package/src/routes/docs/components/forms.md +254 -0
- package/src/routes/docs/components/gallery.md +230 -0
- package/src/routes/docs/components/imageData/+server.js +43 -0
- package/src/routes/docs/components/indicators.md +273 -0
- package/src/routes/docs/components/kbd.md +248 -0
- package/src/routes/docs/components/list-group.md +157 -0
- package/src/routes/docs/components/mega-menu.md +298 -0
- package/src/routes/docs/components/modal.md +413 -0
- package/src/routes/docs/components/navbar.md +342 -0
- package/src/routes/docs/components/pagination.md +350 -0
- package/src/routes/docs/components/popover.md +388 -0
- package/src/routes/docs/components/progress.md +170 -0
- package/src/routes/docs/components/rating.md +326 -0
- package/src/routes/docs/components/sidebar.md +568 -0
- package/src/routes/docs/components/skeleton.md +165 -0
- package/src/routes/docs/components/speed-dial.md +523 -0
- package/src/routes/docs/components/spinner.md +117 -0
- package/src/routes/docs/components/tab.md +341 -0
- package/src/routes/docs/components/table.md +871 -0
- package/src/routes/docs/components/timeline.md +267 -0
- package/src/routes/docs/components/toast.md +362 -0
- package/src/routes/docs/components/tooltip.md +156 -0
- package/src/routes/docs/components/typography.md +158 -0
- package/src/routes/docs/components/video.md +125 -0
- package/src/routes/docs/examples/[slug]/+page.js +13 -0
- package/src/routes/docs/examples/[slug]/+page.svelte +6 -0
- package/src/routes/docs/examples/sidebar-layout.md +20 -0
- package/src/routes/docs/examples/snapshot.md +59 -0
- package/src/routes/docs/examples/testsnap.svelte +49 -0
- package/src/routes/docs/experimental/[slug]/+page.js +13 -0
- package/src/routes/docs/experimental/[slug]/+page.svelte +6 -0
- package/src/routes/docs/experimental/datepicker.md +131 -0
- package/src/routes/docs/extend/CheckCircle.svelte +3 -0
- package/src/routes/docs/extend/[slug]/+page.js +13 -0
- package/src/routes/docs/extend/[slug]/+page.svelte +6 -0
- package/src/routes/docs/extend/flowbite-svelte-blocks.md +28 -0
- package/src/routes/docs/extend/flowbite-svelte-starter.md +34 -0
- package/src/routes/docs/extend/icons.md +204 -0
- package/src/routes/docs/extend/step-indicator.md +162 -0
- package/src/routes/docs/forms/[slug]/+page.js +13 -0
- package/src/routes/docs/forms/[slug]/+page.svelte +6 -0
- package/src/routes/docs/forms/checkbox.md +329 -0
- package/src/routes/docs/forms/file-input.md +171 -0
- package/src/routes/docs/forms/floating-label.md +176 -0
- package/src/routes/docs/forms/input-field.md +398 -0
- package/src/routes/docs/forms/radio.md +303 -0
- package/src/routes/docs/forms/range.md +110 -0
- package/src/routes/docs/forms/search-input.md +133 -0
- package/src/routes/docs/forms/select.md +280 -0
- package/src/routes/docs/forms/textarea.md +142 -0
- package/src/routes/docs/forms/toggle.md +86 -0
- package/src/routes/docs/pages/[slug]/+page.js +13 -0
- package/src/routes/docs/pages/[slug]/+page.svelte +6 -0
- package/src/routes/docs/pages/colors.md +152 -0
- package/src/routes/docs/pages/compiler-speed.md +116 -0
- package/src/routes/docs/pages/customization.md +103 -0
- package/src/routes/docs/pages/how-to-contribute.md +138 -0
- package/src/routes/docs/pages/ide-support.md +19 -0
- package/src/routes/docs/pages/introduction.md +131 -0
- package/src/routes/docs/pages/license.md +22 -0
- package/src/routes/docs/pages/quickstart.md +128 -0
- package/src/routes/docs/pages/typescript.md +25 -0
- package/src/routes/docs/plugins/[slug]/+page.js +13 -0
- package/src/routes/docs/plugins/[slug]/+page.svelte +6 -0
- package/src/routes/docs/plugins/charts.md +990 -0
- package/src/routes/docs/typography/[slug]/+page.js +13 -0
- package/src/routes/docs/typography/[slug]/+page.svelte +6 -0
- package/src/routes/docs/typography/blockquote.md +214 -0
- package/src/routes/docs/typography/heading.md +270 -0
- package/src/routes/docs/typography/hr.md +115 -0
- package/src/routes/docs/typography/image.md +244 -0
- package/src/routes/docs/typography/link.md +147 -0
- package/src/routes/docs/typography/list.md +358 -0
- package/src/routes/docs/typography/paragraph.md +265 -0
- package/src/routes/docs/typography/text.md +340 -0
- package/src/routes/docs/utilities/[slug]/+page.js +13 -0
- package/src/routes/docs/utilities/[slug]/+page.svelte +6 -0
- package/src/routes/docs/utilities/close-button.md +42 -0
- package/src/routes/docs/utilities/label.md +41 -0
- package/src/routes/docs/utilities/toolbar.md +157 -0
- package/src/routes/landing/CTA.svelte +98 -0
- package/src/routes/landing/Components.svelte +42 -0
- package/src/routes/landing/Contributors.svelte +55 -0
- package/src/routes/landing/DesignFigma.svelte +39 -0
- package/src/routes/landing/Featured.svelte +33 -0
- package/src/routes/landing/GetStarted.svelte +23 -0
- package/src/routes/landing/Hero.svelte +38 -0
- package/src/routes/landing/SocialProof.svelte +80 -0
- package/src/routes/landing/utils/A.svelte +5 -0
- package/src/routes/landing/utils/H2.svelte +1 -0
- package/src/routes/landing/utils/Row.svelte +16 -0
- package/src/routes/landing/utils/Section.svelte +9 -0
- package/src/routes/layouts/component/+page.svelte +44 -0
- package/src/routes/layouts/component/Anchor.svelte +29 -0
- package/src/routes/layouts/component/code.svelte +1 -0
- package/src/routes/layouts/component/h1.svelte +0 -0
- package/src/routes/layouts/component/h2.svelte +5 -0
- package/src/routes/layouts/component/h3.svelte +5 -0
- package/src/routes/layouts/testLayout/+page.svelte +5 -0
- package/src/routes/utils/AlgoliaSearch.svelte +22 -0
- package/src/routes/utils/CompoAttributesViewer.svelte +78 -0
- package/src/routes/utils/CompoCard.svelte +36 -0
- package/src/routes/utils/CompoDescription.svelte +7 -0
- package/src/routes/utils/CopyCliboardInput.svelte +45 -0
- package/src/routes/utils/DocBadge.svelte +7 -0
- package/src/routes/utils/DocBadgeList.svelte +10 -0
- package/src/routes/utils/ExampleDarkMode.svelte +16 -0
- package/src/routes/utils/ExampleWrapper.svelte +143 -0
- package/src/routes/utils/Footer.svelte +64 -0
- package/src/routes/utils/GitHubSource.svelte +13 -0
- package/src/routes/utils/GitHubSourceList.svelte +21 -0
- package/src/routes/utils/MetaTag.svelte +42 -0
- package/src/routes/utils/Newsletter.svelte +52 -0
- package/src/routes/utils/PageHeadSection.svelte +20 -0
- package/src/routes/utils/Paging.svelte +60 -0
- package/src/routes/utils/TableDefaultRow.svelte +81 -0
- package/src/routes/utils/TableProp.svelte +41 -0
- package/src/routes/utils/Toc.svelte +55 -0
- package/src/routes/utils/ToolbarLink.svelte +12 -0
- package/src/routes/utils/data.json +48 -0
- package/src/routes/utils/icons/Angular.svelte +3 -0
- package/src/routes/utils/icons/ArrowLeft.svelte +3 -0
- package/src/routes/utils/icons/ArrowRight.svelte +3 -0
- package/src/routes/utils/icons/Check.svelte +3 -0
- package/src/routes/utils/icons/China.svelte +9 -0
- package/src/routes/utils/icons/Clipboard.svelte +3 -0
- package/src/routes/utils/icons/CoinbaseWallet.svelte +4 -0
- package/src/routes/utils/icons/Combinator.svelte +35 -0
- package/src/routes/utils/icons/Community.svelte +5 -0
- package/src/routes/utils/icons/Dev.svelte +9 -0
- package/src/routes/utils/icons/Discord.svelte +5 -0
- package/src/routes/utils/icons/Dribble.svelte +3 -0
- package/src/routes/utils/icons/Figma.svelte +14 -0
- package/src/routes/utils/icons/FlowbiteLogo.svelte +49 -0
- package/src/routes/utils/icons/Fortmatic.svelte +4 -0
- package/src/routes/utils/icons/Germany.svelte +5 -0
- package/src/routes/utils/icons/GitHub.svelte +13 -0
- package/src/routes/utils/icons/Hunt.svelte +17 -0
- package/src/routes/utils/icons/Italy.svelte +7 -0
- package/src/routes/utils/icons/Mail.svelte +4 -0
- package/src/routes/utils/icons/MetaMask.svelte +31 -0
- package/src/routes/utils/icons/Moon.svelte +3 -0
- package/src/routes/utils/icons/Npm.svelte +3 -0
- package/src/routes/utils/icons/OperaWallet.svelte +17 -0
- package/src/routes/utils/icons/Quote.svelte +3 -0
- package/src/routes/utils/icons/React.svelte +4 -0
- package/src/routes/utils/icons/Reddit.svelte +23 -0
- package/src/routes/utils/icons/Sun.svelte +7 -0
- package/src/routes/utils/icons/Usa.svelte +31 -0
- package/src/routes/utils/icons/Vue.svelte +3 -0
- package/src/routes/utils/icons/WalletConnect.svelte +18 -0
- package/src/routes/utils/icons/YouTube.svelte +3 -0
- package/src/routes/utils/icons/YouTubeFull.svelte +17 -0
- package/src/routes/utils/index.ts +146 -0
- package/src/routes/utils/mdsvex.d.ts +8 -0
- package/static/images/alert-prop.png +0 -0
- package/static/images/carousel/cosmic-timetraveler-pYyOZ8q7AII-unsplash.webp +0 -0
- package/static/images/carousel/cristina-gottardi-CSpjU6hYo_0-unsplash.webp +0 -0
- package/static/images/carousel/johannes-plenio-RwHv7LgeC7s-unsplash.webp +0 -0
- package/static/images/carousel/jonatan-pie-3l3RwQdHRHg-unsplash.webp +0 -0
- package/static/images/carousel/mark-harpur-K2s_YE031CA-unsplash.webp +0 -0
- package/static/images/carousel/pietro-de-grandi-T7K4aEPoGGk-unsplash.webp +0 -0
- package/static/images/carousel/sergey-pesterev-tMvuB9se2uQ-unsplash.webp +0 -0
- package/static/images/carousel/solotravelgoals-7kLufxYoqWk-unsplash.webp +0 -0
- package/static/images/carousel-1.svg +4 -0
- package/static/images/carousel-2.svg +4 -0
- package/static/images/carousel-3.svg +4 -0
- package/static/images/carousel-4.svg +4 -0
- package/static/images/carousel-5.svg +4 -0
- package/static/images/code-example-dark.png +0 -0
- package/static/images/code-example.png +0 -0
- package/static/images/colors.webp +0 -0
- package/static/images/components/accordion-dark.svg +40 -0
- package/static/images/components/accordion.svg +40 -0
- package/static/images/components/alert-dark.svg +11 -0
- package/static/images/components/alert.svg +11 -0
- package/static/images/components/avatar-dark.svg +117 -0
- package/static/images/components/avatar.svg +117 -0
- package/static/images/components/badge-dark.svg +5 -0
- package/static/images/components/badge.svg +5 -0
- package/static/images/components/banner-dark.svg +34 -0
- package/static/images/components/banner.svg +33 -0
- package/static/images/components/bottom-navigation-dark.svg +44 -0
- package/static/images/components/bottom-navigation.svg +43 -0
- package/static/images/components/breadcrumb-dark.svg +7 -0
- package/static/images/components/breadcrumb.svg +7 -0
- package/static/images/components/button-dark.svg +10 -0
- package/static/images/components/button-group-dark.svg +10 -0
- package/static/images/components/button-group.svg +10 -0
- package/static/images/components/button.svg +10 -0
- package/static/images/components/card-dark.svg +31 -0
- package/static/images/components/card.svg +32 -0
- package/static/images/components/carousel-dark.svg +13 -0
- package/static/images/components/carousel.svg +13 -0
- package/static/images/components/charts-dark.svg +29 -0
- package/static/images/components/charts.svg +29 -0
- package/static/images/components/darkmode-dark.svg +7 -0
- package/static/images/components/darkmode.svg +3 -0
- package/static/images/components/device-mockups-dark.svg +17 -0
- package/static/images/components/device-mockups.svg +17 -0
- package/static/images/components/drawer-dark.svg +32 -0
- package/static/images/components/drawer.svg +32 -0
- package/static/images/components/dropdown-dark.svg +35 -0
- package/static/images/components/dropdown.svg +35 -0
- package/static/images/components/footer-dark.svg +52 -0
- package/static/images/components/footer.svg +50 -0
- package/static/images/components/forms-dark.svg +64 -0
- package/static/images/components/forms.svg +64 -0
- package/static/images/components/gallery-dark.svg +14 -0
- package/static/images/components/gallery.svg +14 -0
- package/static/images/components/indicators-dark.svg +38 -0
- package/static/images/components/indicators.svg +38 -0
- package/static/images/components/jumbotron-dark.svg +13 -0
- package/static/images/components/jumbotron.svg +13 -0
- package/static/images/components/kbd-dark.svg +460 -0
- package/static/images/components/kbd.svg +462 -0
- package/static/images/components/list-group-dark.svg +58 -0
- package/static/images/components/list-group.svg +58 -0
- package/static/images/components/mega-menu-dark.svg +71 -0
- package/static/images/components/mega-menu.svg +71 -0
- package/static/images/components/modal-dark.svg +32 -0
- package/static/images/components/modal.svg +33 -0
- package/static/images/components/navbar-dark.svg +78 -0
- package/static/images/components/navbar.svg +78 -0
- package/static/images/components/pagination-dark.svg +50 -0
- package/static/images/components/pagination.svg +50 -0
- package/static/images/components/popover-dark.svg +18 -0
- package/static/images/components/popover.svg +17 -0
- package/static/images/components/progress-dark.svg +10 -0
- package/static/images/components/progress.svg +10 -0
- package/static/images/components/rating-dark.svg +29 -0
- package/static/images/components/rating.svg +29 -0
- package/static/images/components/sidebar-dark.svg +17 -0
- package/static/images/components/sidebar.svg +18 -0
- package/static/images/components/skeleton-dark.svg +10 -0
- package/static/images/components/skeleton.svg +10 -0
- package/static/images/components/speed-dial-dark.svg +69 -0
- package/static/images/components/speed-dial.svg +69 -0
- package/static/images/components/spinner-dark.svg +6 -0
- package/static/images/components/spinner.svg +6 -0
- package/static/images/components/stepper-dark.svg +11 -0
- package/static/images/components/stepper.svg +10 -0
- package/static/images/components/tab-dark.svg +10 -0
- package/static/images/components/tab.svg +10 -0
- package/static/images/components/table-dark.svg +47 -0
- package/static/images/components/table.svg +47 -0
- package/static/images/components/timeline-dark.svg +20 -0
- package/static/images/components/timeline.svg +20 -0
- package/static/images/components/toast-dark.svg +49 -0
- package/static/images/components/toast.svg +49 -0
- package/static/images/components/tooltip-dark.svg +7 -0
- package/static/images/components/tooltip.svg +7 -0
- package/static/images/components/typography-dark.svg +13 -0
- package/static/images/components/typography.svg +13 -0
- package/static/images/components/video-dark.svg +4 -0
- package/static/images/components/video.svg +4 -0
- package/static/images/eugene.jpg +0 -0
- package/static/images/examples/content-gallery-3.png +0 -0
- package/static/images/examples/image-1.jpg +0 -0
- package/static/images/examples/image-1@2x.jpg +0 -0
- package/static/images/examples/image-2@2x.jpg +0 -0
- package/static/images/examples/image-3@2x.jpg +0 -0
- package/static/images/examples/image-4@2x.jpg +0 -0
- package/static/images/experimental/datepicker-dark.svg +67 -0
- package/static/images/experimental/datepicker.svg +67 -0
- package/static/images/favicon.png +0 -0
- package/static/images/favicon.svg +49 -0
- package/static/images/figma-dark.png +0 -0
- package/static/images/figma.png +0 -0
- package/static/images/flowbite-svelte-blocks-optimized.png +0 -0
- package/static/images/flowbite-svelte-icon-logo.svg +49 -0
- package/static/images/flowbite-svelte-icon.svg +49 -0
- package/static/images/flowbite-svelte-og-image.png +0 -0
- package/static/images/flowbite-svelte.png +0 -0
- package/static/images/forms/checkbox-dark.svg +14 -0
- package/static/images/forms/checkbox.svg +14 -0
- package/static/images/forms/file-input-dark.svg +59 -0
- package/static/images/forms/file-input.svg +46 -0
- package/static/images/forms/floating-label-dark.svg +11 -0
- package/static/images/forms/floating-label.svg +11 -0
- package/static/images/forms/input-field-dark.svg +65 -0
- package/static/images/forms/input-field.svg +66 -0
- package/static/images/forms/radio-dark.svg +14 -0
- package/static/images/forms/radio.svg +12 -0
- package/static/images/forms/range-dark.svg +38 -0
- package/static/images/forms/range.svg +38 -0
- package/static/images/forms/search-input-dark.svg +82 -0
- package/static/images/forms/search-input.svg +82 -0
- package/static/images/forms/select-dark.svg +64 -0
- package/static/images/forms/select.svg +64 -0
- package/static/images/forms/textarea-dark.svg +16 -0
- package/static/images/forms/textarea.svg +16 -0
- package/static/images/forms/toggle-dark.svg +12 -0
- package/static/images/forms/toggle.svg +12 -0
- package/static/images/gallery-dark.png +0 -0
- package/static/images/gallery.png +0 -0
- package/static/images/graphs-dark.png +0 -0
- package/static/images/graphs.png +0 -0
- package/static/images/image-1.jpeg +0 -0
- package/static/images/image-1.png +0 -0
- package/static/images/image-1.webp +0 -0
- package/static/images/image-2.jpeg +0 -0
- package/static/images/image-2.png +0 -0
- package/static/images/image-2.webp +0 -0
- package/static/images/image-4.jpeg +0 -0
- package/static/images/image-4.png +0 -0
- package/static/images/image-4.webp +0 -0
- package/static/images/italy.png +0 -0
- package/static/images/nature-1.jpeg +0 -0
- package/static/images/office1.webp +0 -0
- package/static/images/product-1.webp +0 -0
- package/static/images/profile-picture-1.webp +0 -0
- package/static/images/profile-picture-2.webp +0 -0
- package/static/images/profile-picture-3.webp +0 -0
- package/static/images/profile-picture-4.webp +0 -0
- package/static/images/profile-picture-5.webp +0 -0
- package/static/images/sveltekit-sidebar-layout-optimized.png +0 -0
- package/static/images/tailwind-code-dark.png +0 -0
- package/static/images/tailwind-code.png +0 -0
- package/static/images/typography/blockquote-dark.svg +8 -0
- package/static/images/typography/blockquote.svg +8 -0
- package/static/images/typography/heading-dark.svg +5 -0
- package/static/images/typography/heading.svg +5 -0
- package/static/images/typography/hr-dark.svg +7 -0
- package/static/images/typography/hr.svg +7 -0
- package/static/images/typography/image-dark.svg +6 -0
- package/static/images/typography/image.svg +6 -0
- package/static/images/typography/link-dark.svg +4 -0
- package/static/images/typography/link.svg +4 -0
- package/static/images/typography/list-dark.svg +26 -0
- package/static/images/typography/list.svg +26 -0
- package/static/images/typography/paragraph-dark.svg +13 -0
- package/static/images/typography/paragraph.svg +13 -0
- package/static/images/typography/text-dark.svg +11 -0
- package/static/images/typography/text.svg +11 -0
- package/static/site.webmanifest +12 -0
- package/static/styles/docs.css +537 -0
- package/static/videos/compo-doc.gif +0 -0
- package/static/videos/flowbite.mp4 +0 -0
- package/svelte.config.js +28 -0
- package/tailwind.config.cjs +89 -0
- package/tests/components.spec.ts +199 -0
- package/tests/examples.spec.ts +11 -0
- package/tests/extend.spec.ts +19 -0
- package/tests/forms.spec.ts +62 -0
- package/tests/page.spec.ts +46 -0
- package/tests/plugins.spec.ts +7 -0
- package/tests/redirect.spec.ts +175 -0
- package/tests/typography.spec.ts +52 -0
- package/tests/utilities.spec.ts +22 -0
- package/tsconfig.json +19 -0
- package/vite.config.ts +22 -0
- package/vite.config.ts.timestamp-1692816833518-844de2c3e2008.mjs +22 -0
- package/dist/carousels/Caption.svelte +0 -17
- package/dist/carousels/Caption.svelte.d.ts +0 -26
- package/dist/carousels/Caption.svelte.d.ts.map +0 -1
- package/dist/carousels/CarouselTransition.svelte +0 -174
- package/dist/carousels/CarouselTransition.svelte.d.ts +0 -68
- package/dist/carousels/CarouselTransition.svelte.d.ts.map +0 -1
- package/dist/carousels/Indicator.svelte +0 -20
- package/dist/carousels/Indicator.svelte.d.ts +0 -28
- package/dist/carousels/Indicator.svelte.d.ts.map +0 -1
- package/dist/carousels/Slide.svelte +0 -23
- package/dist/carousels/Slide.svelte.d.ts +0 -30
- package/dist/carousels/Slide.svelte.d.ts.map +0 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
import { setContext } from 'svelte';
|
|
4
|
+
|
|
5
|
+
import type { Action } from 'svelte/action';
|
|
6
|
+
import type { TransitionConfig } from 'svelte/transition';
|
|
7
|
+
import type { HTMLAnchorAttributes } from 'svelte/elements';
|
|
8
|
+
|
|
9
|
+
const null_transition = () => ({ duration: 0 });
|
|
10
|
+
const noop = () => {};
|
|
11
|
+
|
|
12
|
+
type TransitionFunc = (node: HTMLElement, params: any) => TransitionConfig;
|
|
13
|
+
type FrameColor = keyof typeof bgColors;
|
|
14
|
+
|
|
15
|
+
interface $$Props extends HTMLAnchorAttributes {
|
|
16
|
+
tag?: string;
|
|
17
|
+
color?: FrameColor;
|
|
18
|
+
rounded?: boolean;
|
|
19
|
+
border?: boolean;
|
|
20
|
+
shadow?: boolean;
|
|
21
|
+
transition?: TransitionFunc;
|
|
22
|
+
params?: object;
|
|
23
|
+
node?: HTMLElement | undefined;
|
|
24
|
+
use?: Action<HTMLElement, any>;
|
|
25
|
+
options?: object;
|
|
26
|
+
class?: string;
|
|
27
|
+
role?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
setContext('background', true);
|
|
31
|
+
|
|
32
|
+
export let tag: string = $$restProps.href ? 'a' : 'div';
|
|
33
|
+
export let color: FrameColor = 'default';
|
|
34
|
+
export let rounded: boolean = false;
|
|
35
|
+
export let border: boolean = false;
|
|
36
|
+
export let shadow: boolean = false;
|
|
37
|
+
|
|
38
|
+
// Export a prop through which you can set a desired svelte transition
|
|
39
|
+
export let transition: TransitionFunc = null_transition;
|
|
40
|
+
// Pass in extra transition params
|
|
41
|
+
export let params: object = {};
|
|
42
|
+
|
|
43
|
+
// For components development
|
|
44
|
+
export let node: HTMLElement | undefined = undefined;
|
|
45
|
+
// Action function and its params
|
|
46
|
+
export let use: Action<HTMLElement, any> = noop;
|
|
47
|
+
export let options = {};
|
|
48
|
+
|
|
49
|
+
export let role: string | undefined = undefined;
|
|
50
|
+
|
|
51
|
+
$: color = color ?? 'default'; // for cases when undefined
|
|
52
|
+
$: setContext('color', color);
|
|
53
|
+
|
|
54
|
+
// your script goes here
|
|
55
|
+
const bgColors = {
|
|
56
|
+
gray: 'bg-gray-50 dark:bg-gray-800',
|
|
57
|
+
red: 'bg-red-50 dark:bg-gray-800',
|
|
58
|
+
yellow: 'bg-yellow-50 dark:bg-gray-800 ',
|
|
59
|
+
green: 'bg-green-50 dark:bg-gray-800 ',
|
|
60
|
+
indigo: 'bg-indigo-50 dark:bg-gray-800 ',
|
|
61
|
+
purple: 'bg-purple-50 dark:bg-gray-800 ',
|
|
62
|
+
pink: 'bg-pink-50 dark:bg-gray-800 ',
|
|
63
|
+
blue: 'bg-blue-50 dark:bg-gray-800 ',
|
|
64
|
+
light: 'bg-gray-50 dark:bg-gray-700',
|
|
65
|
+
dark: 'bg-gray-50 dark:bg-gray-800',
|
|
66
|
+
default: 'bg-white dark:bg-gray-800',
|
|
67
|
+
dropdown: 'bg-white dark:bg-gray-700',
|
|
68
|
+
navbar: 'bg-white dark:bg-gray-900',
|
|
69
|
+
navbarUl: 'bg-gray-50 dark:bg-gray-800',
|
|
70
|
+
form: 'bg-gray-50 dark:bg-gray-700',
|
|
71
|
+
primary: 'bg-primary-50 dark:bg-gray-800 ',
|
|
72
|
+
orange: 'bg-orange-50 dark:bg-orange-800',
|
|
73
|
+
none: ''
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const textColors = {
|
|
77
|
+
gray: 'text-gray-800 dark:text-gray-300',
|
|
78
|
+
red: 'text-red-800 dark:text-red-400',
|
|
79
|
+
yellow: 'text-yellow-800 dark:text-yellow-300',
|
|
80
|
+
green: 'text-green-800 dark:text-green-400',
|
|
81
|
+
indigo: 'text-indigo-800 dark:text-indigo-400',
|
|
82
|
+
purple: 'text-purple-800 dark:text-purple-400',
|
|
83
|
+
pink: 'text-pink-800 dark:text-pink-400',
|
|
84
|
+
blue: 'text-blue-800 dark:text-blue-400',
|
|
85
|
+
light: 'text-gray-700 dark:text-gray-300',
|
|
86
|
+
dark: 'text-gray-700 dark:text-gray-300',
|
|
87
|
+
default: 'text-gray-500 dark:text-gray-400',
|
|
88
|
+
dropdown: 'text-gray-700 dark:text-gray-200',
|
|
89
|
+
navbar: 'text-gray-700 dark:text-gray-200',
|
|
90
|
+
navbarUl: 'text-gray-700 dark:text-gray-400',
|
|
91
|
+
form: 'text-gray-900 dark:text-white',
|
|
92
|
+
primary: 'text-primary-800 dark:text-primary-400',
|
|
93
|
+
orange: 'text-orange-800 dark:text-orange-400',
|
|
94
|
+
none: ''
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const borderColors = {
|
|
98
|
+
gray: 'border-gray-300 dark:border-gray-800 divide-gray-300 dark:divide-gray-800',
|
|
99
|
+
red: 'border-red-300 dark:border-red-800 divide-red-300 dark:divide-red-800',
|
|
100
|
+
yellow: 'border-yellow-300 dark:border-yellow-800 divide-yellow-300 dark:divide-yellow-800',
|
|
101
|
+
green: 'border-green-300 dark:border-green-800 divide-green-300 dark:divide-green-800',
|
|
102
|
+
indigo: 'border-indigo-300 dark:border-indigo-800 divide-indigo-300 dark:divide-indigo-800',
|
|
103
|
+
purple: 'border-purple-300 dark:border-purple-800 divide-purple-300 dark:divide-purple-800',
|
|
104
|
+
pink: 'border-pink-300 dark:border-pink-800 divide-pink-300 dark:divide-pink-800',
|
|
105
|
+
blue: 'border-blue-300 dark:border-blue-800 divide-blue-300 dark:divide-blue-800',
|
|
106
|
+
light: 'border-gray-500 divide-gray-500',
|
|
107
|
+
dark: 'border-gray-500 divide-gray-500',
|
|
108
|
+
default: 'border-gray-200 dark:border-gray-700 divide-gray-200 dark:divide-gray-700',
|
|
109
|
+
dropdown: 'border-gray-100 dark:border-gray-600 divide-gray-100 dark:divide-gray-600',
|
|
110
|
+
navbar: 'border-gray-100 dark:border-gray-700 divide-gray-100 dark:divide-gray-700',
|
|
111
|
+
navbarUl: 'border-gray-100 dark:border-gray-700 divide-gray-100 dark:divide-gray-700',
|
|
112
|
+
form: 'border-gray-300 dark:border-gray-700 divide-gray-300 dark:divide-gray-700',
|
|
113
|
+
primary: 'border-primary-500 dark:border-primary-200 divide-primary-500 dark:divide-primary-200 ',
|
|
114
|
+
orange: 'border-orange-300 dark:border-orange-800 divide-orange-300 dark:divide-orange-800',
|
|
115
|
+
none: ''
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
let divClass: string;
|
|
119
|
+
|
|
120
|
+
$: divClass = twMerge(bgColors[color], textColors[color], rounded && 'rounded-lg', border && 'border', borderColors[color], shadow && 'shadow-md', $$props.class);
|
|
121
|
+
</script>
|
|
122
|
+
|
|
123
|
+
<svelte:element this={tag} use:use={options} bind:this={node} transition:transition={params} {...$$restProps} class={divClass} on:click on:mouseenter on:mouseleave on:focusin on:focusout {role}>
|
|
124
|
+
<slot />
|
|
125
|
+
</svelte:element>
|
|
126
|
+
|
|
127
|
+
<!--
|
|
128
|
+
@component
|
|
129
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
130
|
+
## Props
|
|
131
|
+
@prop export let tag: string = $$restProps.href ? 'a' : 'div';
|
|
132
|
+
@prop export let color: FrameColor = 'default';
|
|
133
|
+
@prop export let rounded: boolean = false;
|
|
134
|
+
@prop export let border: boolean = false;
|
|
135
|
+
@prop export let shadow: boolean = false;
|
|
136
|
+
@prop export let transition: TransitionFunc = null_transition;
|
|
137
|
+
@prop export let params: object = {};
|
|
138
|
+
@prop export let node: HTMLElement | undefined = undefined;
|
|
139
|
+
@prop export let use: Action<HTMLElement, any> = noop;
|
|
140
|
+
@prop export let options = {};
|
|
141
|
+
@prop export let role: string | undefined = undefined;
|
|
142
|
+
-->
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ComputePositionReturn, Middleware, Placement, Side } from '@floating-ui/dom';
|
|
3
|
+
import * as dom from '@floating-ui/dom';
|
|
4
|
+
import { onMount, type ComponentProps } from 'svelte';
|
|
5
|
+
import { twJoin } from 'tailwind-merge';
|
|
6
|
+
import Frame from './Frame.svelte';
|
|
7
|
+
import createEventDispatcher from './createEventDispatcher';
|
|
8
|
+
|
|
9
|
+
// propagate props type from underlying Frame
|
|
10
|
+
interface $$Props extends ComponentProps<Frame> {
|
|
11
|
+
activeContent?: boolean;
|
|
12
|
+
arrow?: boolean;
|
|
13
|
+
offset?: number;
|
|
14
|
+
placement?: Placement;
|
|
15
|
+
trigger?: 'hover' | 'click';
|
|
16
|
+
triggeredBy?: string;
|
|
17
|
+
reference?: string;
|
|
18
|
+
strategy?: 'absolute' | 'fixed';
|
|
19
|
+
open?: boolean;
|
|
20
|
+
yOnly?: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export let activeContent: boolean = false;
|
|
24
|
+
export let arrow: boolean = true;
|
|
25
|
+
export let offset: number = 8;
|
|
26
|
+
export let placement: Placement = 'top';
|
|
27
|
+
export let trigger: 'hover' | 'click' = 'hover';
|
|
28
|
+
export let triggeredBy: string | undefined = undefined;
|
|
29
|
+
export let reference: string | undefined = undefined;
|
|
30
|
+
export let strategy: 'absolute' | 'fixed' = 'absolute';
|
|
31
|
+
export let open: boolean = false;
|
|
32
|
+
export let yOnly: boolean = false;
|
|
33
|
+
|
|
34
|
+
const dispatch = createEventDispatcher();
|
|
35
|
+
|
|
36
|
+
let clickable: boolean;
|
|
37
|
+
$: clickable = trigger === 'click';
|
|
38
|
+
|
|
39
|
+
$: dispatch('show', referenceEl, open);
|
|
40
|
+
$: placement && (referenceEl = referenceEl);
|
|
41
|
+
|
|
42
|
+
let referenceEl: Element;
|
|
43
|
+
let floatingEl: HTMLElement;
|
|
44
|
+
let arrowEl: HTMLElement | null;
|
|
45
|
+
let contentEl: HTMLElement;
|
|
46
|
+
let triggerEls: HTMLElement[] = [];
|
|
47
|
+
|
|
48
|
+
let _blocked: boolean = false; // management of the race condition between focusin and click events
|
|
49
|
+
const block = () => ((_blocked = true), setTimeout(() => (_blocked = false), 250));
|
|
50
|
+
|
|
51
|
+
const showHandler = (ev: Event) => {
|
|
52
|
+
if (referenceEl === undefined) console.error('trigger undefined');
|
|
53
|
+
if (!reference && triggerEls.includes(ev.target as HTMLElement) && referenceEl !== ev.target) {
|
|
54
|
+
referenceEl = ev.target as HTMLElement;
|
|
55
|
+
block();
|
|
56
|
+
}
|
|
57
|
+
if (clickable && ev.type === 'focusin' && !open) block();
|
|
58
|
+
open = clickable && ev.type === 'click' && !_blocked ? !open : true;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const hasHover = (el: Element) => el.matches(':hover');
|
|
62
|
+
const hasFocus = (el: Element) => el.contains(document.activeElement);
|
|
63
|
+
const px = (n: number | undefined) => (n != null ? `${n}px` : '');
|
|
64
|
+
|
|
65
|
+
const hideHandler = (ev: Event) => {
|
|
66
|
+
if (activeContent) {
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
const elements = [referenceEl, floatingEl, ...triggerEls].filter(Boolean);
|
|
69
|
+
if (ev.type === 'mouseleave' && elements.some(hasHover)) return;
|
|
70
|
+
if (ev.type === 'focusout' && elements.some(hasFocus)) return;
|
|
71
|
+
open = false;
|
|
72
|
+
}, 100);
|
|
73
|
+
} else open = false;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
let arrowSide: Side;
|
|
77
|
+
const oppositeSideMap: Record<Side, Side> = {
|
|
78
|
+
left: 'right',
|
|
79
|
+
right: 'left',
|
|
80
|
+
bottom: 'top',
|
|
81
|
+
top: 'bottom'
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
let middleware: (Middleware | null)[];
|
|
85
|
+
$: middleware = [dom.flip(), dom.shift(), dom.offset(+offset), arrowEl && dom.arrow({ element: arrowEl, padding: 10 })];
|
|
86
|
+
|
|
87
|
+
function updatePosition() {
|
|
88
|
+
dom.computePosition(referenceEl, floatingEl, { placement, strategy, middleware }).then(({ x, y, middlewareData, placement, strategy }: ComputePositionReturn) => {
|
|
89
|
+
floatingEl.style.position = strategy;
|
|
90
|
+
floatingEl.style.left = yOnly ? '0' : px(x);
|
|
91
|
+
floatingEl.style.top = px(y);
|
|
92
|
+
|
|
93
|
+
if (middlewareData.arrow && arrowEl instanceof HTMLDivElement) {
|
|
94
|
+
arrowEl.style.left = px(middlewareData.arrow.x);
|
|
95
|
+
arrowEl.style.top = px(middlewareData.arrow.y);
|
|
96
|
+
|
|
97
|
+
arrowSide = oppositeSideMap[placement.split('-')[0] as Side];
|
|
98
|
+
arrowEl.style[arrowSide] = px(-arrowEl.offsetWidth / 2 - ($$props.border ? 1 : 0));
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function init(node: HTMLElement, _referenceEl: HTMLElement) {
|
|
104
|
+
floatingEl = node;
|
|
105
|
+
let cleanup = dom.autoUpdate(_referenceEl, floatingEl, updatePosition);
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
update(_referenceEl: HTMLElement) {
|
|
109
|
+
cleanup();
|
|
110
|
+
cleanup = dom.autoUpdate(_referenceEl, floatingEl, updatePosition);
|
|
111
|
+
},
|
|
112
|
+
destroy() {
|
|
113
|
+
cleanup();
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
onMount(() => {
|
|
119
|
+
const events: [string, any, boolean][] = [
|
|
120
|
+
['focusin', showHandler, true],
|
|
121
|
+
['focusout', hideHandler, true],
|
|
122
|
+
['click', showHandler, clickable],
|
|
123
|
+
['mouseenter', showHandler, !clickable],
|
|
124
|
+
['mouseleave', hideHandler, !clickable]
|
|
125
|
+
];
|
|
126
|
+
|
|
127
|
+
if (triggeredBy) triggerEls = [...document.querySelectorAll<HTMLElement>(triggeredBy)];
|
|
128
|
+
else triggerEls = contentEl.previousElementSibling ? [contentEl.previousElementSibling as HTMLElement] : [];
|
|
129
|
+
|
|
130
|
+
if (!triggerEls.length) {
|
|
131
|
+
console.error('No triggers found.');
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
triggerEls.forEach((element: HTMLElement) => {
|
|
135
|
+
if (element.tabIndex < 0) element.tabIndex = 0; // trigger must be focusable
|
|
136
|
+
for (const [name, handler, cond] of events) if (cond) element.addEventListener(name, handler);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
if (reference) {
|
|
140
|
+
referenceEl = document.querySelector(reference) ?? document.body;
|
|
141
|
+
if (referenceEl === document.body) {
|
|
142
|
+
console.error(`Popup reference not found: '${reference}'`);
|
|
143
|
+
} else {
|
|
144
|
+
referenceEl.addEventListener('focusout', hideHandler);
|
|
145
|
+
if (!clickable) referenceEl.addEventListener('mouseleave', hideHandler);
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
referenceEl = triggerEls[0];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return () => {
|
|
152
|
+
triggerEls.forEach((element: HTMLElement) => {
|
|
153
|
+
if (element) {
|
|
154
|
+
for (const [name, handler] of events) element.removeEventListener(name, handler);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
if (referenceEl) {
|
|
158
|
+
referenceEl.addEventListener('focusout', hideHandler);
|
|
159
|
+
referenceEl.addEventListener('mouseleave', hideHandler);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
function optional(pred: boolean, func: (ev: Event) => void) {
|
|
165
|
+
return pred ? func : () => undefined;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
let arrowClass: string;
|
|
169
|
+
$: arrowClass = twJoin('absolute pointer-events-none block w-[10px] h-[10px] rotate-45 bg-inherit border-inherit', $$props.border && arrowSide === 'bottom' && 'border-b border-r', $$props.border && arrowSide === 'top' && 'border-t border-l ', $$props.border && arrowSide === 'right' && 'border-t border-r ', $$props.border && arrowSide === 'left' && 'border-b border-l ');
|
|
170
|
+
|
|
171
|
+
function initArrow(node: HTMLElement) {
|
|
172
|
+
arrowEl = node;
|
|
173
|
+
return {
|
|
174
|
+
destroy() {
|
|
175
|
+
arrowEl = null;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
</script>
|
|
180
|
+
|
|
181
|
+
{#if !referenceEl}
|
|
182
|
+
<div bind:this={contentEl} />
|
|
183
|
+
{/if}
|
|
184
|
+
|
|
185
|
+
{#if open && referenceEl}
|
|
186
|
+
<Frame use={init} options={referenceEl} role="tooltip" tabindex={activeContent ? -1 : undefined} on:focusin={optional(activeContent, showHandler)} on:focusout={optional(activeContent, hideHandler)} on:mouseenter={optional(activeContent && !clickable, showHandler)} on:mouseleave={optional(activeContent && !clickable, hideHandler)} {...$$restProps}>
|
|
187
|
+
<slot />
|
|
188
|
+
{#if arrow}<div use:initArrow class={arrowClass} />{/if}
|
|
189
|
+
</Frame>
|
|
190
|
+
{/if}
|
|
191
|
+
|
|
192
|
+
<!--
|
|
193
|
+
@component
|
|
194
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
195
|
+
## Props
|
|
196
|
+
@prop export let activeContent: boolean = false;
|
|
197
|
+
@prop export let arrow: boolean = true;
|
|
198
|
+
@prop export let offset: number = 8;
|
|
199
|
+
@prop export let placement: Placement = 'top';
|
|
200
|
+
@prop export let trigger: 'hover' | 'click' = 'hover';
|
|
201
|
+
@prop export let triggeredBy: string | undefined = undefined;
|
|
202
|
+
@prop export let reference: string | undefined = undefined;
|
|
203
|
+
@prop export let strategy: 'absolute' | 'fixed' = 'absolute';
|
|
204
|
+
@prop export let open: boolean = false;
|
|
205
|
+
@prop export let yOnly: boolean = false;
|
|
206
|
+
-->
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Action } from 'svelte/action';
|
|
3
|
+
|
|
4
|
+
export let tag: string = 'div';
|
|
5
|
+
export let show: boolean;
|
|
6
|
+
export let use: Action<HTMLElement, any> = () => {};
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
{#if show}
|
|
10
|
+
<svelte:element this={tag} use:use {...$$restProps}><slot /></svelte:element>
|
|
11
|
+
{:else}
|
|
12
|
+
<slot />
|
|
13
|
+
{/if}
|
|
14
|
+
|
|
15
|
+
<!--
|
|
16
|
+
@component
|
|
17
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
18
|
+
## Props
|
|
19
|
+
@prop export let tag: string = 'div';
|
|
20
|
+
@prop export let show: boolean;
|
|
21
|
+
@prop export let use: Action<HTMLElement, any> = () => {};
|
|
22
|
+
-->
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { createEventDispatcher } from 'svelte';
|
|
2
|
+
export let open = false;
|
|
3
|
+
|
|
4
|
+
const backdropClasses = 'bg-gray-900 bg-opacity-50 dark:bg-opacity-80 fixed inset-0 z-40';
|
|
5
|
+
export let placement: string;
|
|
6
|
+
// const placement:
|
|
7
|
+
// | 'top-left'
|
|
8
|
+
// | 'top-center'
|
|
9
|
+
// | 'top-right'
|
|
10
|
+
// | 'center-left'
|
|
11
|
+
// | 'center'
|
|
12
|
+
// | 'center-right'
|
|
13
|
+
// | 'bottom-left'
|
|
14
|
+
// | 'bottom-center'
|
|
15
|
+
// | 'bottom-right'='center';
|
|
16
|
+
|
|
17
|
+
export const init = (node: HTMLElement, _open: boolean) => {
|
|
18
|
+
getPlacementClasses().map((c) => node.classList.add(c));
|
|
19
|
+
_open && createBackdrop(node);
|
|
20
|
+
|
|
21
|
+
return {
|
|
22
|
+
update(_open: boolean) {
|
|
23
|
+
allPlacementClasses.map((c) => node.classList.remove(c));
|
|
24
|
+
getPlacementClasses().map((c) => node.classList.add(c));
|
|
25
|
+
|
|
26
|
+
_open ? createBackdrop(node) : destroyBackdrop(node);
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
destroy() {
|
|
30
|
+
destroyBackdrop(node);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const getPlacementClasses = () => {
|
|
36
|
+
switch (placement) {
|
|
37
|
+
// top
|
|
38
|
+
case 'top-left':
|
|
39
|
+
return ['justify-start', 'items-start'];
|
|
40
|
+
case 'top-center':
|
|
41
|
+
return ['justify-center', 'items-start'];
|
|
42
|
+
case 'top-right':
|
|
43
|
+
return ['justify-end', 'items-start'];
|
|
44
|
+
|
|
45
|
+
// center
|
|
46
|
+
case 'center-left':
|
|
47
|
+
return ['justify-start', 'items-center'];
|
|
48
|
+
case 'center':
|
|
49
|
+
return ['justify-center', 'items-center'];
|
|
50
|
+
case 'center-right':
|
|
51
|
+
return ['justify-end', 'items-center'];
|
|
52
|
+
|
|
53
|
+
// bottom
|
|
54
|
+
case 'bottom-left':
|
|
55
|
+
return ['justify-start', 'items-end'];
|
|
56
|
+
case 'bottom-center':
|
|
57
|
+
return ['justify-center', 'items-end'];
|
|
58
|
+
case 'bottom-right':
|
|
59
|
+
return ['justify-end', 'items-end'];
|
|
60
|
+
|
|
61
|
+
default:
|
|
62
|
+
return ['justify-center', 'items-center'];
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const createBackdrop = (node: Node) => {
|
|
67
|
+
if (!backdropEl) {
|
|
68
|
+
backdropEl = document.createElement('div');
|
|
69
|
+
backdropEl.classList.add(...backdropClasses.split(' '));
|
|
70
|
+
|
|
71
|
+
const body = document.body;
|
|
72
|
+
body.append(backdropEl);
|
|
73
|
+
body.style.overflow = 'hidden';
|
|
74
|
+
|
|
75
|
+
document.addEventListener('keydown', handleEscape, true);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
dispatch('show', node);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const destroyBackdrop = (node: Node) => {
|
|
82
|
+
const body = document.body;
|
|
83
|
+
body.style.overflow = 'auto';
|
|
84
|
+
|
|
85
|
+
if (backdropEl) backdropEl.remove();
|
|
86
|
+
backdropEl = undefined;
|
|
87
|
+
|
|
88
|
+
document.removeEventListener('keydown', handleEscape, true);
|
|
89
|
+
|
|
90
|
+
dispatch('hide', node);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
let backdropEl: HTMLElement | undefined;
|
|
94
|
+
|
|
95
|
+
const handleEscape = (e: KeyboardEvent) => {
|
|
96
|
+
if (open && e.key === 'Escape') open = false;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const dispatch = createEventDispatcher();
|
|
100
|
+
|
|
101
|
+
const allPlacementClasses = ['justify-start', 'justify-center', 'justify-end', 'items-start', 'items-center', 'items-end'];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const clickOutside = (node: HTMLElement, callback: () => void) => {
|
|
2
|
+
const handleClick = (event: MouseEvent) => {
|
|
3
|
+
if (!event?.target) return;
|
|
4
|
+
if (node && !node.contains(event.target as Node) && !event.defaultPrevented) {
|
|
5
|
+
callback();
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
document.addEventListener('click', handleClick, true);
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
destroy() {
|
|
13
|
+
document.removeEventListener('click', handleClick, true);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Custom Event Dispatcher
|
|
3
|
+
|
|
4
|
+
Sets `target` in event data.
|
|
5
|
+
|
|
6
|
+
https://svelte.dev/repl/c93cbf99a8ca4f44912e662a8e3cbef7?version=3.37.0
|
|
7
|
+
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { get_current_component } from 'svelte/internal';
|
|
11
|
+
|
|
12
|
+
export default function createEventDispatcher() {
|
|
13
|
+
const component = get_current_component();
|
|
14
|
+
return (type: string, target: Element, detail: any) => {
|
|
15
|
+
const callbacks = component.$$.callbacks[type];
|
|
16
|
+
if (callbacks) {
|
|
17
|
+
const event = new CustomEvent(type, { detail });
|
|
18
|
+
target.dispatchEvent(event);
|
|
19
|
+
callbacks.slice().forEach((fn: (e: Event) => void) => {
|
|
20
|
+
fn.call(component, event);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Taken from github.com/carbon-design-system/carbon/packages/react/src/internal/keyboard/navigation.js
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// add all the elements inside modal which you want to make focusable
|
|
6
|
+
const selectorTabbable = `
|
|
7
|
+
a[href], area[href], input:not([disabled]):not([tabindex='-1']),
|
|
8
|
+
button:not([disabled]):not([tabindex='-1']),select:not([disabled]):not([tabindex='-1']),
|
|
9
|
+
textarea:not([disabled]):not([tabindex='-1']),
|
|
10
|
+
iframe, object, embed, *[tabindex]:not([tabindex='-1']):not([disabled]), *[contenteditable=true]
|
|
11
|
+
`;
|
|
12
|
+
|
|
13
|
+
/** @type {import('svelte/action').Action<HTMLElement, any>} */
|
|
14
|
+
export default function focusTrap(node) {
|
|
15
|
+
/** @type {(e:KeyboardEvent)=>void} */
|
|
16
|
+
function handleFocusTrap(e) {
|
|
17
|
+
let isTabPressed = e.key === 'Tab' || e.keyCode === 9;
|
|
18
|
+
|
|
19
|
+
if (!isTabPressed) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const tabbable = Array.from(node.querySelectorAll(selectorTabbable));
|
|
24
|
+
|
|
25
|
+
let index = tabbable.indexOf(document.activeElement ?? node);
|
|
26
|
+
if (index === -1 && e.shiftKey) index = 0;
|
|
27
|
+
index += tabbable.length + (e.shiftKey ? -1 : 1);
|
|
28
|
+
index %= tabbable.length;
|
|
29
|
+
/** @ts-ignore */
|
|
30
|
+
tabbable[index].focus();
|
|
31
|
+
|
|
32
|
+
e.preventDefault();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
document.addEventListener('keydown', handleFocusTrap, true);
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
destroy() {
|
|
39
|
+
document.removeEventListener('keydown', handleFocusTrap, true);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
|
|
4
|
+
export let src: string;
|
|
5
|
+
export let type: string = 'video/mp4';
|
|
6
|
+
export let trackSrc: string = '';
|
|
7
|
+
export let srclang: string = 'en';
|
|
8
|
+
export let label: string = 'english_captions';
|
|
9
|
+
|
|
10
|
+
let videoClass = twMerge($$props.class);
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<video {...$$restProps} class={videoClass}>
|
|
14
|
+
<source {src} {type} />
|
|
15
|
+
<slot />
|
|
16
|
+
<track src={trackSrc} kind="captions" {srclang} {label} />
|
|
17
|
+
Your browser does not support the video tag.
|
|
18
|
+
</video>
|
|
19
|
+
|
|
20
|
+
<!--
|
|
21
|
+
@component
|
|
22
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
23
|
+
## Props
|
|
24
|
+
@prop export let src: string;
|
|
25
|
+
@prop export let type: string = 'video/mp4';
|
|
26
|
+
@prop export let trackSrc: string = '';
|
|
27
|
+
@prop export let srclang: string = 'en';
|
|
28
|
+
@prop export let label: string = 'english_captions';
|
|
29
|
+
-->
|