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,51 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
export let home: boolean = false;
|
|
4
|
+
export let href: string | undefined = undefined;
|
|
5
|
+
export let linkClass: string = 'ml-1 text-sm font-medium text-gray-700 hover:text-gray-900 md:ml-2 dark:text-gray-400 dark:hover:text-white';
|
|
6
|
+
export let spanClass: string = 'ml-1 text-sm font-medium text-gray-500 md:ml-2 dark:text-gray-400';
|
|
7
|
+
export let homeClass: string = 'inline-flex items-center text-sm font-medium text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white';
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<li class={twMerge('inline-flex items-center', $$props.class)} {...$$restProps}>
|
|
11
|
+
{#if home}
|
|
12
|
+
<a class={twMerge(homeClass, $$props.classHome)} {href}>
|
|
13
|
+
{#if $$slots.icon}
|
|
14
|
+
<slot name="icon" />
|
|
15
|
+
{:else}
|
|
16
|
+
<svg class="w-4 h-4 mr-2" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
|
|
17
|
+
<path d="M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z" />
|
|
18
|
+
</svg>
|
|
19
|
+
{/if}
|
|
20
|
+
<slot />
|
|
21
|
+
</a>
|
|
22
|
+
{:else}
|
|
23
|
+
{#if $$slots.icon}
|
|
24
|
+
<slot name="icon" />
|
|
25
|
+
{:else}
|
|
26
|
+
<svg class="w-6 h-6 text-gray-400" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
|
|
27
|
+
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
|
|
28
|
+
</svg>
|
|
29
|
+
{/if}
|
|
30
|
+
{#if href}
|
|
31
|
+
<a class={twMerge(linkClass, $$props.classLink)} {href}>
|
|
32
|
+
<slot />
|
|
33
|
+
</a>
|
|
34
|
+
{:else}
|
|
35
|
+
<span class={twMerge(spanClass, $$props.classSpan)}>
|
|
36
|
+
<slot />
|
|
37
|
+
</span>
|
|
38
|
+
{/if}
|
|
39
|
+
{/if}
|
|
40
|
+
</li>
|
|
41
|
+
|
|
42
|
+
<!--
|
|
43
|
+
@component
|
|
44
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
45
|
+
## Props
|
|
46
|
+
@prop export let home: boolean = false;
|
|
47
|
+
@prop export let href: string | undefined = undefined;
|
|
48
|
+
@prop export let linkClass: string = 'ml-1 text-sm font-medium text-gray-700 hover:text-gray-900 md:ml-2 dark:text-gray-400 dark:hover:text-white';
|
|
49
|
+
@prop export let spanClass: string = 'ml-1 text-sm font-medium text-gray-500 md:ml-2 dark:text-gray-400';
|
|
50
|
+
@prop export let homeClass: string = 'inline-flex items-center text-sm font-medium text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white';
|
|
51
|
+
-->
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { setContext } from 'svelte';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
4
|
+
import type { SizeType } from '$lib/types';
|
|
5
|
+
|
|
6
|
+
export let size: SizeType = 'md';
|
|
7
|
+
export let divClass: string = 'inline-flex rounded-lg shadow-sm';
|
|
8
|
+
|
|
9
|
+
setContext('group', { size });
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<div {...$$restProps} class={twMerge(divClass, $$props.class)} role="group">
|
|
13
|
+
<slot />
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<!--
|
|
17
|
+
@component
|
|
18
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
19
|
+
## Props
|
|
20
|
+
@prop export let size: SizeType = 'md';
|
|
21
|
+
@prop export let divClass: string = 'inline-flex rounded-lg shadow-sm';
|
|
22
|
+
-->
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
import { getContext } from 'svelte';
|
|
4
|
+
import type { ButtonType } from '../types';
|
|
5
|
+
import type { SizeType } from '$lib/types';
|
|
6
|
+
|
|
7
|
+
type ButtonColor = keyof typeof colorClasses;
|
|
8
|
+
|
|
9
|
+
const group: SizeType = getContext('group');
|
|
10
|
+
|
|
11
|
+
export let pill: boolean = false;
|
|
12
|
+
export let outline: boolean = false;
|
|
13
|
+
export let size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = group ? 'sm' : 'md';
|
|
14
|
+
export let href: string | undefined = undefined;
|
|
15
|
+
export let type: ButtonType = 'button';
|
|
16
|
+
export let color: ButtonColor = group ? (outline ? 'dark' : 'alternative') : 'primary';
|
|
17
|
+
export let shadow: boolean = false;
|
|
18
|
+
|
|
19
|
+
const colorClasses = {
|
|
20
|
+
alternative: 'text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 dark:bg-gray-800 dark:text-gray-400 hover:text-primary-700 focus:text-primary-700 dark:focus:text-white dark:hover:text-white',
|
|
21
|
+
blue: 'text-white bg-blue-700 hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-700',
|
|
22
|
+
dark: 'text-white bg-gray-800 hover:bg-gray-900 dark:bg-gray-800 dark:hover:bg-gray-700',
|
|
23
|
+
green: 'text-white bg-green-700 hover:bg-green-800 dark:bg-green-600 dark:hover:bg-green-700',
|
|
24
|
+
light: 'text-gray-900 bg-white border border-gray-300 hover:bg-gray-100 dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700 dark:hover:border-gray-600',
|
|
25
|
+
primary: 'text-white bg-primary-700 hover:bg-primary-800 dark:bg-primary-600 dark:hover:bg-primary-700',
|
|
26
|
+
purple: 'text-white bg-purple-700 hover:bg-purple-800 dark:bg-purple-600 dark:hover:bg-purple-700',
|
|
27
|
+
red: 'text-white bg-red-700 hover:bg-red-800 dark:bg-red-600 dark:hover:bg-red-700',
|
|
28
|
+
yellow: 'text-white bg-yellow-400 hover:bg-yellow-500 ',
|
|
29
|
+
none: ''
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const coloredFocusClasses = {
|
|
33
|
+
alternative: 'focus:ring-gray-200 dark:focus:ring-gray-700',
|
|
34
|
+
blue: 'focus:ring-blue-300 dark:focus:ring-blue-800',
|
|
35
|
+
dark: 'focus:ring-gray-300 dark:focus:ring-gray-700',
|
|
36
|
+
green: 'focus:ring-green-300 dark:focus:ring-green-800',
|
|
37
|
+
light: 'focus:ring-gray-200 dark:focus:ring-gray-700',
|
|
38
|
+
primary: 'focus:ring-primary-300 dark:focus:ring-primary-800',
|
|
39
|
+
purple: 'focus:ring-purple-300 dark:focus:ring-purple-900',
|
|
40
|
+
red: 'focus:ring-red-300 dark:focus:ring-red-900',
|
|
41
|
+
yellow: 'focus:ring-yellow-300 dark:focus:ring-yellow-900',
|
|
42
|
+
none: ''
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const coloredShadowClasses = {
|
|
46
|
+
alternative: 'shadow-gray-500/50 dark:shadow-gray-800/80',
|
|
47
|
+
blue: 'shadow-blue-500/50 dark:shadow-blue-800/80',
|
|
48
|
+
dark: 'shadow-gray-500/50 dark:shadow-gray-800/80',
|
|
49
|
+
green: 'shadow-green-500/50 dark:shadow-green-800/80',
|
|
50
|
+
light: 'shadow-gray-500/50 dark:shadow-gray-800/80',
|
|
51
|
+
primary: 'shadow-primary-500/50 dark:shadow-primary-800/80',
|
|
52
|
+
purple: 'shadow-purple-500/50 dark:shadow-purple-800/80',
|
|
53
|
+
red: 'shadow-red-500/50 dark:shadow-red-800/80 ',
|
|
54
|
+
yellow: 'shadow-yellow-500/50 dark:shadow-yellow-800/80 ',
|
|
55
|
+
none: ''
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const outlineClasses = {
|
|
59
|
+
alternative: 'text-gray-900 hover:text-white border border-gray-800 hover:bg-gray-900 focus:bg-gray-900 focus:text-white focus:ring-gray-300 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-800',
|
|
60
|
+
blue: 'text-blue-700 hover:text-white border border-blue-700 hover:bg-blue-800 dark:border-blue-500 dark:text-blue-500 dark:hover:text-white dark:hover:bg-blue-600',
|
|
61
|
+
dark: 'text-gray-900 hover:text-white border border-gray-800 hover:bg-gray-900 focus:bg-gray-900 focus:text-white dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-600',
|
|
62
|
+
green: 'text-green-700 hover:text-white border border-green-700 hover:bg-green-800 dark:border-green-500 dark:text-green-500 dark:hover:text-white dark:hover:bg-green-600',
|
|
63
|
+
light: 'text-gray-500 hover:text-gray-900 bg-white border border-gray-200 dark:border-gray-600 dark:hover:text-white dark:text-gray-400 hover:bg-gray-50 dark:bg-gray-700 dark:hover:bg-gray-600',
|
|
64
|
+
primary: 'text-primary-700 hover:text-white border border-primary-700 hover:bg-primary-700 dark:border-primary-500 dark:text-primary-500 dark:hover:text-white dark:hover:bg-primary-600',
|
|
65
|
+
purple: 'text-purple-700 hover:text-white border border-purple-700 hover:bg-purple-800 dark:border-purple-400 dark:text-purple-400 dark:hover:text-white dark:hover:bg-purple-500',
|
|
66
|
+
red: 'text-red-700 hover:text-white border border-red-700 hover:bg-red-800 dark:border-red-500 dark:text-red-500 dark:hover:text-white dark:hover:bg-red-600',
|
|
67
|
+
yellow: 'text-yellow-400 hover:text-white border border-yellow-400 hover:bg-yellow-500 dark:border-yellow-300 dark:text-yellow-300 dark:hover:text-white dark:hover:bg-yellow-400',
|
|
68
|
+
none: ''
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const sizeClasses = {
|
|
72
|
+
xs: 'px-3 py-2 text-xs',
|
|
73
|
+
sm: 'px-4 py-2 text-sm',
|
|
74
|
+
md: 'px-5 py-2.5 text-sm',
|
|
75
|
+
lg: 'px-5 py-3 text-base',
|
|
76
|
+
xl: 'px-6 py-3.5 text-base'
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const hasBorder = () => outline || color === 'alternative' || color === 'light';
|
|
80
|
+
|
|
81
|
+
let buttonClass: string;
|
|
82
|
+
$: buttonClass = twMerge('text-center font-medium', group ? 'focus:ring-2' : 'focus:ring-4', group && 'focus:z-10', group || 'focus:outline-none', 'inline-flex items-center justify-center ' + sizeClasses[size], outline ? outlineClasses[color] : colorClasses[color], color === 'alternative' && (group ? 'dark:bg-gray-700 dark:text-white dark:border-gray-700 dark:hover:border-gray-600 dark:hover:bg-gray-600' : 'dark:bg-transparent dark:border-gray-600 dark:hover:border-gray-700'), outline && color === 'dark' && (group ? 'dark:text-white dark:border-white' : 'dark:text-gray-400 dark:border-gray-700'), coloredFocusClasses[color], hasBorder() && group && 'border-l-0 first:border-l', group ? (pill && 'first:rounded-l-full last:rounded-r-full') || 'first:rounded-l-lg last:rounded-r-lg' : (pill && 'rounded-full') || 'rounded-lg', shadow && 'shadow-lg', shadow && coloredShadowClasses[color], $$props.disabled && 'cursor-not-allowed opacity-50', $$props.class);
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
<svelte:element this={href ? 'a' : 'button'} type={href ? undefined : type} {href} role={href ? 'link' : 'button'} {...$$restProps} class={buttonClass} on:click on:change on:keydown on:keyup on:touchstart on:touchend on:touchcancel on:mouseenter on:mouseleave>
|
|
86
|
+
<slot />
|
|
87
|
+
</svelte:element>
|
|
88
|
+
|
|
89
|
+
<!--
|
|
90
|
+
@component
|
|
91
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
92
|
+
## Props
|
|
93
|
+
@prop export let pill: boolean = false;
|
|
94
|
+
@prop export let outline: boolean = false;
|
|
95
|
+
@prop export let size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = group ? 'sm' : 'md';
|
|
96
|
+
@prop export let href: string | undefined = undefined;
|
|
97
|
+
@prop export let type: ButtonType = 'button';
|
|
98
|
+
@prop export let color: ButtonColor = group ? (outline ? 'dark' : 'alternative') : 'primary';
|
|
99
|
+
@prop export let shadow: boolean = false;
|
|
100
|
+
-->
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
import Button from './Button.svelte';
|
|
4
|
+
import { getContext } from 'svelte';
|
|
5
|
+
|
|
6
|
+
const group = getContext('group');
|
|
7
|
+
|
|
8
|
+
export let color: keyof typeof gradientClasses = 'blue';
|
|
9
|
+
export let shadow: boolean = false;
|
|
10
|
+
|
|
11
|
+
const gradientClasses = {
|
|
12
|
+
blue: 'text-white bg-gradient-to-r from-blue-500 via-blue-600 to-blue-700 hover:bg-gradient-to-br focus:ring-blue-300 dark:focus:ring-blue-800 ',
|
|
13
|
+
green: 'text-white bg-gradient-to-r from-green-400 via-green-500 to-green-600 hover:bg-gradient-to-br focus:ring-green-300 dark:focus:ring-green-800',
|
|
14
|
+
cyan: 'text-white bg-gradient-to-r from-cyan-400 via-cyan-500 to-cyan-600 hover:bg-gradient-to-br focus:ring-cyan-300 dark:focus:ring-cyan-800',
|
|
15
|
+
teal: 'text-white bg-gradient-to-r from-teal-400 via-teal-500 to-teal-600 hover:bg-gradient-to-br focus:ring-teal-300 dark:focus:ring-teal-800',
|
|
16
|
+
lime: 'text-gray-900 bg-gradient-to-r from-lime-200 via-lime-400 to-lime-500 hover:bg-gradient-to-br focus:ring-lime-300 dark:focus:ring-lime-800',
|
|
17
|
+
red: 'text-white bg-gradient-to-r from-red-400 via-red-500 to-red-600 hover:bg-gradient-to-br focus:ring-red-300 dark:focus:ring-red-800',
|
|
18
|
+
pink: 'text-white bg-gradient-to-r from-pink-400 via-pink-500 to-pink-600 hover:bg-gradient-to-br focus:ring-pink-300 dark:focus:ring-pink-800',
|
|
19
|
+
purple: 'text-white bg-gradient-to-r from-purple-500 via-purple-600 to-purple-700 hover:bg-gradient-to-br focus:ring-purple-300 dark:focus:ring-purple-800',
|
|
20
|
+
purpleToBlue: 'text-white bg-gradient-to-br from-purple-600 to-blue-500 hover:bg-gradient-to-bl focus:ring-blue-300 dark:focus:ring-blue-800',
|
|
21
|
+
cyanToBlue: 'text-white bg-gradient-to-r from-cyan-500 to-blue-500 hover:bg-gradient-to-bl focus:ring-cyan-300 dark:focus:ring-cyan-800',
|
|
22
|
+
greenToBlue: 'text-white bg-gradient-to-br from-green-400 to-blue-600 hover:bg-gradient-to-bl focus:ring-green-200 dark:focus:ring-green-800',
|
|
23
|
+
purpleToPink: 'text-white bg-gradient-to-r from-purple-500 to-pink-500 hover:bg-gradient-to-l focus:ring-purple-200 dark:focus:ring-purple-800',
|
|
24
|
+
pinkToOrange: 'text-white bg-gradient-to-br from-pink-500 to-orange-400 hover:bg-gradient-to-bl focus:ring-pink-200 dark:focus:ring-pink-800',
|
|
25
|
+
tealToLime: 'text-gray-900 bg-gradient-to-r from-teal-200 to-lime-200 hover:bg-gradient-to-l focus:ring-lime-200 dark:focus:ring-teal-700',
|
|
26
|
+
redToYellow: 'text-gray-900 bg-gradient-to-r from-red-200 via-red-300 to-yellow-200 hover:bg-gradient-to-bl focus:ring-red-100 dark:focus:ring-red-400'
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const coloredShadowClasses = {
|
|
30
|
+
blue: 'shadow-blue-500/50 dark:shadow-blue-800/80',
|
|
31
|
+
green: 'shadow-green-500/50 dark:shadow-green-800/80',
|
|
32
|
+
cyan: 'shadow-cyan-500/50 dark:shadow-cyan-800/80',
|
|
33
|
+
teal: 'shadow-teal-500/50 dark:shadow-teal-800/80 ',
|
|
34
|
+
lime: 'shadow-lime-500/50 dark:shadow-lime-800/80',
|
|
35
|
+
red: 'shadow-red-500/50 dark:shadow-red-800/80 ',
|
|
36
|
+
pink: 'shadow-pink-500/50 dark:shadow-pink-800/80',
|
|
37
|
+
purple: 'shadow-purple-500/50 dark:shadow-purple-800/80',
|
|
38
|
+
purpleToBlue: 'shadow-blue-500/50 dark:shadow-blue-800/80',
|
|
39
|
+
cyanToBlue: 'shadow-cyan-500/50 dark:shadow-cyan-800/80',
|
|
40
|
+
greenToBlue: 'shadow-green-500/50 dark:shadow-green-800/80',
|
|
41
|
+
purpleToPink: 'shadow-purple-500/50 dark:shadow-purple-800/80',
|
|
42
|
+
pinkToOrange: 'shadow-pink-500/50 dark:shadow-pink-800/80',
|
|
43
|
+
tealToLime: 'shadow-lime-500/50 dark:shadow-teal-800/80',
|
|
44
|
+
redToYellow: 'shadow-red-500/50 dark:shadow-red-800/80'
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
let gradientOutlineClass: string;
|
|
48
|
+
$: gradientOutlineClass = twMerge(
|
|
49
|
+
'inline-flex items-center justify-center w-full !border-0',
|
|
50
|
+
$$props.pill || '!rounded-md',
|
|
51
|
+
'bg-white !text-gray-900 dark:bg-gray-900 dark:!text-white', // this is limitation - no transparency
|
|
52
|
+
'hover:bg-transparent hover:!text-inherit',
|
|
53
|
+
'transition-all duration-75 ease-in group-hover:!bg-opacity-0 group-hover:!text-inherit'
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
let divClass: string;
|
|
57
|
+
$: divClass = twMerge($$props.outline && 'p-0.5', gradientClasses[color], shadow && 'shadow-lg', shadow && coloredShadowClasses[color], group ? ($$props.pill && 'first:rounded-l-full last:rounded-r-full') || 'first:rounded-l-lg last:rounded-r-lg' : ($$props.pill && 'rounded-full') || 'rounded-lg', $$props.class);
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
{#if $$props.outline}
|
|
61
|
+
<div class={divClass}>
|
|
62
|
+
<!-- Trick to prentend outline without using border
|
|
63
|
+
This has a limitation of no supporting transparency as
|
|
64
|
+
is set to bg-white dark:bg-gray-900 -->
|
|
65
|
+
<Button {...$$restProps} color="none" class={gradientOutlineClass} on:click on:change on:keydown on:keyup on:touchstart on:touchend on:touchcancel on:mouseenter on:mouseleave><slot /></Button>
|
|
66
|
+
</div>
|
|
67
|
+
{:else}
|
|
68
|
+
<Button {...$$restProps} color="none" class={divClass} on:click on:change on:keydown on:keyup on:touchstart on:touchend on:touchcancel on:mouseenter on:mouseleave>
|
|
69
|
+
<slot />
|
|
70
|
+
</Button>
|
|
71
|
+
{/if}
|
|
72
|
+
|
|
73
|
+
<!--
|
|
74
|
+
@component
|
|
75
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
76
|
+
## Props
|
|
77
|
+
@prop export let color: keyof typeof gradientClasses = 'blue';
|
|
78
|
+
@prop export let shadow: boolean = false;
|
|
79
|
+
-->
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { SizeType } from '$lib/types';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
4
|
+
import type { ComponentProps } from 'svelte';
|
|
5
|
+
import Frame from '../utils/Frame.svelte';
|
|
6
|
+
|
|
7
|
+
export let href: string | null | undefined = undefined;
|
|
8
|
+
export let horizontal: boolean = false;
|
|
9
|
+
export let reverse: boolean = false;
|
|
10
|
+
export let img: string | undefined = undefined;
|
|
11
|
+
export let padding: 'none' | 'sm' | 'md' | 'lg' | 'xl' = 'lg';
|
|
12
|
+
export let size: SizeType = 'sm';
|
|
13
|
+
|
|
14
|
+
// propagate props type from underlying Frame
|
|
15
|
+
interface $$Props extends ComponentProps<Frame> {
|
|
16
|
+
horizontal?: boolean;
|
|
17
|
+
reverse?: boolean;
|
|
18
|
+
img?: string;
|
|
19
|
+
padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
20
|
+
size?: SizeType;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const paddings = {
|
|
24
|
+
none: 'p-0',
|
|
25
|
+
sm: 'p-4 sm:p-6 md:p-8',
|
|
26
|
+
md: 'p-4 sm:p-5',
|
|
27
|
+
lg: 'p-4 sm:p-6',
|
|
28
|
+
xl: 'p-4 sm:p-8'
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const sizes = {
|
|
32
|
+
xs: 'max-w-xs',
|
|
33
|
+
sm: 'max-w-sm',
|
|
34
|
+
md: 'max-w-lg',
|
|
35
|
+
lg: 'max-w-2xl',
|
|
36
|
+
xl: 'max-w-screen-xl'
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
let inneraPdding: string;
|
|
40
|
+
$: innerPadding = paddings[padding];
|
|
41
|
+
|
|
42
|
+
let cardClass: string;
|
|
43
|
+
$: cardClass = twMerge('flex', sizes[size], reverse ? 'flex-col-reverse' : 'flex-col', horizontal && (reverse ? 'md:flex-row-reverse md:max-w-xl' : 'md:flex-row md:max-w-xl'), href && 'hover:bg-gray-100 dark:hover:bg-gray-700', !img && innerPadding, $$props.class);
|
|
44
|
+
|
|
45
|
+
let imgClass: string;
|
|
46
|
+
$: imgClass = twMerge(reverse ? 'rounded-b-lg' : 'rounded-t-lg', horizontal && 'object-cover w-full h-96 md:h-auto md:w-48 md:rounded-none', horizontal && (reverse ? 'md:rounded-r-lg' : 'md:rounded-l-lg'));
|
|
47
|
+
</script>
|
|
48
|
+
|
|
49
|
+
<Frame tag={href ? 'a' : 'div'} rounded shadow border on:click on:focusin on:focusout on:mouseenter on:mouseleave {href} {...$$restProps} class={cardClass}>
|
|
50
|
+
{#if img}
|
|
51
|
+
<img class={imgClass} src={img} alt="" />
|
|
52
|
+
<div class={innerPadding}>
|
|
53
|
+
<slot />
|
|
54
|
+
</div>
|
|
55
|
+
{:else}
|
|
56
|
+
<slot />
|
|
57
|
+
{/if}
|
|
58
|
+
</Frame>
|
|
59
|
+
|
|
60
|
+
<!--
|
|
61
|
+
@component
|
|
62
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
63
|
+
## Props
|
|
64
|
+
@prop export let href: string | null | undefined = undefined;
|
|
65
|
+
@prop export let horizontal: boolean = false;
|
|
66
|
+
@prop export let reverse: boolean = false;
|
|
67
|
+
@prop export let img: string | undefined = undefined;
|
|
68
|
+
@prop export let padding: 'none' | 'sm' | 'md' | 'lg' | 'xl' = 'lg';
|
|
69
|
+
@prop export let size: SizeType = 'sm';
|
|
70
|
+
-->
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
<script lang="ts" context="module">
|
|
2
|
+
export type State = {
|
|
3
|
+
images: HTMLImgAttributes[];
|
|
4
|
+
index: number;
|
|
5
|
+
};
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<script lang="ts">
|
|
9
|
+
import { createEventDispatcher, onMount, setContext } from 'svelte';
|
|
10
|
+
import { quintOut } from 'svelte/easing';
|
|
11
|
+
import type { HTMLImgAttributes } from 'svelte/elements';
|
|
12
|
+
import { writable } from 'svelte/store';
|
|
13
|
+
import { fade, type TransitionConfig } from 'svelte/transition';
|
|
14
|
+
import { twMerge } from 'tailwind-merge';
|
|
15
|
+
import Controls from './Controls.svelte';
|
|
16
|
+
import Indicators from './Indicators.svelte';
|
|
17
|
+
|
|
18
|
+
type TransitionFunc = (node: HTMLElement, params: any) => TransitionConfig;
|
|
19
|
+
|
|
20
|
+
export let images: HTMLImgAttributes[];
|
|
21
|
+
export let index: number = 0;
|
|
22
|
+
export let transition: TransitionFunc = (x) => fade(x, { duration: 700, easing: quintOut });
|
|
23
|
+
export let duration: number = 0;
|
|
24
|
+
|
|
25
|
+
// Carousel
|
|
26
|
+
let divClass: string = 'overflow-hidden relative rounded-lg h-56 sm:h-64 xl:h-80 2xl:h-96';
|
|
27
|
+
|
|
28
|
+
const dispatch = createEventDispatcher();
|
|
29
|
+
|
|
30
|
+
const { set, subscribe, update } = writable<State>({ images, index });
|
|
31
|
+
|
|
32
|
+
const state = { set: (s: State) => set({ index: ((s.index % images.length) + images.length) % images.length, images: s.images }), subscribe, update };
|
|
33
|
+
|
|
34
|
+
setContext('state', state);
|
|
35
|
+
|
|
36
|
+
subscribe((s) => {
|
|
37
|
+
index = s.index;
|
|
38
|
+
dispatch('change', images[index]);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
onMount(() => dispatch('change', images[index]));
|
|
42
|
+
|
|
43
|
+
$: state.set({ images, index });
|
|
44
|
+
|
|
45
|
+
const nextSlide = () => (index += 1);
|
|
46
|
+
const prevSlide = () => (index -= 1);
|
|
47
|
+
|
|
48
|
+
const loop = (node: HTMLElement, duration: number) => {
|
|
49
|
+
carouselDiv = node; // used by DragStart
|
|
50
|
+
|
|
51
|
+
// loop timer
|
|
52
|
+
let intervalId: any;
|
|
53
|
+
|
|
54
|
+
if (duration > 0) intervalId = setInterval(nextSlide, duration);
|
|
55
|
+
|
|
56
|
+
return {
|
|
57
|
+
update: (duration: number) => {
|
|
58
|
+
clearInterval(intervalId);
|
|
59
|
+
if (duration > 0) intervalId = setInterval(nextSlide, duration);
|
|
60
|
+
},
|
|
61
|
+
destroy: () => clearInterval(intervalId)
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
type ActiveDragGesture = {
|
|
66
|
+
start: number;
|
|
67
|
+
position: number;
|
|
68
|
+
width: number;
|
|
69
|
+
timestamp: number;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
let activeDragGesture: ActiveDragGesture | undefined;
|
|
73
|
+
|
|
74
|
+
let carouselDiv: HTMLElement;
|
|
75
|
+
let percentOffset: number = 0;
|
|
76
|
+
let touchEvent: MouseEvent | TouchEvent | null = null;
|
|
77
|
+
|
|
78
|
+
const getPositionFromEvent = (evt: MouseEvent | TouchEvent) => {
|
|
79
|
+
const mousePos = (evt as MouseEvent)?.clientX;
|
|
80
|
+
if (mousePos) return mousePos;
|
|
81
|
+
|
|
82
|
+
let touchEvt = evt as TouchEvent;
|
|
83
|
+
if (/^touch/.test(touchEvt?.type)) {
|
|
84
|
+
return touchEvt.touches[0].clientX;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const onDragStart = (evt: MouseEvent | TouchEvent) => {
|
|
89
|
+
touchEvent = evt;
|
|
90
|
+
evt.preventDefault();
|
|
91
|
+
const start = getPositionFromEvent(evt);
|
|
92
|
+
const width = carouselDiv.getBoundingClientRect().width;
|
|
93
|
+
if (start === undefined || width === undefined) return;
|
|
94
|
+
activeDragGesture = {
|
|
95
|
+
start,
|
|
96
|
+
position: start,
|
|
97
|
+
width,
|
|
98
|
+
timestamp: Date.now()
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
$: onDragMove =
|
|
103
|
+
activeDragGesture === undefined
|
|
104
|
+
? undefined
|
|
105
|
+
: (evt: MouseEvent | TouchEvent) => {
|
|
106
|
+
const position = getPositionFromEvent(evt);
|
|
107
|
+
if (!activeDragGesture || position === undefined) return;
|
|
108
|
+
const { start, width } = activeDragGesture;
|
|
109
|
+
percentOffset = Math.min(100, Math.max(-100, ((position - start) / width) * 100));
|
|
110
|
+
activeDragGesture.position = position;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
$: onDragStop =
|
|
114
|
+
activeDragGesture === undefined
|
|
115
|
+
? undefined
|
|
116
|
+
: (evt: MouseEvent | TouchEvent) => {
|
|
117
|
+
// These might be exposed one day, keep them safely tucked away as constants.
|
|
118
|
+
const SWIPE_MAX_DURATION = 250;
|
|
119
|
+
const SWIPE_MIN_DISTANCE = 30;
|
|
120
|
+
const DRAG_MIN_PERCENT = 50;
|
|
121
|
+
|
|
122
|
+
if (activeDragGesture) {
|
|
123
|
+
const { timestamp, position, start } = activeDragGesture;
|
|
124
|
+
const duration = Date.now() - timestamp;
|
|
125
|
+
const distance = position - start;
|
|
126
|
+
|
|
127
|
+
if (Math.abs(distance) >= SWIPE_MIN_DISTANCE && duration <= SWIPE_MAX_DURATION && duration > 0) {
|
|
128
|
+
if (distance > 0) prevSlide();
|
|
129
|
+
else nextSlide();
|
|
130
|
+
} else if (percentOffset > DRAG_MIN_PERCENT) prevSlide();
|
|
131
|
+
else if (percentOffset < -DRAG_MIN_PERCENT) nextSlide();
|
|
132
|
+
else {
|
|
133
|
+
// The gesture is a tap not drag, so manually issue a click event to trigger tap click gestures lost via preventDefault
|
|
134
|
+
touchEvent?.target?.dispatchEvent(
|
|
135
|
+
new Event('click', {
|
|
136
|
+
bubbles: true
|
|
137
|
+
})
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
percentOffset = 0;
|
|
142
|
+
activeDragGesture = undefined;
|
|
143
|
+
touchEvent = null;
|
|
144
|
+
};
|
|
145
|
+
</script>
|
|
146
|
+
|
|
147
|
+
<!-- The move listeners go here, so things keep working if the touch strays out of the element. -->
|
|
148
|
+
<svelte:document on:mousemove={onDragMove} on:mouseup={onDragStop} on:touchmove={onDragMove} on:touchend={onDragStop} />
|
|
149
|
+
<div bind:this={carouselDiv} class="relative" on:mousedown={onDragStart} on:touchstart={onDragStart} role="button" aria-label="Draggable Carousel" tabindex="0">
|
|
150
|
+
<div style={`transform: translateX(${percentOffset}%)`} {...$$restProps} class={twMerge(divClass, activeDragGesture === undefined ? 'transition-transform' : '', $$props.class)} use:loop={duration}>
|
|
151
|
+
{#key images[index]}
|
|
152
|
+
<img alt="..." {...images[index]} transition:transition={{}} class="absolute block w-full -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2 object-cover" />
|
|
153
|
+
{/key}
|
|
154
|
+
</div>
|
|
155
|
+
<slot {index} {Controls} {Indicators} />
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
<!--
|
|
159
|
+
@component
|
|
160
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
161
|
+
## Props
|
|
162
|
+
@prop export let images: HTMLImgAttributes[];
|
|
163
|
+
@prop export let index: number = 0;
|
|
164
|
+
@prop export let transition: TransitionFunc = (x) => fade(x, { duration: 700, easing: quintOut });
|
|
165
|
+
@prop export let duration: number = 0;
|
|
166
|
+
-->
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
|
|
4
|
+
export let forward: boolean;
|
|
5
|
+
export let name: string;
|
|
6
|
+
|
|
7
|
+
let buttonCls: string;
|
|
8
|
+
$: buttonCls = twMerge('flex absolute top-0 z-30 justify-center items-center px-4 h-full group focus:outline-none text-white dark:text-gray-300', forward ? 'right-0' : 'left-0', $$props.class);
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<button on:click type="button" class={buttonCls}>
|
|
12
|
+
<slot>
|
|
13
|
+
<span class="inline-flex justify-center items-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-white/30 dark:bg-gray-800/30 group-hover:bg-white/50 dark:group-hover:bg-gray-800/60 group-focus:ring-4 group-focus:ring-white dark:group-focus:ring-gray-800/70 group-focus:outline-none">
|
|
14
|
+
{#if forward}
|
|
15
|
+
<svg aria-hidden="true" class="w-5 h-5 sm:w-6 sm:h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
16
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
|
|
17
|
+
</svg>
|
|
18
|
+
{:else}
|
|
19
|
+
<svg aria-hidden="true" class="w-5 h-5 sm:w-6 sm:h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
20
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" />
|
|
21
|
+
</svg>
|
|
22
|
+
{/if}
|
|
23
|
+
<span class="sr-only">{name}</span>
|
|
24
|
+
</span>
|
|
25
|
+
</slot>
|
|
26
|
+
</button>
|
|
27
|
+
|
|
28
|
+
<!--
|
|
29
|
+
@component
|
|
30
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
31
|
+
## Props
|
|
32
|
+
@prop export let forward: boolean;
|
|
33
|
+
@prop export let name: string;
|
|
34
|
+
-->
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext } from 'svelte';
|
|
3
|
+
import type { Writable } from 'svelte/store';
|
|
4
|
+
import type { State } from './Carousel.svelte';
|
|
5
|
+
import ControlButton from './ControlButton.svelte';
|
|
6
|
+
import { twJoin } from 'tailwind-merge';
|
|
7
|
+
|
|
8
|
+
const state = getContext<Writable<State>>('state');
|
|
9
|
+
|
|
10
|
+
function changeSlide(forward: boolean) {
|
|
11
|
+
return function (ev: Event) {
|
|
12
|
+
if (ev.isTrusted) $state.index = forward ? $state.index + 1 : $state.index - 1;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<!-- Slider controls -->
|
|
18
|
+
<slot {ControlButton} {changeSlide}>
|
|
19
|
+
<ControlButton name="Previous" forward={false} on:click={changeSlide(false)} class={twJoin($$props.class)} />
|
|
20
|
+
<ControlButton name="Next" forward={true} on:click={changeSlide(true)} class={twJoin($$props.class)} />
|
|
21
|
+
</slot>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Indicator from '$lib/indicators/Indicator.svelte';
|
|
3
|
+
import { getContext } from 'svelte';
|
|
4
|
+
import type { Writable } from 'svelte/store';
|
|
5
|
+
import { twMerge } from 'tailwind-merge';
|
|
6
|
+
import type { State } from './Carousel.svelte';
|
|
7
|
+
|
|
8
|
+
export let activeClass = 'opacity-100';
|
|
9
|
+
export let inactiveClass = 'opacity-60';
|
|
10
|
+
|
|
11
|
+
const state = getContext<Writable<State>>('state');
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<div class={twMerge('flex absolute bottom-5 left-1/2 z-30 space-x-3 -translate-x-1/2', $$props.class)}>
|
|
15
|
+
{#each $state.images as _, idx}
|
|
16
|
+
{@const selected = $state.index === idx}
|
|
17
|
+
<button on:click={() => ($state.index = idx)}>
|
|
18
|
+
<slot {Indicator} {selected} index={idx}>
|
|
19
|
+
<Indicator class={twMerge('bg-gray-100 hover:bg-gray-300', selected ? activeClass : inactiveClass)} />
|
|
20
|
+
</slot>
|
|
21
|
+
</button>
|
|
22
|
+
{/each}
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<!--
|
|
26
|
+
@component
|
|
27
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
28
|
+
## Props
|
|
29
|
+
@prop export let activeClass = 'opacity-100';
|
|
30
|
+
@prop export let inactiveClass = 'opacity-60';
|
|
31
|
+
-->
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { HTMLImgAttributes } from 'svelte/elements';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
4
|
+
|
|
5
|
+
export let selected: boolean = false;
|
|
6
|
+
|
|
7
|
+
export let activeClass = 'opacity-100';
|
|
8
|
+
export let inactiveClass = 'opacity-60';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<img alt="..." {...$$restProps} class={twMerge(selected ? activeClass : inactiveClass, $$props.class)} />
|
|
12
|
+
|
|
13
|
+
<!--
|
|
14
|
+
@component
|
|
15
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
16
|
+
## Props
|
|
17
|
+
@prop export let selected: boolean = false;
|
|
18
|
+
@prop export let activeClass = 'opacity-100';
|
|
19
|
+
@prop export let inactiveClass = 'opacity-60';
|
|
20
|
+
-->
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { HTMLImgAttributes } from 'svelte/elements';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
4
|
+
import Thumbnail from './Thumbnail.svelte';
|
|
5
|
+
|
|
6
|
+
export let images: HTMLImgAttributes[] = [];
|
|
7
|
+
export let index: number = 0;
|
|
8
|
+
|
|
9
|
+
$: index = (index + images.length) % images.length;
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<div class={twMerge('flex flex-row justify-center bg-gray-100 w-full', $$props.class)}>
|
|
13
|
+
{#each images as image, idx}
|
|
14
|
+
{@const selected = index === idx}
|
|
15
|
+
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
16
|
+
<button on:click={() => (index = idx)} aria-label="Click to view image">
|
|
17
|
+
<slot {Thumbnail} {image} {selected}>
|
|
18
|
+
<Thumbnail {...image} {selected} />
|
|
19
|
+
</slot>
|
|
20
|
+
</button>
|
|
21
|
+
{/each}
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<!--
|
|
25
|
+
@component
|
|
26
|
+
[Go to docs](https://flowbite-svelte.com/)
|
|
27
|
+
## Props
|
|
28
|
+
@prop export let images: HTMLImgAttributes[] = [];
|
|
29
|
+
@prop export let index: number = 0;
|
|
30
|
+
-->
|