@jarrodmedrano/ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -0
- package/dist/components/auth/providers.cjs +83 -0
- package/dist/components/auth/providers.cjs.map +1 -0
- package/dist/components/auth/providers.d.ts +19 -0
- package/dist/components/auth/providers.d.ts.map +1 -0
- package/dist/components/auth/providers.js +59 -0
- package/dist/components/auth/providers.js.map +1 -0
- package/dist/components/card/back-button.cjs +45 -0
- package/dist/components/card/back-button.cjs.map +1 -0
- package/dist/components/card/back-button.d.ts +7 -0
- package/dist/components/card/back-button.d.ts.map +1 -0
- package/dist/components/card/back-button.js +11 -0
- package/dist/components/card/back-button.js.map +1 -0
- package/dist/components/card/card-wrapper.cjs +56 -0
- package/dist/components/card/card-wrapper.cjs.map +1 -0
- package/dist/components/card/card-wrapper.d.ts +11 -0
- package/dist/components/card/card-wrapper.d.ts.map +1 -0
- package/dist/components/card/card-wrapper.js +36 -0
- package/dist/components/card/card-wrapper.js.map +1 -0
- package/dist/components/card/header.cjs +52 -0
- package/dist/components/card/header.cjs.map +1 -0
- package/dist/components/card/header.d.ts +8 -0
- package/dist/components/card/header.d.ts.map +1 -0
- package/dist/components/card/header.js +18 -0
- package/dist/components/card/header.js.map +1 -0
- package/dist/components/combobox/ComboList.cjs +78 -0
- package/dist/components/combobox/ComboList.cjs.map +1 -0
- package/dist/components/combobox/ComboList.d.ts +14 -0
- package/dist/components/combobox/ComboList.d.ts.map +1 -0
- package/dist/components/combobox/ComboList.js +61 -0
- package/dist/components/combobox/ComboList.js.map +1 -0
- package/dist/components/combobox/index.cjs +119 -0
- package/dist/components/combobox/index.cjs.map +1 -0
- package/dist/components/combobox/index.d.ts +6 -0
- package/dist/components/combobox/index.d.ts.map +1 -0
- package/dist/components/combobox/index.js +101 -0
- package/dist/components/combobox/index.js.map +1 -0
- package/dist/components/dashboard/account-select.cjs +69 -0
- package/dist/components/dashboard/account-select.cjs.map +1 -0
- package/dist/components/dashboard/account-select.d.ts +12 -0
- package/dist/components/dashboard/account-select.d.ts.map +1 -0
- package/dist/components/dashboard/account-select.js +41 -0
- package/dist/components/dashboard/account-select.js.map +1 -0
- package/dist/components/dashboard/account-switcher.cjs +72 -0
- package/dist/components/dashboard/account-switcher.cjs.map +1 -0
- package/dist/components/dashboard/account-switcher.d.ts +12 -0
- package/dist/components/dashboard/account-switcher.d.ts.map +1 -0
- package/dist/components/dashboard/account-switcher.js +44 -0
- package/dist/components/dashboard/account-switcher.js.map +1 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.cjs +100 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.cjs.map +1 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.d.ts +3 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.js +81 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.js.map +1 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.styles.cjs +77 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.styles.cjs.map +1 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.styles.d.ts +9 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.styles.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.styles.js +40 -0
- package/dist/components/dashboard/sidebar/CollapsibleSection.styles.js.map +1 -0
- package/dist/components/dashboard/sidebar/EntityList.cjs +121 -0
- package/dist/components/dashboard/sidebar/EntityList.cjs.map +1 -0
- package/dist/components/dashboard/sidebar/EntityList.d.ts +3 -0
- package/dist/components/dashboard/sidebar/EntityList.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar/EntityList.js +87 -0
- package/dist/components/dashboard/sidebar/EntityList.js.map +1 -0
- package/dist/components/dashboard/sidebar/EntityList.styles.cjs +95 -0
- package/dist/components/dashboard/sidebar/EntityList.styles.cjs.map +1 -0
- package/dist/components/dashboard/sidebar/EntityList.styles.d.ts +14 -0
- package/dist/components/dashboard/sidebar/EntityList.styles.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar/EntityList.styles.js +57 -0
- package/dist/components/dashboard/sidebar/EntityList.styles.js.map +1 -0
- package/dist/components/dashboard/sidebar/SectionHeader.cjs +99 -0
- package/dist/components/dashboard/sidebar/SectionHeader.cjs.map +1 -0
- package/dist/components/dashboard/sidebar/SectionHeader.d.ts +3 -0
- package/dist/components/dashboard/sidebar/SectionHeader.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar/SectionHeader.js +81 -0
- package/dist/components/dashboard/sidebar/SectionHeader.js.map +1 -0
- package/dist/components/dashboard/sidebar/SectionHeader.styles.cjs +116 -0
- package/dist/components/dashboard/sidebar/SectionHeader.styles.cjs.map +1 -0
- package/dist/components/dashboard/sidebar/SectionHeader.styles.d.ts +18 -0
- package/dist/components/dashboard/sidebar/SectionHeader.styles.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar/SectionHeader.styles.js +77 -0
- package/dist/components/dashboard/sidebar/SectionHeader.styles.js.map +1 -0
- package/dist/components/dashboard/sidebar/index.cjs +41 -0
- package/dist/components/dashboard/sidebar/index.cjs.map +1 -0
- package/dist/components/dashboard/sidebar/index.d.ts +6 -0
- package/dist/components/dashboard/sidebar/index.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar/index.js +12 -0
- package/dist/components/dashboard/sidebar/index.js.map +1 -0
- package/dist/components/dashboard/sidebar/sidebar.cjs +50 -0
- package/dist/components/dashboard/sidebar/sidebar.cjs.map +1 -0
- package/dist/components/dashboard/sidebar/sidebar.d.ts +15 -0
- package/dist/components/dashboard/sidebar/sidebar.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar/sidebar.js +26 -0
- package/dist/components/dashboard/sidebar/sidebar.js.map +1 -0
- package/dist/components/dashboard/sidebar/tabs.cjs +52 -0
- package/dist/components/dashboard/sidebar/tabs.cjs.map +1 -0
- package/dist/components/dashboard/sidebar/tabs.d.ts +3 -0
- package/dist/components/dashboard/sidebar/tabs.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar/tabs.js +37 -0
- package/dist/components/dashboard/sidebar/tabs.js.map +1 -0
- package/dist/components/dashboard/sidebar/types.cjs +17 -0
- package/dist/components/dashboard/sidebar/types.cjs.map +1 -0
- package/dist/components/dashboard/sidebar/types.d.ts +36 -0
- package/dist/components/dashboard/sidebar/types.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar/types.js +1 -0
- package/dist/components/dashboard/sidebar/types.js.map +1 -0
- package/dist/components/dashboard/sidebar-nav.cjs +99 -0
- package/dist/components/dashboard/sidebar-nav.cjs.map +1 -0
- package/dist/components/dashboard/sidebar-nav.d.ts +24 -0
- package/dist/components/dashboard/sidebar-nav.d.ts.map +1 -0
- package/dist/components/dashboard/sidebar-nav.js +75 -0
- package/dist/components/dashboard/sidebar-nav.js.map +1 -0
- package/dist/components/dashboard/utils/build-nav.cjs +103 -0
- package/dist/components/dashboard/utils/build-nav.cjs.map +1 -0
- package/dist/components/dashboard/utils/build-nav.d.ts +7 -0
- package/dist/components/dashboard/utils/build-nav.d.ts.map +1 -0
- package/dist/components/dashboard/utils/build-nav.js +78 -0
- package/dist/components/dashboard/utils/build-nav.js.map +1 -0
- package/dist/components/dashboard/utils.cjs +2 -0
- package/dist/components/dashboard/utils.cjs.map +1 -0
- package/dist/components/dashboard/utils.d.ts +1 -0
- package/dist/components/dashboard/utils.d.ts.map +1 -0
- package/dist/components/dashboard/utils.js +1 -0
- package/dist/components/dashboard/utils.js.map +1 -0
- package/dist/components/dashboard/with-dashboard.cjs +189 -0
- package/dist/components/dashboard/with-dashboard.cjs.map +1 -0
- package/dist/components/dashboard/with-dashboard.d.ts +6 -0
- package/dist/components/dashboard/with-dashboard.d.ts.map +1 -0
- package/dist/components/dashboard/with-dashboard.js +175 -0
- package/dist/components/dashboard/with-dashboard.js.map +1 -0
- package/dist/components/detail/DetailLayout.styles.cjs +116 -0
- package/dist/components/detail/DetailLayout.styles.cjs.map +1 -0
- package/dist/components/detail/DetailLayout.styles.d.ts +18 -0
- package/dist/components/detail/DetailLayout.styles.d.ts.map +1 -0
- package/dist/components/detail/DetailLayout.styles.js +74 -0
- package/dist/components/detail/DetailLayout.styles.js.map +1 -0
- package/dist/components/detail/index.cjs +45 -0
- package/dist/components/detail/index.cjs.map +1 -0
- package/dist/components/detail/index.d.ts +2 -0
- package/dist/components/detail/index.d.ts.map +1 -0
- package/dist/components/detail/index.js +23 -0
- package/dist/components/detail/index.js.map +1 -0
- package/dist/components/flowbite/card-images.cjs +104 -0
- package/dist/components/flowbite/card-images.cjs.map +1 -0
- package/dist/components/flowbite/card-images.d.ts +3 -0
- package/dist/components/flowbite/card-images.d.ts.map +1 -0
- package/dist/components/flowbite/card-images.js +84 -0
- package/dist/components/flowbite/card-images.js.map +1 -0
- package/dist/components/flowbite/gallery.cjs +53 -0
- package/dist/components/flowbite/gallery.cjs.map +1 -0
- package/dist/components/flowbite/gallery.d.ts +3 -0
- package/dist/components/flowbite/gallery.d.ts.map +1 -0
- package/dist/components/flowbite/gallery.js +23 -0
- package/dist/components/flowbite/gallery.js.map +1 -0
- package/dist/components/flowbite/masonry.cjs +73 -0
- package/dist/components/flowbite/masonry.cjs.map +1 -0
- package/dist/components/flowbite/masonry.d.ts +13 -0
- package/dist/components/flowbite/masonry.d.ts.map +1 -0
- package/dist/components/flowbite/masonry.js +43 -0
- package/dist/components/flowbite/masonry.js.map +1 -0
- package/dist/components/flowbite/search-hero.cjs +109 -0
- package/dist/components/flowbite/search-hero.cjs.map +1 -0
- package/dist/components/flowbite/search-hero.d.ts +6 -0
- package/dist/components/flowbite/search-hero.d.ts.map +1 -0
- package/dist/components/flowbite/search-hero.js +89 -0
- package/dist/components/flowbite/search-hero.js.map +1 -0
- package/dist/components/generic/copyright.cjs +32 -0
- package/dist/components/generic/copyright.cjs.map +1 -0
- package/dist/components/generic/copyright.d.ts +4 -0
- package/dist/components/generic/copyright.d.ts.map +1 -0
- package/dist/components/generic/copyright.js +8 -0
- package/dist/components/generic/copyright.js.map +1 -0
- package/dist/components/generic/icons.cjs +186 -0
- package/dist/components/generic/icons.cjs.map +1 -0
- package/dist/components/generic/icons.d.ts +19 -0
- package/dist/components/generic/icons.d.ts.map +1 -0
- package/dist/components/generic/icons.js +164 -0
- package/dist/components/generic/icons.js.map +1 -0
- package/dist/components/header/header.cjs +130 -0
- package/dist/components/header/header.cjs.map +1 -0
- package/dist/components/header/header.d.ts +14 -0
- package/dist/components/header/header.d.ts.map +1 -0
- package/dist/components/header/header.js +106 -0
- package/dist/components/header/header.js.map +1 -0
- package/dist/components/header/internal/main-nav.cjs +65 -0
- package/dist/components/header/internal/main-nav.cjs.map +1 -0
- package/dist/components/header/internal/main-nav.d.ts +4 -0
- package/dist/components/header/internal/main-nav.d.ts.map +1 -0
- package/dist/components/header/internal/main-nav.js +31 -0
- package/dist/components/header/internal/main-nav.js.map +1 -0
- package/dist/components/header/internal/mobile-nav.cjs +209 -0
- package/dist/components/header/internal/mobile-nav.cjs.map +1 -0
- package/dist/components/header/internal/mobile-nav.d.ts +2 -0
- package/dist/components/header/internal/mobile-nav.d.ts.map +1 -0
- package/dist/components/header/internal/mobile-nav.js +177 -0
- package/dist/components/header/internal/mobile-nav.js.map +1 -0
- package/dist/components/header/internal/mode-toggle.cjs +73 -0
- package/dist/components/header/internal/mode-toggle.cjs.map +1 -0
- package/dist/components/header/internal/mode-toggle.d.ts +8 -0
- package/dist/components/header/internal/mode-toggle.d.ts.map +1 -0
- package/dist/components/header/internal/mode-toggle.js +54 -0
- package/dist/components/header/internal/mode-toggle.js.map +1 -0
- package/dist/components/header/internal/site-header.cjs +62 -0
- package/dist/components/header/internal/site-header.cjs.map +1 -0
- package/dist/components/header/internal/site-header.d.ts +15 -0
- package/dist/components/header/internal/site-header.d.ts.map +1 -0
- package/dist/components/header/internal/site-header.js +38 -0
- package/dist/components/header/internal/site-header.js.map +1 -0
- package/dist/components/header/langbutton/langbutton.cjs +54 -0
- package/dist/components/header/langbutton/langbutton.cjs.map +1 -0
- package/dist/components/header/langbutton/langbutton.d.ts +4 -0
- package/dist/components/header/langbutton/langbutton.d.ts.map +1 -0
- package/dist/components/header/langbutton/langbutton.js +35 -0
- package/dist/components/header/langbutton/langbutton.js.map +1 -0
- package/dist/components/header/userbutton/user-dropdown.cjs +72 -0
- package/dist/components/header/userbutton/user-dropdown.cjs.map +1 -0
- package/dist/components/header/userbutton/user-dropdown.d.ts +10 -0
- package/dist/components/header/userbutton/user-dropdown.d.ts.map +1 -0
- package/dist/components/header/userbutton/user-dropdown.js +64 -0
- package/dist/components/header/userbutton/user-dropdown.js.map +1 -0
- package/dist/components/header/userbutton/userbutton.cjs +50 -0
- package/dist/components/header/userbutton/userbutton.cjs.map +1 -0
- package/dist/components/header/userbutton/userbutton.d.ts +10 -0
- package/dist/components/header/userbutton/userbutton.d.ts.map +1 -0
- package/dist/components/header/userbutton/userbutton.js +16 -0
- package/dist/components/header/userbutton/userbutton.js.map +1 -0
- package/dist/components/hooks/use-page-nav.cjs +89 -0
- package/dist/components/hooks/use-page-nav.cjs.map +1 -0
- package/dist/components/hooks/use-page-nav.d.ts +5 -0
- package/dist/components/hooks/use-page-nav.d.ts.map +1 -0
- package/dist/components/hooks/use-page-nav.js +61 -0
- package/dist/components/hooks/use-page-nav.js.map +1 -0
- package/dist/components/hooks/use-user-entities.cjs +30 -0
- package/dist/components/hooks/use-user-entities.cjs.map +1 -0
- package/dist/components/hooks/use-user-entities.d.ts +2 -0
- package/dist/components/hooks/use-user-entities.d.ts.map +1 -0
- package/dist/components/hooks/use-user-entities.js +6 -0
- package/dist/components/hooks/use-user-entities.js.map +1 -0
- package/dist/components/icons/apple.cjs +47 -0
- package/dist/components/icons/apple.cjs.map +1 -0
- package/dist/components/icons/apple.d.ts +2 -0
- package/dist/components/icons/apple.d.ts.map +1 -0
- package/dist/components/icons/apple.js +23 -0
- package/dist/components/icons/apple.js.map +1 -0
- package/dist/components/icons/facebook.cjs +49 -0
- package/dist/components/icons/facebook.cjs.map +1 -0
- package/dist/components/icons/facebook.d.ts +2 -0
- package/dist/components/icons/facebook.d.ts.map +1 -0
- package/dist/components/icons/facebook.js +25 -0
- package/dist/components/icons/facebook.js.map +1 -0
- package/dist/components/icons/github.cjs +49 -0
- package/dist/components/icons/github.cjs.map +1 -0
- package/dist/components/icons/github.d.ts +2 -0
- package/dist/components/icons/github.d.ts.map +1 -0
- package/dist/components/icons/github.js +25 -0
- package/dist/components/icons/github.js.map +1 -0
- package/dist/components/icons/google.cjs +49 -0
- package/dist/components/icons/google.cjs.map +1 -0
- package/dist/components/icons/google.d.ts +2 -0
- package/dist/components/icons/google.d.ts.map +1 -0
- package/dist/components/icons/google.js +25 -0
- package/dist/components/icons/google.js.map +1 -0
- package/dist/components/icons/logo.cjs +49 -0
- package/dist/components/icons/logo.cjs.map +1 -0
- package/dist/components/icons/logo.d.ts +4 -0
- package/dist/components/icons/logo.d.ts.map +1 -0
- package/dist/components/icons/logo.js +25 -0
- package/dist/components/icons/logo.js.map +1 -0
- package/dist/components/lightbox/GallerySection.cjs +53 -0
- package/dist/components/lightbox/GallerySection.cjs.map +1 -0
- package/dist/components/lightbox/GallerySection.d.ts +12 -0
- package/dist/components/lightbox/GallerySection.d.ts.map +1 -0
- package/dist/components/lightbox/GallerySection.js +29 -0
- package/dist/components/lightbox/GallerySection.js.map +1 -0
- package/dist/components/lightbox/ImageLightbox.cjs +244 -0
- package/dist/components/lightbox/ImageLightbox.cjs.map +1 -0
- package/dist/components/lightbox/ImageLightbox.d.ts +3 -0
- package/dist/components/lightbox/ImageLightbox.d.ts.map +1 -0
- package/dist/components/lightbox/ImageLightbox.js +220 -0
- package/dist/components/lightbox/ImageLightbox.js.map +1 -0
- package/dist/components/lightbox/ImageLightbox.types.cjs +17 -0
- package/dist/components/lightbox/ImageLightbox.types.cjs.map +1 -0
- package/dist/components/lightbox/ImageLightbox.types.d.ts +28 -0
- package/dist/components/lightbox/ImageLightbox.types.d.ts.map +1 -0
- package/dist/components/lightbox/ImageLightbox.types.js +1 -0
- package/dist/components/lightbox/ImageLightbox.types.js.map +1 -0
- package/dist/components/lightbox/index.cjs +38 -0
- package/dist/components/lightbox/index.cjs.map +1 -0
- package/dist/components/lightbox/index.d.ts +8 -0
- package/dist/components/lightbox/index.d.ts.map +1 -0
- package/dist/components/lightbox/index.js +11 -0
- package/dist/components/lightbox/index.js.map +1 -0
- package/dist/components/lightbox/useEntityLightbox.cjs +57 -0
- package/dist/components/lightbox/useEntityLightbox.cjs.map +1 -0
- package/dist/components/lightbox/useEntityLightbox.d.ts +25 -0
- package/dist/components/lightbox/useEntityLightbox.d.ts.map +1 -0
- package/dist/components/lightbox/useEntityLightbox.js +33 -0
- package/dist/components/lightbox/useEntityLightbox.js.map +1 -0
- package/dist/components/lightbox/useLightbox.cjs +59 -0
- package/dist/components/lightbox/useLightbox.cjs.map +1 -0
- package/dist/components/lightbox/useLightbox.d.ts +9 -0
- package/dist/components/lightbox/useLightbox.d.ts.map +1 -0
- package/dist/components/lightbox/useLightbox.js +35 -0
- package/dist/components/lightbox/useLightbox.js.map +1 -0
- package/dist/components/search/search.cjs +71 -0
- package/dist/components/search/search.cjs.map +1 -0
- package/dist/components/search/search.d.ts +2 -0
- package/dist/components/search/search.d.ts.map +1 -0
- package/dist/components/search/search.js +63 -0
- package/dist/components/search/search.js.map +1 -0
- package/dist/components/tailwind/contact.cjs +380 -0
- package/dist/components/tailwind/contact.cjs.map +1 -0
- package/dist/components/tailwind/contact.d.ts +2 -0
- package/dist/components/tailwind/contact.d.ts.map +1 -0
- package/dist/components/tailwind/contact.js +356 -0
- package/dist/components/tailwind/contact.js.map +1 -0
- package/dist/components/tailwind/content-page.cjs +58 -0
- package/dist/components/tailwind/content-page.cjs.map +1 -0
- package/dist/components/tailwind/content-page.d.ts +18 -0
- package/dist/components/tailwind/content-page.d.ts.map +1 -0
- package/dist/components/tailwind/content-page.js +32 -0
- package/dist/components/tailwind/content-page.js.map +1 -0
- package/dist/components/tailwind/feature.cjs +95 -0
- package/dist/components/tailwind/feature.cjs.map +1 -0
- package/dist/components/tailwind/feature.d.ts +2 -0
- package/dist/components/tailwind/feature.d.ts.map +1 -0
- package/dist/components/tailwind/feature.js +75 -0
- package/dist/components/tailwind/feature.js.map +1 -0
- package/dist/components/tailwind/featurelist.cjs +99 -0
- package/dist/components/tailwind/featurelist.cjs.map +1 -0
- package/dist/components/tailwind/featurelist.d.ts +2 -0
- package/dist/components/tailwind/featurelist.d.ts.map +1 -0
- package/dist/components/tailwind/featurelist.js +65 -0
- package/dist/components/tailwind/featurelist.js.map +1 -0
- package/dist/components/tailwind/footer.cjs +104 -0
- package/dist/components/tailwind/footer.cjs.map +1 -0
- package/dist/components/tailwind/footer.d.ts +2 -0
- package/dist/components/tailwind/footer.d.ts.map +1 -0
- package/dist/components/tailwind/footer.js +80 -0
- package/dist/components/tailwind/footer.js.map +1 -0
- package/dist/components/tailwind/hero.cjs +130 -0
- package/dist/components/tailwind/hero.cjs.map +1 -0
- package/dist/components/tailwind/hero.d.ts +22 -0
- package/dist/components/tailwind/hero.d.ts.map +1 -0
- package/dist/components/tailwind/hero.js +106 -0
- package/dist/components/tailwind/hero.js.map +1 -0
- package/dist/components/tailwind/pricing.cjs +214 -0
- package/dist/components/tailwind/pricing.cjs.map +1 -0
- package/dist/components/tailwind/pricing.d.ts +6 -0
- package/dist/components/tailwind/pricing.d.ts.map +1 -0
- package/dist/components/tailwind/pricing.js +190 -0
- package/dist/components/tailwind/pricing.js.map +1 -0
- package/dist/components/tailwind/privacy.cjs +138 -0
- package/dist/components/tailwind/privacy.cjs.map +1 -0
- package/dist/components/tailwind/privacy.d.ts +2 -0
- package/dist/components/tailwind/privacy.d.ts.map +1 -0
- package/dist/components/tailwind/privacy.js +114 -0
- package/dist/components/tailwind/privacy.js.map +1 -0
- package/dist/components/tailwind/providerIcons.cjs +48 -0
- package/dist/components/tailwind/providerIcons.cjs.map +1 -0
- package/dist/components/tailwind/providerIcons.d.ts +4 -0
- package/dist/components/tailwind/providerIcons.d.ts.map +1 -0
- package/dist/components/tailwind/providerIcons.js +24 -0
- package/dist/components/tailwind/providerIcons.js.map +1 -0
- package/dist/components/ui/avatar.cjs +120 -0
- package/dist/components/ui/avatar.cjs.map +1 -0
- package/dist/components/ui/avatar.d.ts +7 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar.js +86 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/breadcrumb.cjs +63 -0
- package/dist/components/ui/breadcrumb.cjs.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +10 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.js +29 -0
- package/dist/components/ui/breadcrumb.js.map +1 -0
- package/dist/components/ui/button.cjs +105 -0
- package/dist/components/ui/button.cjs.map +1 -0
- package/dist/components/ui/button.d.ts +11 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +82 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/card.cjs +129 -0
- package/dist/components/ui/card.cjs.map +1 -0
- package/dist/components/ui/card.d.ts +9 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +102 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/checkbox.cjs +98 -0
- package/dist/components/ui/checkbox.cjs.map +1 -0
- package/dist/components/ui/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox.js +66 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/command.cjs +200 -0
- package/dist/components/ui/command.cjs.map +1 -0
- package/dist/components/ui/command.d.ts +83 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/command.js +160 -0
- package/dist/components/ui/command.js.map +1 -0
- package/dist/components/ui/dialog.cjs +204 -0
- package/dist/components/ui/dialog.cjs.map +1 -0
- package/dist/components/ui/dialog.d.ts +14 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +163 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/drawer.cjs +191 -0
- package/dist/components/ui/drawer.cjs.map +1 -0
- package/dist/components/ui/drawer.d.ts +14 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/drawer.js +160 -0
- package/dist/components/ui/drawer.js.map +1 -0
- package/dist/components/ui/dropdown-menu.cjs +323 -0
- package/dist/components/ui/dropdown-menu.cjs.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +26 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +277 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/input.cjs +72 -0
- package/dist/components/ui/input.cjs.map +1 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +50 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/label.cjs +85 -0
- package/dist/components/ui/label.cjs.map +1 -0
- package/dist/components/ui/label.d.ts +5 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +53 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/menubar.cjs +351 -0
- package/dist/components/ui/menubar.cjs.map +1 -0
- package/dist/components/ui/menubar.d.ts +27 -0
- package/dist/components/ui/menubar.d.ts.map +1 -0
- package/dist/components/ui/menubar.js +304 -0
- package/dist/components/ui/menubar.js.map +1 -0
- package/dist/components/ui/navigation-menu.cjs +257 -0
- package/dist/components/ui/navigation-menu.cjs.map +1 -0
- package/dist/components/ui/navigation-menu.d.ts +15 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.js +217 -0
- package/dist/components/ui/navigation-menu.js.map +1 -0
- package/dist/components/ui/popover.cjs +109 -0
- package/dist/components/ui/popover.cjs.map +1 -0
- package/dist/components/ui/popover.d.ts +8 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +74 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/resizable.cjs +124 -0
- package/dist/components/ui/resizable.cjs.map +1 -0
- package/dist/components/ui/resizable.d.ts +26 -0
- package/dist/components/ui/resizable.d.ts.map +1 -0
- package/dist/components/ui/resizable.js +90 -0
- package/dist/components/ui/resizable.js.map +1 -0
- package/dist/components/ui/scroll-area.cjs +132 -0
- package/dist/components/ui/scroll-area.cjs.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +6 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.js +99 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/select.cjs +254 -0
- package/dist/components/ui/select.cjs.map +1 -0
- package/dist/components/ui/select.d.ts +14 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +213 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/sheet.cjs +203 -0
- package/dist/components/ui/sheet.cjs.map +1 -0
- package/dist/components/ui/sheet.d.ts +14 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +164 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/skeleton.cjs +66 -0
- package/dist/components/ui/skeleton.cjs.map +1 -0
- package/dist/components/ui/skeleton.d.ts +3 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +44 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/spinner.cjs +128 -0
- package/dist/components/ui/spinner.cjs.map +1 -0
- package/dist/components/ui/spinner.d.ts +12 -0
- package/dist/components/ui/spinner.d.ts.map +1 -0
- package/dist/components/ui/spinner.js +105 -0
- package/dist/components/ui/spinner.js.map +1 -0
- package/dist/components/ui/switch.cjs +98 -0
- package/dist/components/ui/switch.cjs.map +1 -0
- package/dist/components/ui/switch.d.ts +5 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/switch.js +66 -0
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/tabs.cjs +136 -0
- package/dist/components/ui/tabs.cjs.map +1 -0
- package/dist/components/ui/tabs.d.ts +8 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +101 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.cjs +69 -0
- package/dist/components/ui/textarea.cjs.map +1 -0
- package/dist/components/ui/textarea.d.ts +4 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +47 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/toast.cjs +169 -0
- package/dist/components/ui/toast.cjs.map +1 -0
- package/dist/components/ui/toast.d.ts +15 -0
- package/dist/components/ui/toast.d.ts.map +1 -0
- package/dist/components/ui/toast.js +131 -0
- package/dist/components/ui/toast.js.map +1 -0
- package/dist/components/ui/toaster.cjs +78 -0
- package/dist/components/ui/toaster.cjs.map +1 -0
- package/dist/components/ui/toaster.d.ts +2 -0
- package/dist/components/ui/toaster.d.ts.map +1 -0
- package/dist/components/ui/toaster.js +63 -0
- package/dist/components/ui/toaster.js.map +1 -0
- package/dist/components/ui/tooltip.cjs +126 -0
- package/dist/components/ui/tooltip.cjs.map +1 -0
- package/dist/components/ui/tooltip.d.ts +8 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +91 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/components/ui/use-toast.cjs +187 -0
- package/dist/components/ui/use-toast.cjs.map +1 -0
- package/dist/components/ui/use-toast.d.ts +45 -0
- package/dist/components/ui/use-toast.d.ts.map +1 -0
- package/dist/components/ui/use-toast.js +153 -0
- package/dist/components/ui/use-toast.js.map +1 -0
- package/dist/components/upgrade-prompt/UpgradePrompt.cjs +80 -0
- package/dist/components/upgrade-prompt/UpgradePrompt.cjs.map +1 -0
- package/dist/components/upgrade-prompt/UpgradePrompt.d.ts +12 -0
- package/dist/components/upgrade-prompt/UpgradePrompt.d.ts.map +1 -0
- package/dist/components/upgrade-prompt/UpgradePrompt.js +46 -0
- package/dist/components/upgrade-prompt/UpgradePrompt.js.map +1 -0
- package/dist/components/upgrade-prompt/index.cjs +29 -0
- package/dist/components/upgrade-prompt/index.cjs.map +1 -0
- package/dist/components/upgrade-prompt/index.d.ts +3 -0
- package/dist/components/upgrade-prompt/index.d.ts.map +1 -0
- package/dist/components/upgrade-prompt/index.js +5 -0
- package/dist/components/upgrade-prompt/index.js.map +1 -0
- package/dist/config/docs.d.ts +8 -0
- package/dist/config/docs.d.ts.map +1 -0
- package/dist/config/site.d.ts +12 -0
- package/dist/config/site.d.ts.map +1 -0
- package/dist/hooks/useRecaptcha.d.ts +16 -0
- package/dist/hooks/useRecaptcha.d.ts.map +1 -0
- package/dist/lib/utils.cjs +48 -0
- package/dist/lib/utils.cjs.map +1 -0
- package/dist/lib/utils.d.cjs +17 -0
- package/dist/lib/utils.d.cjs.map +1 -0
- package/dist/lib/utils.d.js +1 -0
- package/dist/lib/utils.d.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +22 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/styles.css +178 -0
- package/dist/types/nav.cjs +17 -0
- package/dist/types/nav.cjs.map +1 -0
- package/dist/types/nav.d.ts +17 -0
- package/dist/types/nav.d.ts.map +1 -0
- package/dist/types/nav.js +1 -0
- package/dist/types/nav.js.map +1 -0
- package/dist/types/sitemap.cjs +17 -0
- package/dist/types/sitemap.cjs.map +1 -0
- package/dist/types/sitemap.d.ts +19 -0
- package/dist/types/sitemap.d.ts.map +1 -0
- package/dist/types/sitemap.js +1 -0
- package/dist/types/sitemap.js.map +1 -0
- package/dist/types/unist.cjs +17 -0
- package/dist/types/unist.cjs.map +1 -0
- package/dist/types/unist.js +1 -0
- package/dist/types/unist.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var ImageLightbox_exports = {};
|
|
21
|
+
__export(ImageLightbox_exports, {
|
|
22
|
+
ImageLightbox: () => ImageLightbox
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(ImageLightbox_exports);
|
|
25
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var import_react_dom = require("react-dom");
|
|
28
|
+
var import_button = require("../ui/button");
|
|
29
|
+
function ImageLightbox({
|
|
30
|
+
images,
|
|
31
|
+
isOpen,
|
|
32
|
+
initialIndex,
|
|
33
|
+
onClose,
|
|
34
|
+
onNavigate
|
|
35
|
+
}) {
|
|
36
|
+
const [currentIndex, setCurrentIndex] = (0, import_react.useState)(initialIndex);
|
|
37
|
+
const [mounted, setMounted] = (0, import_react.useState)(false);
|
|
38
|
+
const imageRef = (0, import_react.useRef)(null);
|
|
39
|
+
(0, import_react.useEffect)(() => {
|
|
40
|
+
setMounted(true);
|
|
41
|
+
return () => setMounted(false);
|
|
42
|
+
}, []);
|
|
43
|
+
(0, import_react.useEffect)(() => {
|
|
44
|
+
if (isOpen) {
|
|
45
|
+
setCurrentIndex(initialIndex);
|
|
46
|
+
}
|
|
47
|
+
}, [isOpen, initialIndex]);
|
|
48
|
+
(0, import_react.useEffect)(() => {
|
|
49
|
+
if (isOpen) {
|
|
50
|
+
document.body.style.overflow = "hidden";
|
|
51
|
+
return () => {
|
|
52
|
+
document.body.style.overflow = "";
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}, [isOpen]);
|
|
56
|
+
const next = (0, import_react.useCallback)(() => {
|
|
57
|
+
setCurrentIndex((prev2) => {
|
|
58
|
+
const newIndex = Math.min(prev2 + 1, images.length - 1);
|
|
59
|
+
if (onNavigate) onNavigate(newIndex);
|
|
60
|
+
return newIndex;
|
|
61
|
+
});
|
|
62
|
+
}, [images.length, onNavigate]);
|
|
63
|
+
const prev = (0, import_react.useCallback)(() => {
|
|
64
|
+
setCurrentIndex((prev2) => {
|
|
65
|
+
const newIndex = Math.max(prev2 - 1, 0);
|
|
66
|
+
if (onNavigate) onNavigate(newIndex);
|
|
67
|
+
return newIndex;
|
|
68
|
+
});
|
|
69
|
+
}, [onNavigate]);
|
|
70
|
+
(0, import_react.useEffect)(() => {
|
|
71
|
+
if (!isOpen) return;
|
|
72
|
+
const handleKeyDown = (e) => {
|
|
73
|
+
if (e.key === "Escape") onClose();
|
|
74
|
+
if (e.key === "ArrowLeft") prev();
|
|
75
|
+
if (e.key === "ArrowRight") next();
|
|
76
|
+
};
|
|
77
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
78
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
79
|
+
}, [isOpen, onClose, prev, next]);
|
|
80
|
+
const handleImageError = (e) => {
|
|
81
|
+
var _a;
|
|
82
|
+
e.currentTarget.src = "/placeholder-image.png";
|
|
83
|
+
console.error("Failed to load image:", (_a = images[currentIndex]) == null ? void 0 : _a.url);
|
|
84
|
+
};
|
|
85
|
+
(0, import_react.useEffect)(() => {
|
|
86
|
+
if (!isOpen) return;
|
|
87
|
+
let touchStartX = 0;
|
|
88
|
+
let touchEndX = 0;
|
|
89
|
+
const handleTouchStart = (e) => {
|
|
90
|
+
touchStartX = e.changedTouches[0].screenX;
|
|
91
|
+
};
|
|
92
|
+
const handleTouchEnd = (e) => {
|
|
93
|
+
touchEndX = e.changedTouches[0].screenX;
|
|
94
|
+
const swipeDistance = touchStartX - touchEndX;
|
|
95
|
+
const minSwipeDistance = 50;
|
|
96
|
+
if (Math.abs(swipeDistance) > minSwipeDistance) {
|
|
97
|
+
if (swipeDistance > 0 && currentIndex < images.length - 1) {
|
|
98
|
+
next();
|
|
99
|
+
} else if (swipeDistance < 0 && currentIndex > 0) {
|
|
100
|
+
prev();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
window.addEventListener("touchstart", handleTouchStart, { passive: true });
|
|
105
|
+
window.addEventListener("touchend", handleTouchEnd, { passive: true });
|
|
106
|
+
return () => {
|
|
107
|
+
window.removeEventListener("touchstart", handleTouchStart);
|
|
108
|
+
window.removeEventListener("touchend", handleTouchEnd);
|
|
109
|
+
};
|
|
110
|
+
}, [isOpen, currentIndex, images.length, next, prev]);
|
|
111
|
+
const handleBackdropClick = (e) => {
|
|
112
|
+
if (e.target === e.currentTarget) {
|
|
113
|
+
onClose();
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
if (!images || images.length === 0) return null;
|
|
117
|
+
if (!mounted || !isOpen) return null;
|
|
118
|
+
const currentImage = images[currentIndex];
|
|
119
|
+
const isFirstImage = currentIndex === 0;
|
|
120
|
+
const isLastImage = currentIndex === images.length - 1;
|
|
121
|
+
const isSingleImage = images.length === 1;
|
|
122
|
+
return (0, import_react_dom.createPortal)(
|
|
123
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
124
|
+
"div",
|
|
125
|
+
{
|
|
126
|
+
className: "animate-in fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/90 duration-200",
|
|
127
|
+
role: "dialog",
|
|
128
|
+
"aria-modal": "true",
|
|
129
|
+
"aria-label": "Image lightbox",
|
|
130
|
+
onClick: handleBackdropClick,
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
133
|
+
import_button.Button,
|
|
134
|
+
{
|
|
135
|
+
onClick: onClose,
|
|
136
|
+
variant: "ghost",
|
|
137
|
+
size: "icon",
|
|
138
|
+
className: "absolute right-4 top-4 z-10 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white md:h-8 md:w-8",
|
|
139
|
+
"aria-label": "Close lightbox",
|
|
140
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
141
|
+
"svg",
|
|
142
|
+
{
|
|
143
|
+
className: "h-6 w-6",
|
|
144
|
+
fill: "none",
|
|
145
|
+
stroke: "currentColor",
|
|
146
|
+
viewBox: "0 0 24 24",
|
|
147
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
148
|
+
"path",
|
|
149
|
+
{
|
|
150
|
+
strokeLinecap: "round",
|
|
151
|
+
strokeLinejoin: "round",
|
|
152
|
+
strokeWidth: 2,
|
|
153
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
154
|
+
}
|
|
155
|
+
)
|
|
156
|
+
}
|
|
157
|
+
)
|
|
158
|
+
}
|
|
159
|
+
),
|
|
160
|
+
!isSingleImage && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
161
|
+
import_button.Button,
|
|
162
|
+
{
|
|
163
|
+
onClick: prev,
|
|
164
|
+
disabled: isFirstImage,
|
|
165
|
+
variant: "ghost",
|
|
166
|
+
size: "icon",
|
|
167
|
+
className: "absolute left-4 z-10 h-12 w-12 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white disabled:cursor-not-allowed disabled:opacity-50 md:left-8 md:opacity-0 md:hover:opacity-100",
|
|
168
|
+
"aria-label": "Previous image",
|
|
169
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
170
|
+
"svg",
|
|
171
|
+
{
|
|
172
|
+
className: "h-6 w-6",
|
|
173
|
+
fill: "none",
|
|
174
|
+
stroke: "currentColor",
|
|
175
|
+
viewBox: "0 0 24 24",
|
|
176
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
177
|
+
"path",
|
|
178
|
+
{
|
|
179
|
+
strokeLinecap: "round",
|
|
180
|
+
strokeLinejoin: "round",
|
|
181
|
+
strokeWidth: 2,
|
|
182
|
+
d: "M15 19l-7-7 7-7"
|
|
183
|
+
}
|
|
184
|
+
)
|
|
185
|
+
}
|
|
186
|
+
)
|
|
187
|
+
}
|
|
188
|
+
),
|
|
189
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "relative mx-4 flex max-h-[90vh] max-w-[90vw] items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
190
|
+
"img",
|
|
191
|
+
{
|
|
192
|
+
ref: imageRef,
|
|
193
|
+
src: currentImage.url,
|
|
194
|
+
alt: currentImage.alt,
|
|
195
|
+
className: "max-h-[90vh] max-w-[90vw] object-contain transition-opacity duration-150",
|
|
196
|
+
style: { touchAction: "pan-x pan-y pinch-zoom" },
|
|
197
|
+
onError: handleImageError
|
|
198
|
+
}
|
|
199
|
+
) }),
|
|
200
|
+
!isSingleImage && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
201
|
+
import_button.Button,
|
|
202
|
+
{
|
|
203
|
+
onClick: next,
|
|
204
|
+
disabled: isLastImage,
|
|
205
|
+
variant: "ghost",
|
|
206
|
+
size: "icon",
|
|
207
|
+
className: "absolute right-4 z-10 h-12 w-12 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white disabled:cursor-not-allowed disabled:opacity-50 md:right-8 md:opacity-0 md:hover:opacity-100",
|
|
208
|
+
"aria-label": "Next image",
|
|
209
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
210
|
+
"svg",
|
|
211
|
+
{
|
|
212
|
+
className: "h-6 w-6",
|
|
213
|
+
fill: "none",
|
|
214
|
+
stroke: "currentColor",
|
|
215
|
+
viewBox: "0 0 24 24",
|
|
216
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
217
|
+
"path",
|
|
218
|
+
{
|
|
219
|
+
strokeLinecap: "round",
|
|
220
|
+
strokeLinejoin: "round",
|
|
221
|
+
strokeWidth: 2,
|
|
222
|
+
d: "M9 5l7 7-7 7"
|
|
223
|
+
}
|
|
224
|
+
)
|
|
225
|
+
}
|
|
226
|
+
)
|
|
227
|
+
}
|
|
228
|
+
),
|
|
229
|
+
!isSingleImage && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "absolute bottom-4 left-1/2 -translate-x-1/2 rounded-full bg-black/50 px-4 py-2 text-sm text-white", children: [
|
|
230
|
+
currentIndex + 1,
|
|
231
|
+
" / ",
|
|
232
|
+
images.length
|
|
233
|
+
] })
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
),
|
|
237
|
+
document.body
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
241
|
+
0 && (module.exports = {
|
|
242
|
+
ImageLightbox
|
|
243
|
+
});
|
|
244
|
+
//# sourceMappingURL=ImageLightbox.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../components/lightbox/ImageLightbox.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef, useState, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Button } from '../ui/button'\nimport type { ImageLightboxProps } from './ImageLightbox.types'\n\nexport function ImageLightbox({\n images,\n isOpen,\n initialIndex,\n onClose,\n onNavigate,\n}: ImageLightboxProps) {\n const [currentIndex, setCurrentIndex] = useState(initialIndex)\n const [mounted, setMounted] = useState(false)\n const imageRef = useRef<HTMLImageElement>(null)\n\n // Track if component is mounted (client-side only)\n useEffect(() => {\n setMounted(true)\n return () => setMounted(false)\n }, [])\n\n // Sync with initialIndex when lightbox opens\n useEffect(() => {\n if (isOpen) {\n setCurrentIndex(initialIndex)\n }\n }, [isOpen, initialIndex])\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = ''\n }\n }\n }, [isOpen])\n\n // Navigation handlers\n const next = useCallback(() => {\n setCurrentIndex((prev) => {\n const newIndex = Math.min(prev + 1, images.length - 1)\n if (onNavigate) onNavigate(newIndex)\n return newIndex\n })\n }, [images.length, onNavigate])\n\n const prev = useCallback(() => {\n setCurrentIndex((prev) => {\n const newIndex = Math.max(prev - 1, 0)\n if (onNavigate) onNavigate(newIndex)\n return newIndex\n })\n }, [onNavigate])\n\n // Keyboard navigation\n useEffect(() => {\n if (!isOpen) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n if (e.key === 'ArrowLeft') prev()\n if (e.key === 'ArrowRight') next()\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [isOpen, onClose, prev, next])\n\n // Handle image errors\n const handleImageError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n e.currentTarget.src = '/placeholder-image.png'\n console.error('Failed to load image:', images[currentIndex]?.url)\n }\n\n // Handle swipe gestures\n useEffect(() => {\n if (!isOpen) return\n\n let touchStartX = 0\n let touchEndX = 0\n\n const handleTouchStart = (e: TouchEvent) => {\n touchStartX = e.changedTouches[0].screenX\n }\n\n const handleTouchEnd = (e: TouchEvent) => {\n touchEndX = e.changedTouches[0].screenX\n const swipeDistance = touchStartX - touchEndX\n const minSwipeDistance = 50\n\n if (Math.abs(swipeDistance) > minSwipeDistance) {\n if (swipeDistance > 0 && currentIndex < images.length - 1) {\n next()\n } else if (swipeDistance < 0 && currentIndex > 0) {\n prev()\n }\n }\n }\n\n window.addEventListener('touchstart', handleTouchStart, { passive: true })\n window.addEventListener('touchend', handleTouchEnd, { passive: true })\n\n return () => {\n window.removeEventListener('touchstart', handleTouchStart)\n window.removeEventListener('touchend', handleTouchEnd)\n }\n }, [isOpen, currentIndex, images.length, next, prev])\n\n // Handle backdrop click\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose()\n }\n }\n\n // Empty gallery\n if (!images || images.length === 0) return null\n\n // Not open or not mounted (SSR safety)\n if (!mounted || !isOpen) return null\n\n const currentImage = images[currentIndex]\n const isFirstImage = currentIndex === 0\n const isLastImage = currentIndex === images.length - 1\n const isSingleImage = images.length === 1\n\n return createPortal(\n <div\n className=\"animate-in fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/90 duration-200\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Image lightbox\"\n onClick={handleBackdropClick}\n >\n {/* Close button */}\n <Button\n onClick={onClose}\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-4 top-4 z-10 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white md:h-8 md:w-8\"\n aria-label=\"Close lightbox\"\n >\n <svg\n className=\"h-6 w-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </Button>\n\n {/* Previous button */}\n {!isSingleImage && (\n <Button\n onClick={prev}\n disabled={isFirstImage}\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute left-4 z-10 h-12 w-12 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white disabled:cursor-not-allowed disabled:opacity-50 md:left-8 md:opacity-0 md:hover:opacity-100\"\n aria-label=\"Previous image\"\n >\n <svg\n className=\"h-6 w-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </Button>\n )}\n\n {/* Image container */}\n <div className=\"relative mx-4 flex max-h-[90vh] max-w-[90vw] items-center justify-center\">\n <img\n ref={imageRef}\n src={currentImage.url}\n alt={currentImage.alt}\n className=\"max-h-[90vh] max-w-[90vw] object-contain transition-opacity duration-150\"\n style={{ touchAction: 'pan-x pan-y pinch-zoom' }}\n onError={handleImageError}\n />\n </div>\n\n {/* Next button */}\n {!isSingleImage && (\n <Button\n onClick={next}\n disabled={isLastImage}\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-4 z-10 h-12 w-12 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white disabled:cursor-not-allowed disabled:opacity-50 md:right-8 md:opacity-0 md:hover:opacity-100\"\n aria-label=\"Next image\"\n >\n <svg\n className=\"h-6 w-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </Button>\n )}\n\n {/* Image counter */}\n {!isSingleImage && (\n <div className=\"absolute bottom-4 left-1/2 -translate-x-1/2 rounded-full bg-black/50 px-4 py-2 text-sm text-white\">\n {currentIndex + 1} / {images.length}\n </div>\n )}\n </div>,\n document.body,\n )\n}\n"],"mappings":"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","names":["prev"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageLightbox.d.ts","sourceRoot":"","sources":["../../../components/lightbox/ImageLightbox.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE/D,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,MAAM,EACN,YAAY,EACZ,OAAO,EACP,UAAU,GACX,EAAE,kBAAkB,sCA6NpB"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useState, useCallback } from "react";
|
|
4
|
+
import { createPortal } from "react-dom";
|
|
5
|
+
import { Button } from "../ui/button";
|
|
6
|
+
function ImageLightbox({
|
|
7
|
+
images,
|
|
8
|
+
isOpen,
|
|
9
|
+
initialIndex,
|
|
10
|
+
onClose,
|
|
11
|
+
onNavigate
|
|
12
|
+
}) {
|
|
13
|
+
const [currentIndex, setCurrentIndex] = useState(initialIndex);
|
|
14
|
+
const [mounted, setMounted] = useState(false);
|
|
15
|
+
const imageRef = useRef(null);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
setMounted(true);
|
|
18
|
+
return () => setMounted(false);
|
|
19
|
+
}, []);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (isOpen) {
|
|
22
|
+
setCurrentIndex(initialIndex);
|
|
23
|
+
}
|
|
24
|
+
}, [isOpen, initialIndex]);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (isOpen) {
|
|
27
|
+
document.body.style.overflow = "hidden";
|
|
28
|
+
return () => {
|
|
29
|
+
document.body.style.overflow = "";
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}, [isOpen]);
|
|
33
|
+
const next = useCallback(() => {
|
|
34
|
+
setCurrentIndex((prev2) => {
|
|
35
|
+
const newIndex = Math.min(prev2 + 1, images.length - 1);
|
|
36
|
+
if (onNavigate) onNavigate(newIndex);
|
|
37
|
+
return newIndex;
|
|
38
|
+
});
|
|
39
|
+
}, [images.length, onNavigate]);
|
|
40
|
+
const prev = useCallback(() => {
|
|
41
|
+
setCurrentIndex((prev2) => {
|
|
42
|
+
const newIndex = Math.max(prev2 - 1, 0);
|
|
43
|
+
if (onNavigate) onNavigate(newIndex);
|
|
44
|
+
return newIndex;
|
|
45
|
+
});
|
|
46
|
+
}, [onNavigate]);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!isOpen) return;
|
|
49
|
+
const handleKeyDown = (e) => {
|
|
50
|
+
if (e.key === "Escape") onClose();
|
|
51
|
+
if (e.key === "ArrowLeft") prev();
|
|
52
|
+
if (e.key === "ArrowRight") next();
|
|
53
|
+
};
|
|
54
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
55
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
56
|
+
}, [isOpen, onClose, prev, next]);
|
|
57
|
+
const handleImageError = (e) => {
|
|
58
|
+
var _a;
|
|
59
|
+
e.currentTarget.src = "/placeholder-image.png";
|
|
60
|
+
console.error("Failed to load image:", (_a = images[currentIndex]) == null ? void 0 : _a.url);
|
|
61
|
+
};
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
if (!isOpen) return;
|
|
64
|
+
let touchStartX = 0;
|
|
65
|
+
let touchEndX = 0;
|
|
66
|
+
const handleTouchStart = (e) => {
|
|
67
|
+
touchStartX = e.changedTouches[0].screenX;
|
|
68
|
+
};
|
|
69
|
+
const handleTouchEnd = (e) => {
|
|
70
|
+
touchEndX = e.changedTouches[0].screenX;
|
|
71
|
+
const swipeDistance = touchStartX - touchEndX;
|
|
72
|
+
const minSwipeDistance = 50;
|
|
73
|
+
if (Math.abs(swipeDistance) > minSwipeDistance) {
|
|
74
|
+
if (swipeDistance > 0 && currentIndex < images.length - 1) {
|
|
75
|
+
next();
|
|
76
|
+
} else if (swipeDistance < 0 && currentIndex > 0) {
|
|
77
|
+
prev();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
window.addEventListener("touchstart", handleTouchStart, { passive: true });
|
|
82
|
+
window.addEventListener("touchend", handleTouchEnd, { passive: true });
|
|
83
|
+
return () => {
|
|
84
|
+
window.removeEventListener("touchstart", handleTouchStart);
|
|
85
|
+
window.removeEventListener("touchend", handleTouchEnd);
|
|
86
|
+
};
|
|
87
|
+
}, [isOpen, currentIndex, images.length, next, prev]);
|
|
88
|
+
const handleBackdropClick = (e) => {
|
|
89
|
+
if (e.target === e.currentTarget) {
|
|
90
|
+
onClose();
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
if (!images || images.length === 0) return null;
|
|
94
|
+
if (!mounted || !isOpen) return null;
|
|
95
|
+
const currentImage = images[currentIndex];
|
|
96
|
+
const isFirstImage = currentIndex === 0;
|
|
97
|
+
const isLastImage = currentIndex === images.length - 1;
|
|
98
|
+
const isSingleImage = images.length === 1;
|
|
99
|
+
return createPortal(
|
|
100
|
+
/* @__PURE__ */ jsxs(
|
|
101
|
+
"div",
|
|
102
|
+
{
|
|
103
|
+
className: "animate-in fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/90 duration-200",
|
|
104
|
+
role: "dialog",
|
|
105
|
+
"aria-modal": "true",
|
|
106
|
+
"aria-label": "Image lightbox",
|
|
107
|
+
onClick: handleBackdropClick,
|
|
108
|
+
children: [
|
|
109
|
+
/* @__PURE__ */ jsx(
|
|
110
|
+
Button,
|
|
111
|
+
{
|
|
112
|
+
onClick: onClose,
|
|
113
|
+
variant: "ghost",
|
|
114
|
+
size: "icon",
|
|
115
|
+
className: "absolute right-4 top-4 z-10 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white md:h-8 md:w-8",
|
|
116
|
+
"aria-label": "Close lightbox",
|
|
117
|
+
children: /* @__PURE__ */ jsx(
|
|
118
|
+
"svg",
|
|
119
|
+
{
|
|
120
|
+
className: "h-6 w-6",
|
|
121
|
+
fill: "none",
|
|
122
|
+
stroke: "currentColor",
|
|
123
|
+
viewBox: "0 0 24 24",
|
|
124
|
+
children: /* @__PURE__ */ jsx(
|
|
125
|
+
"path",
|
|
126
|
+
{
|
|
127
|
+
strokeLinecap: "round",
|
|
128
|
+
strokeLinejoin: "round",
|
|
129
|
+
strokeWidth: 2,
|
|
130
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
131
|
+
}
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
}
|
|
136
|
+
),
|
|
137
|
+
!isSingleImage && /* @__PURE__ */ jsx(
|
|
138
|
+
Button,
|
|
139
|
+
{
|
|
140
|
+
onClick: prev,
|
|
141
|
+
disabled: isFirstImage,
|
|
142
|
+
variant: "ghost",
|
|
143
|
+
size: "icon",
|
|
144
|
+
className: "absolute left-4 z-10 h-12 w-12 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white disabled:cursor-not-allowed disabled:opacity-50 md:left-8 md:opacity-0 md:hover:opacity-100",
|
|
145
|
+
"aria-label": "Previous image",
|
|
146
|
+
children: /* @__PURE__ */ jsx(
|
|
147
|
+
"svg",
|
|
148
|
+
{
|
|
149
|
+
className: "h-6 w-6",
|
|
150
|
+
fill: "none",
|
|
151
|
+
stroke: "currentColor",
|
|
152
|
+
viewBox: "0 0 24 24",
|
|
153
|
+
children: /* @__PURE__ */ jsx(
|
|
154
|
+
"path",
|
|
155
|
+
{
|
|
156
|
+
strokeLinecap: "round",
|
|
157
|
+
strokeLinejoin: "round",
|
|
158
|
+
strokeWidth: 2,
|
|
159
|
+
d: "M15 19l-7-7 7-7"
|
|
160
|
+
}
|
|
161
|
+
)
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
),
|
|
166
|
+
/* @__PURE__ */ jsx("div", { className: "relative mx-4 flex max-h-[90vh] max-w-[90vw] items-center justify-center", children: /* @__PURE__ */ jsx(
|
|
167
|
+
"img",
|
|
168
|
+
{
|
|
169
|
+
ref: imageRef,
|
|
170
|
+
src: currentImage.url,
|
|
171
|
+
alt: currentImage.alt,
|
|
172
|
+
className: "max-h-[90vh] max-w-[90vw] object-contain transition-opacity duration-150",
|
|
173
|
+
style: { touchAction: "pan-x pan-y pinch-zoom" },
|
|
174
|
+
onError: handleImageError
|
|
175
|
+
}
|
|
176
|
+
) }),
|
|
177
|
+
!isSingleImage && /* @__PURE__ */ jsx(
|
|
178
|
+
Button,
|
|
179
|
+
{
|
|
180
|
+
onClick: next,
|
|
181
|
+
disabled: isLastImage,
|
|
182
|
+
variant: "ghost",
|
|
183
|
+
size: "icon",
|
|
184
|
+
className: "absolute right-4 z-10 h-12 w-12 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white disabled:cursor-not-allowed disabled:opacity-50 md:right-8 md:opacity-0 md:hover:opacity-100",
|
|
185
|
+
"aria-label": "Next image",
|
|
186
|
+
children: /* @__PURE__ */ jsx(
|
|
187
|
+
"svg",
|
|
188
|
+
{
|
|
189
|
+
className: "h-6 w-6",
|
|
190
|
+
fill: "none",
|
|
191
|
+
stroke: "currentColor",
|
|
192
|
+
viewBox: "0 0 24 24",
|
|
193
|
+
children: /* @__PURE__ */ jsx(
|
|
194
|
+
"path",
|
|
195
|
+
{
|
|
196
|
+
strokeLinecap: "round",
|
|
197
|
+
strokeLinejoin: "round",
|
|
198
|
+
strokeWidth: 2,
|
|
199
|
+
d: "M9 5l7 7-7 7"
|
|
200
|
+
}
|
|
201
|
+
)
|
|
202
|
+
}
|
|
203
|
+
)
|
|
204
|
+
}
|
|
205
|
+
),
|
|
206
|
+
!isSingleImage && /* @__PURE__ */ jsxs("div", { className: "absolute bottom-4 left-1/2 -translate-x-1/2 rounded-full bg-black/50 px-4 py-2 text-sm text-white", children: [
|
|
207
|
+
currentIndex + 1,
|
|
208
|
+
" / ",
|
|
209
|
+
images.length
|
|
210
|
+
] })
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
),
|
|
214
|
+
document.body
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
export {
|
|
218
|
+
ImageLightbox
|
|
219
|
+
};
|
|
220
|
+
//# sourceMappingURL=ImageLightbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../components/lightbox/ImageLightbox.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef, useState, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Button } from '../ui/button'\nimport type { ImageLightboxProps } from './ImageLightbox.types'\n\nexport function ImageLightbox({\n images,\n isOpen,\n initialIndex,\n onClose,\n onNavigate,\n}: ImageLightboxProps) {\n const [currentIndex, setCurrentIndex] = useState(initialIndex)\n const [mounted, setMounted] = useState(false)\n const imageRef = useRef<HTMLImageElement>(null)\n\n // Track if component is mounted (client-side only)\n useEffect(() => {\n setMounted(true)\n return () => setMounted(false)\n }, [])\n\n // Sync with initialIndex when lightbox opens\n useEffect(() => {\n if (isOpen) {\n setCurrentIndex(initialIndex)\n }\n }, [isOpen, initialIndex])\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = ''\n }\n }\n }, [isOpen])\n\n // Navigation handlers\n const next = useCallback(() => {\n setCurrentIndex((prev) => {\n const newIndex = Math.min(prev + 1, images.length - 1)\n if (onNavigate) onNavigate(newIndex)\n return newIndex\n })\n }, [images.length, onNavigate])\n\n const prev = useCallback(() => {\n setCurrentIndex((prev) => {\n const newIndex = Math.max(prev - 1, 0)\n if (onNavigate) onNavigate(newIndex)\n return newIndex\n })\n }, [onNavigate])\n\n // Keyboard navigation\n useEffect(() => {\n if (!isOpen) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n if (e.key === 'ArrowLeft') prev()\n if (e.key === 'ArrowRight') next()\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [isOpen, onClose, prev, next])\n\n // Handle image errors\n const handleImageError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n e.currentTarget.src = '/placeholder-image.png'\n console.error('Failed to load image:', images[currentIndex]?.url)\n }\n\n // Handle swipe gestures\n useEffect(() => {\n if (!isOpen) return\n\n let touchStartX = 0\n let touchEndX = 0\n\n const handleTouchStart = (e: TouchEvent) => {\n touchStartX = e.changedTouches[0].screenX\n }\n\n const handleTouchEnd = (e: TouchEvent) => {\n touchEndX = e.changedTouches[0].screenX\n const swipeDistance = touchStartX - touchEndX\n const minSwipeDistance = 50\n\n if (Math.abs(swipeDistance) > minSwipeDistance) {\n if (swipeDistance > 0 && currentIndex < images.length - 1) {\n next()\n } else if (swipeDistance < 0 && currentIndex > 0) {\n prev()\n }\n }\n }\n\n window.addEventListener('touchstart', handleTouchStart, { passive: true })\n window.addEventListener('touchend', handleTouchEnd, { passive: true })\n\n return () => {\n window.removeEventListener('touchstart', handleTouchStart)\n window.removeEventListener('touchend', handleTouchEnd)\n }\n }, [isOpen, currentIndex, images.length, next, prev])\n\n // Handle backdrop click\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose()\n }\n }\n\n // Empty gallery\n if (!images || images.length === 0) return null\n\n // Not open or not mounted (SSR safety)\n if (!mounted || !isOpen) return null\n\n const currentImage = images[currentIndex]\n const isFirstImage = currentIndex === 0\n const isLastImage = currentIndex === images.length - 1\n const isSingleImage = images.length === 1\n\n return createPortal(\n <div\n className=\"animate-in fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/90 duration-200\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Image lightbox\"\n onClick={handleBackdropClick}\n >\n {/* Close button */}\n <Button\n onClick={onClose}\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-4 top-4 z-10 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white md:h-8 md:w-8\"\n aria-label=\"Close lightbox\"\n >\n <svg\n className=\"h-6 w-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </Button>\n\n {/* Previous button */}\n {!isSingleImage && (\n <Button\n onClick={prev}\n disabled={isFirstImage}\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute left-4 z-10 h-12 w-12 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white disabled:cursor-not-allowed disabled:opacity-50 md:left-8 md:opacity-0 md:hover:opacity-100\"\n aria-label=\"Previous image\"\n >\n <svg\n className=\"h-6 w-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </Button>\n )}\n\n {/* Image container */}\n <div className=\"relative mx-4 flex max-h-[90vh] max-w-[90vw] items-center justify-center\">\n <img\n ref={imageRef}\n src={currentImage.url}\n alt={currentImage.alt}\n className=\"max-h-[90vh] max-w-[90vw] object-contain transition-opacity duration-150\"\n style={{ touchAction: 'pan-x pan-y pinch-zoom' }}\n onError={handleImageError}\n />\n </div>\n\n {/* Next button */}\n {!isSingleImage && (\n <Button\n onClick={next}\n disabled={isLastImage}\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-4 z-10 h-12 w-12 rounded-full bg-white/10 text-white hover:bg-white/20 focus:ring-white disabled:cursor-not-allowed disabled:opacity-50 md:right-8 md:opacity-0 md:hover:opacity-100\"\n aria-label=\"Next image\"\n >\n <svg\n className=\"h-6 w-6\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </Button>\n )}\n\n {/* Image counter */}\n {!isSingleImage && (\n <div className=\"absolute bottom-4 left-1/2 -translate-x-1/2 rounded-full bg-black/50 px-4 py-2 text-sm text-white\">\n {currentIndex + 1} / {images.length}\n </div>\n )}\n </div>,\n document.body,\n )\n}\n"],"mappings":"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","names":["prev"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var ImageLightbox_types_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(ImageLightbox_types_exports);
|
|
17
|
+
//# sourceMappingURL=ImageLightbox.types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../components/lightbox/ImageLightbox.types.ts"],"sourcesContent":["export interface EntityImage {\n id: number\n entityType: 'story' | 'character' | 'location' | 'timeline'\n entityId: number\n cloudinaryPublicId: string\n cloudinaryUrl: string\n isPrimary: boolean\n displayOrder: number\n fileName: string\n fileSize: number\n width: number\n height: number\n createdAt: Date\n updatedAt: Date\n}\n\nexport interface LightboxImage {\n id: number\n url: string\n alt: string\n}\n\nexport interface ImageLightboxProps {\n images: LightboxImage[]\n isOpen: boolean\n initialIndex: number\n onClose: () => void\n onNavigate?: (index: number) => void\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface EntityImage {
|
|
2
|
+
id: number;
|
|
3
|
+
entityType: 'story' | 'character' | 'location' | 'timeline';
|
|
4
|
+
entityId: number;
|
|
5
|
+
cloudinaryPublicId: string;
|
|
6
|
+
cloudinaryUrl: string;
|
|
7
|
+
isPrimary: boolean;
|
|
8
|
+
displayOrder: number;
|
|
9
|
+
fileName: string;
|
|
10
|
+
fileSize: number;
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
createdAt: Date;
|
|
14
|
+
updatedAt: Date;
|
|
15
|
+
}
|
|
16
|
+
export interface LightboxImage {
|
|
17
|
+
id: number;
|
|
18
|
+
url: string;
|
|
19
|
+
alt: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ImageLightboxProps {
|
|
22
|
+
images: LightboxImage[];
|
|
23
|
+
isOpen: boolean;
|
|
24
|
+
initialIndex: number;
|
|
25
|
+
onClose: () => void;
|
|
26
|
+
onNavigate?: (index: number) => void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ImageLightbox.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageLightbox.types.d.ts","sourceRoot":"","sources":["../../../components/lightbox/ImageLightbox.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAA;IAC3D,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,OAAO,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,aAAa,EAAE,CAAA;IACvB,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=ImageLightbox.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var lightbox_exports = {};
|
|
20
|
+
__export(lightbox_exports, {
|
|
21
|
+
GallerySection: () => import_GallerySection.GallerySection,
|
|
22
|
+
ImageLightbox: () => import_ImageLightbox.ImageLightbox,
|
|
23
|
+
useEntityLightbox: () => import_useEntityLightbox.useEntityLightbox,
|
|
24
|
+
useLightbox: () => import_useLightbox.useLightbox
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(lightbox_exports);
|
|
27
|
+
var import_ImageLightbox = require("./ImageLightbox");
|
|
28
|
+
var import_useLightbox = require("./useLightbox");
|
|
29
|
+
var import_useEntityLightbox = require("./useEntityLightbox");
|
|
30
|
+
var import_GallerySection = require("./GallerySection");
|
|
31
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
32
|
+
0 && (module.exports = {
|
|
33
|
+
GallerySection,
|
|
34
|
+
ImageLightbox,
|
|
35
|
+
useEntityLightbox,
|
|
36
|
+
useLightbox
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../components/lightbox/index.ts"],"sourcesContent":["export type { LightboxImage, ImageLightboxProps } from './ImageLightbox.types'\nexport { ImageLightbox } from './ImageLightbox'\nexport { useLightbox } from './useLightbox'\nexport { useEntityLightbox } from './useEntityLightbox'\nexport { GallerySection } from './GallerySection'\nexport type {\n UseEntityLightboxProps,\n UseEntityLightboxReturn,\n} from './useEntityLightbox'\nexport type { GallerySectionProps } from './GallerySection'\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,2BAA8B;AAC9B,yBAA4B;AAC5B,+BAAkC;AAClC,4BAA+B;","names":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type { LightboxImage, ImageLightboxProps } from './ImageLightbox.types';
|
|
2
|
+
export { ImageLightbox } from './ImageLightbox';
|
|
3
|
+
export { useLightbox } from './useLightbox';
|
|
4
|
+
export { useEntityLightbox } from './useEntityLightbox';
|
|
5
|
+
export { GallerySection } from './GallerySection';
|
|
6
|
+
export type { UseEntityLightboxProps, UseEntityLightboxReturn, } from './useEntityLightbox';
|
|
7
|
+
export type { GallerySectionProps } from './GallerySection';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../components/lightbox/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EACV,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ImageLightbox } from "./ImageLightbox";
|
|
2
|
+
import { useLightbox } from "./useLightbox";
|
|
3
|
+
import { useEntityLightbox } from "./useEntityLightbox";
|
|
4
|
+
import { GallerySection } from "./GallerySection";
|
|
5
|
+
export {
|
|
6
|
+
GallerySection,
|
|
7
|
+
ImageLightbox,
|
|
8
|
+
useEntityLightbox,
|
|
9
|
+
useLightbox
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=index.js.map
|