svelte-firekit 0.1.6 → 0.1.8
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 +365 -308
- package/dist/components/docs/doc-content.svelte +19 -0
- package/dist/components/docs/doc-content.svelte.d.ts +6 -0
- package/dist/components/docs/doc-header.svelte +24 -0
- package/dist/components/docs/doc-header.svelte.d.ts +13 -0
- package/dist/components/docs/doc-renderer.svelte +27 -0
- package/dist/components/docs/doc-renderer.svelte.d.ts +8 -0
- package/dist/components/docs/mobile-table-of-contents.svelte +42 -0
- package/dist/components/docs/mobile-table-of-contents.svelte.d.ts +3 -0
- package/dist/components/docs/table-of-contents.svelte +33 -0
- package/dist/components/docs/table-of-contents.svelte.d.ts +4 -0
- package/dist/components/docs/toc.svelte.d.ts +16 -0
- package/dist/components/docs/toc.svelte.js +59 -0
- package/dist/components/{Collection.svelte → firekit/Collection.svelte} +2 -2
- package/dist/components/{Doc.svelte → firekit/Doc.svelte} +11 -11
- package/dist/components/{Doc.svelte.d.ts → firekit/Doc.svelte.d.ts} +1 -1
- package/dist/components/{Node.svelte → firekit/Node.svelte} +2 -2
- package/dist/components/{auth-guard.svelte → firekit/auth-guard.svelte} +5 -5
- package/dist/components/{auth-guard.svelte.d.ts → firekit/auth-guard.svelte.d.ts} +1 -1
- package/dist/components/{custom-guard.svelte → firekit/custom-guard.svelte} +5 -5
- package/dist/components/{custom-guard.svelte.d.ts → firekit/custom-guard.svelte.d.ts} +1 -1
- package/dist/components/{download-url.svelte → firekit/download-url.svelte} +2 -2
- package/dist/components/{firebase-app.svelte → firekit/firebase-app.svelte} +5 -2
- package/dist/components/{node-list.svelte → firekit/node-list.svelte} +2 -2
- package/dist/components/{signed-in.svelte → firekit/signed-in.svelte} +3 -3
- package/dist/components/{signed-in.svelte.d.ts → firekit/signed-in.svelte.d.ts} +1 -1
- package/dist/components/{signed-out.svelte → firekit/signed-out.svelte} +2 -2
- package/dist/components/{storage-list.svelte → firekit/storage-list.svelte} +2 -2
- package/dist/components/{upload-task.svelte → firekit/upload-task.svelte} +2 -2
- package/dist/components/nav/app-sidebar.svelte +175 -0
- package/dist/components/nav/app-sidebar.svelte.d.ts +9 -0
- package/dist/components/nav/auto-breadcrumb.svelte +41 -0
- package/dist/components/nav/auto-breadcrumb.svelte.d.ts +3 -0
- package/dist/components/nav/dark-mode-toggle.svelte +17 -0
- package/dist/components/nav/dark-mode-toggle.svelte.d.ts +18 -0
- package/dist/components/nav/nav-components.svelte +24 -0
- package/dist/components/nav/nav-components.svelte.d.ts +11 -0
- package/dist/components/nav/nav-main.svelte +45 -0
- package/dist/components/nav/nav-main.svelte.d.ts +11 -0
- package/dist/components/nav/nav-secondary.svelte +32 -0
- package/dist/components/nav/nav-secondary.svelte.d.ts +14 -0
- package/dist/components/nav/site-header.svelte +32 -0
- package/dist/components/nav/site-header.svelte.d.ts +18 -0
- package/dist/components/ui/avatar/avatar-fallback.svelte +17 -0
- package/dist/components/ui/avatar/avatar-fallback.svelte.d.ts +4 -0
- package/dist/components/ui/avatar/avatar-image.svelte +17 -0
- package/dist/components/ui/avatar/avatar-image.svelte.d.ts +4 -0
- package/dist/components/ui/avatar/avatar.svelte +19 -0
- package/dist/components/ui/avatar/avatar.svelte.d.ts +4 -0
- package/dist/components/ui/avatar/index.d.ts +4 -0
- package/dist/components/ui/avatar/index.js +6 -0
- package/dist/components/ui/badge/badge.svelte +50 -0
- package/dist/components/ui/badge/badge.svelte.d.ts +32 -0
- package/dist/components/ui/badge/index.d.ts +2 -0
- package/dist/components/ui/badge/index.js +2 -0
- package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +23 -0
- package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-item.svelte +20 -0
- package/dist/components/ui/breadcrumb/breadcrumb-item.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +31 -0
- package/dist/components/ui/breadcrumb/breadcrumb-link.svelte.d.ts +11 -0
- package/dist/components/ui/breadcrumb/breadcrumb-list.svelte +23 -0
- package/dist/components/ui/breadcrumb/breadcrumb-list.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +23 -0
- package/dist/components/ui/breadcrumb/breadcrumb-page.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +27 -0
- package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb.svelte +21 -0
- package/dist/components/ui/breadcrumb/breadcrumb.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/index.d.ts +8 -0
- package/dist/components/ui/breadcrumb/index.js +10 -0
- package/dist/components/ui/button/button.svelte +80 -0
- package/dist/components/ui/button/button.svelte.d.ts +58 -0
- package/dist/components/ui/button/index.d.ts +2 -0
- package/dist/components/ui/button/index.js +4 -0
- package/dist/components/ui/card/card-action.svelte +20 -0
- package/dist/components/ui/card/card-action.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-content.svelte +15 -0
- package/dist/components/ui/card/card-content.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-description.svelte +20 -0
- package/dist/components/ui/card/card-description.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-footer.svelte +20 -0
- package/dist/components/ui/card/card-footer.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-header.svelte +23 -0
- package/dist/components/ui/card/card-header.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-title.svelte +20 -0
- package/dist/components/ui/card/card-title.svelte.d.ts +5 -0
- package/dist/components/ui/card/card.svelte +23 -0
- package/dist/components/ui/card/card.svelte.d.ts +5 -0
- package/dist/components/ui/card/index.d.ts +8 -0
- package/dist/components/ui/card/index.js +10 -0
- package/dist/components/ui/chart/chart-container.svelte +80 -0
- package/dist/components/ui/chart/chart-container.svelte.d.ts +9 -0
- package/dist/components/ui/chart/chart-style.svelte +36 -0
- package/dist/components/ui/chart/chart-style.svelte.d.ts +8 -0
- package/dist/components/ui/chart/chart-tooltip.svelte +159 -0
- package/dist/components/ui/chart/chart-tooltip.svelte.d.ts +27 -0
- package/dist/components/ui/chart/chart-utils.d.ts +36 -0
- package/dist/components/ui/chart/chart-utils.js +33 -0
- package/dist/components/ui/chart/index.d.ts +4 -0
- package/dist/components/ui/chart/index.js +4 -0
- package/dist/components/ui/checkbox/checkbox.svelte +36 -0
- package/dist/components/ui/checkbox/checkbox.svelte.d.ts +4 -0
- package/dist/components/ui/checkbox/index.d.ts +2 -0
- package/dist/components/ui/checkbox/index.js +4 -0
- package/dist/components/ui/data-table/data-table.svelte.d.ts +40 -0
- package/dist/components/ui/data-table/data-table.svelte.js +110 -0
- package/dist/components/ui/data-table/flex-render.svelte +36 -0
- package/dist/components/ui/data-table/flex-render.svelte.d.ts +30 -0
- package/dist/components/ui/data-table/index.d.ts +3 -0
- package/dist/components/ui/data-table/index.js +3 -0
- package/dist/components/ui/data-table/render-helpers.d.ts +90 -0
- package/dist/components/ui/data-table/render-helpers.js +99 -0
- package/dist/components/ui/dialog/dialog-close.svelte +7 -0
- package/dist/components/ui/dialog/dialog-close.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-content.svelte +43 -0
- package/dist/components/ui/dialog/dialog-content.svelte.d.ts +11 -0
- package/dist/components/ui/dialog/dialog-description.svelte +17 -0
- package/dist/components/ui/dialog/dialog-description.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-footer.svelte +20 -0
- package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +5 -0
- package/dist/components/ui/dialog/dialog-header.svelte +20 -0
- package/dist/components/ui/dialog/dialog-header.svelte.d.ts +5 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte +20 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-title.svelte +17 -0
- package/dist/components/ui/dialog/dialog-title.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-trigger.svelte +7 -0
- package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/index.d.ts +11 -0
- package/dist/components/ui/dialog/index.js +14 -0
- package/dist/components/ui/drawer/drawer-close.svelte +7 -0
- package/dist/components/ui/drawer/drawer-close.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer-content.svelte +37 -0
- package/dist/components/ui/drawer/drawer-content.svelte.d.ts +7 -0
- package/dist/components/ui/drawer/drawer-description.svelte +17 -0
- package/dist/components/ui/drawer/drawer-description.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer-footer.svelte +20 -0
- package/dist/components/ui/drawer/drawer-footer.svelte.d.ts +5 -0
- package/dist/components/ui/drawer/drawer-header.svelte +20 -0
- package/dist/components/ui/drawer/drawer-header.svelte.d.ts +5 -0
- package/dist/components/ui/drawer/drawer-nested.svelte +12 -0
- package/dist/components/ui/drawer/drawer-nested.svelte.d.ts +3 -0
- package/dist/components/ui/drawer/drawer-overlay.svelte +20 -0
- package/dist/components/ui/drawer/drawer-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer-title.svelte +17 -0
- package/dist/components/ui/drawer/drawer-title.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer-trigger.svelte +7 -0
- package/dist/components/ui/drawer/drawer-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer.svelte +12 -0
- package/dist/components/ui/drawer/drawer.svelte.d.ts +3 -0
- package/dist/components/ui/drawer/index.d.ts +13 -0
- package/dist/components/ui/drawer/index.js +15 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +41 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +27 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +24 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +31 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +20 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/index.d.ts +25 -0
- package/dist/components/ui/dropdown-menu/index.js +17 -0
- package/dist/components/ui/input/index.d.ts +2 -0
- package/dist/components/ui/input/index.js +4 -0
- package/dist/components/ui/input/input.svelte +51 -0
- package/dist/components/ui/input/input.svelte.d.ts +13 -0
- package/dist/components/ui/label/index.d.ts +2 -0
- package/dist/components/ui/label/index.js +4 -0
- package/dist/components/ui/label/label.svelte +20 -0
- package/dist/components/ui/label/label.svelte.d.ts +4 -0
- package/dist/components/ui/scroll-area/index.d.ts +3 -0
- package/dist/components/ui/scroll-area/index.js +5 -0
- package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +31 -0
- package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts +4 -0
- package/dist/components/ui/scroll-area/scroll-area.svelte +40 -0
- package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +10 -0
- package/dist/components/ui/select/index.d.ts +11 -0
- package/dist/components/ui/select/index.js +14 -0
- package/dist/components/ui/select/select-content.svelte +40 -0
- package/dist/components/ui/select/select-content.svelte.d.ts +8 -0
- package/dist/components/ui/select/select-group-heading.svelte +21 -0
- package/dist/components/ui/select/select-group-heading.svelte.d.ts +10 -0
- package/dist/components/ui/select/select-group.svelte +7 -0
- package/dist/components/ui/select/select-group.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-item.svelte +38 -0
- package/dist/components/ui/select/select-item.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-label.svelte +20 -0
- package/dist/components/ui/select/select-label.svelte.d.ts +6 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte +20 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte +20 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-separator.svelte +18 -0
- package/dist/components/ui/select/select-separator.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-trigger.svelte +29 -0
- package/dist/components/ui/select/select-trigger.svelte.d.ts +8 -0
- package/dist/components/ui/separator/index.d.ts +2 -0
- package/dist/components/ui/separator/index.js +4 -0
- package/dist/components/ui/separator/separator.svelte +20 -0
- package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/index.d.ts +11 -0
- package/dist/components/ui/sheet/index.js +14 -0
- package/dist/components/ui/sheet/sheet-close.svelte +7 -0
- package/dist/components/ui/sheet/sheet-close.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-content.svelte +58 -0
- package/dist/components/ui/sheet/sheet-content.svelte.d.ts +35 -0
- package/dist/components/ui/sheet/sheet-description.svelte +17 -0
- package/dist/components/ui/sheet/sheet-description.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-footer.svelte +20 -0
- package/dist/components/ui/sheet/sheet-footer.svelte.d.ts +5 -0
- package/dist/components/ui/sheet/sheet-header.svelte +20 -0
- package/dist/components/ui/sheet/sheet-header.svelte.d.ts +5 -0
- package/dist/components/ui/sheet/sheet-overlay.svelte +20 -0
- package/dist/components/ui/sheet/sheet-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-title.svelte +17 -0
- package/dist/components/ui/sheet/sheet-title.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-trigger.svelte +7 -0
- package/dist/components/ui/sheet/sheet-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/sidebar/constants.d.ts +6 -0
- package/dist/components/ui/sidebar/constants.js +6 -0
- package/dist/components/ui/sidebar/context.svelte.d.ts +42 -0
- package/dist/components/ui/sidebar/context.svelte.js +54 -0
- package/dist/components/ui/sidebar/index.d.ts +25 -0
- package/dist/components/ui/sidebar/index.js +27 -0
- package/dist/components/ui/sidebar/sidebar-content.svelte +24 -0
- package/dist/components/ui/sidebar/sidebar-content.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-footer.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-footer.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-group-action.svelte +36 -0
- package/dist/components/ui/sidebar/sidebar-group-action.svelte.d.ts +11 -0
- package/dist/components/ui/sidebar/sidebar-group-content.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-group-content.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-group-label.svelte +34 -0
- package/dist/components/ui/sidebar/sidebar-group-label.svelte.d.ts +11 -0
- package/dist/components/ui/sidebar/sidebar-group.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-group.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-header.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-header.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-input.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +11 -0
- package/dist/components/ui/sidebar/sidebar-inset.svelte +24 -0
- package/dist/components/ui/sidebar/sidebar-inset.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-menu-action.svelte +43 -0
- package/dist/components/ui/sidebar/sidebar-menu-action.svelte.d.ts +12 -0
- package/dist/components/ui/sidebar/sidebar-menu-badge.svelte +29 -0
- package/dist/components/ui/sidebar/sidebar-menu-badge.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-menu-button.svelte +103 -0
- package/dist/components/ui/sidebar/sidebar-menu-button.svelte.d.ts +51 -0
- package/dist/components/ui/sidebar/sidebar-menu-item.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-menu-item.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-menu-skeleton.svelte +36 -0
- package/dist/components/ui/sidebar/sidebar-menu-skeleton.svelte.d.ts +8 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub-button.svelte +43 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub-button.svelte.d.ts +13 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub-item.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub-item.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub.svelte +25 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-menu.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-menu.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-provider.svelte +53 -0
- package/dist/components/ui/sidebar/sidebar-provider.svelte.d.ts +9 -0
- package/dist/components/ui/sidebar/sidebar-rail.svelte +36 -0
- package/dist/components/ui/sidebar/sidebar-rail.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-separator.svelte +19 -0
- package/dist/components/ui/sidebar/sidebar-separator.svelte.d.ts +13 -0
- package/dist/components/ui/sidebar/sidebar-trigger.svelte +35 -0
- package/dist/components/ui/sidebar/sidebar-trigger.svelte.d.ts +8 -0
- package/dist/components/ui/sidebar/sidebar.svelte +104 -0
- package/dist/components/ui/sidebar/sidebar.svelte.d.ts +10 -0
- package/dist/components/ui/skeleton/index.d.ts +2 -0
- package/dist/components/ui/skeleton/index.js +4 -0
- package/dist/components/ui/skeleton/skeleton.svelte +17 -0
- package/dist/components/ui/skeleton/skeleton.svelte.d.ts +5 -0
- package/dist/components/ui/table/index.d.ts +9 -0
- package/dist/components/ui/table/index.js +11 -0
- package/dist/components/ui/table/table-body.svelte +20 -0
- package/dist/components/ui/table/table-body.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-caption.svelte +20 -0
- package/dist/components/ui/table/table-caption.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-cell.svelte +20 -0
- package/dist/components/ui/table/table-cell.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-footer.svelte +20 -0
- package/dist/components/ui/table/table-footer.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-head.svelte +23 -0
- package/dist/components/ui/table/table-head.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-header.svelte +20 -0
- package/dist/components/ui/table/table-header.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-row.svelte +23 -0
- package/dist/components/ui/table/table-row.svelte.d.ts +5 -0
- package/dist/components/ui/table/table.svelte +22 -0
- package/dist/components/ui/table/table.svelte.d.ts +5 -0
- package/dist/components/ui/tabs/index.d.ts +5 -0
- package/dist/components/ui/tabs/index.js +7 -0
- package/dist/components/ui/tabs/tabs-content.svelte +17 -0
- package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-list.svelte +20 -0
- package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte +20 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs.svelte +19 -0
- package/dist/components/ui/tabs/tabs.svelte.d.ts +4 -0
- package/dist/components/ui/toggle/index.d.ts +3 -0
- package/dist/components/ui/toggle/index.js +5 -0
- package/dist/components/ui/toggle/toggle.svelte +52 -0
- package/dist/components/ui/toggle/toggle.svelte.d.ts +43 -0
- package/dist/components/ui/toggle-group/index.d.ts +3 -0
- package/dist/components/ui/toggle-group/index.js +5 -0
- package/dist/components/ui/toggle-group/toggle-group-item.svelte +34 -0
- package/dist/components/ui/toggle-group/toggle-group-item.svelte.d.ts +6 -0
- package/dist/components/ui/toggle-group/toggle-group.svelte +47 -0
- package/dist/components/ui/toggle-group/toggle-group.svelte.d.ts +8 -0
- package/dist/components/ui/tooltip/index.d.ts +7 -0
- package/dist/components/ui/tooltip/index.js +9 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte +47 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +7 -0
- package/dist/components/ui/tooltip/tooltip-trigger.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +4 -0
- package/dist/hooks/is-mobile.svelte.d.ts +4 -0
- package/dist/hooks/is-mobile.svelte.js +7 -0
- package/dist/index.d.ts +12 -12
- package/dist/index.js +12 -12
- package/dist/types/docs.d.ts +67 -0
- package/dist/types/docs.js +1 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/utils.d.ts +15 -0
- package/dist/utils.js +44 -0
- package/package.json +34 -6
- /package/dist/components/{Collection.svelte.d.ts → firekit/Collection.svelte.d.ts} +0 -0
- /package/dist/components/{Node.svelte.d.ts → firekit/Node.svelte.d.ts} +0 -0
- /package/dist/components/{download-url.svelte.d.ts → firekit/download-url.svelte.d.ts} +0 -0
- /package/dist/components/{firebase-app.svelte.d.ts → firekit/firebase-app.svelte.d.ts} +0 -0
- /package/dist/components/{node-list.svelte.d.ts → firekit/node-list.svelte.d.ts} +0 -0
- /package/dist/components/{signed-out.svelte.d.ts → firekit/signed-out.svelte.d.ts} +0 -0
- /package/dist/components/{storage-list.svelte.d.ts → firekit/storage-list.svelte.d.ts} +0 -0
- /package/dist/components/{upload-task.svelte.d.ts → firekit/upload-task.svelte.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,445 +1,502 @@
|
|
|
1
|
-
# Svelte
|
|
1
|
+
# Svelte Firebase Library
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A comprehensive, production-ready Firebase integration library for Svelte 5 applications. Built with reactive state management using Svelte 5 runes, providing a complete solution for authentication, Firestore, Storage, Realtime Database, Analytics, and more.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 🚀 Features
|
|
6
|
+
|
|
7
|
+
- **Complete Firebase Integration** - All Firebase products supported
|
|
8
|
+
- **Svelte 5 Runes** - Reactive state management with optimal performance
|
|
9
|
+
- **TypeScript First** - Full type safety and excellent developer experience
|
|
10
|
+
- **SSR Compatible** - Server-side rendering support
|
|
11
|
+
- **Real-time Updates** - Live data synchronization across all services
|
|
12
|
+
- **Authentication System** - Complete auth solution with multiple providers
|
|
13
|
+
- **Advanced Querying** - Complex Firestore queries with type safety
|
|
14
|
+
- **File Management** - Storage upload/download with progress tracking
|
|
15
|
+
- **Presence System** - User online/offline tracking with geolocation
|
|
16
|
+
- **Analytics Integration** - Comprehensive event tracking
|
|
17
|
+
- **Error Handling** - Robust error management with retry mechanisms
|
|
18
|
+
- **Performance Optimized** - Persistent cache, memory management, and optimizations
|
|
19
|
+
|
|
20
|
+
## 📦 Installation
|
|
6
21
|
|
|
7
22
|
```bash
|
|
8
|
-
npm install
|
|
23
|
+
npm install svelte-firekit firebase
|
|
9
24
|
```
|
|
10
25
|
|
|
11
|
-
##
|
|
26
|
+
## 🔧 Quick Setup
|
|
12
27
|
|
|
13
|
-
|
|
28
|
+
### 1. Environment Variables
|
|
14
29
|
|
|
15
|
-
|
|
30
|
+
Create a `.env` file with your Firebase configuration:
|
|
31
|
+
|
|
32
|
+
```dotenv
|
|
16
33
|
PUBLIC_FIREBASE_API_KEY=your_api_key
|
|
17
|
-
PUBLIC_FIREBASE_AUTH_DOMAIN=
|
|
34
|
+
PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
|
|
18
35
|
PUBLIC_FIREBASE_PROJECT_ID=your_project_id
|
|
19
|
-
PUBLIC_FIREBASE_STORAGE_BUCKET=
|
|
20
|
-
PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
|
|
36
|
+
PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
|
|
37
|
+
PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
|
|
21
38
|
PUBLIC_FIREBASE_APP_ID=your_app_id
|
|
22
39
|
PUBLIC_FIREBASE_MEASUREMENT_ID=your_measurement_id
|
|
23
40
|
```
|
|
24
41
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
## Usage Example
|
|
28
|
-
|
|
29
|
-
Here's a simple example showing how to display the current user's name:
|
|
42
|
+
### 2. Initialize Firebase
|
|
30
43
|
|
|
31
44
|
```svelte
|
|
32
45
|
<script>
|
|
33
|
-
import {
|
|
46
|
+
import { FirebaseApp } from 'svelte-firekit';
|
|
34
47
|
</script>
|
|
35
48
|
|
|
36
|
-
|
|
49
|
+
<FirebaseApp>
|
|
50
|
+
<!-- Your app content -->
|
|
51
|
+
</FirebaseApp>
|
|
37
52
|
```
|
|
38
53
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
## Core Features
|
|
54
|
+
### 3. Basic Usage
|
|
42
55
|
|
|
43
|
-
|
|
56
|
+
```svelte
|
|
57
|
+
<script>
|
|
58
|
+
import { firekitUser, firekitCollection, firekitDoc } from 'svelte-firekit';
|
|
44
59
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
- Type-safe configuration management
|
|
60
|
+
// Reactive user state
|
|
61
|
+
const user = $derived(firekitUser.user);
|
|
62
|
+
const isAuthenticated = $derived(firekitUser.isAuthenticated);
|
|
49
63
|
|
|
50
|
-
|
|
64
|
+
// Reactive document
|
|
65
|
+
const userDoc = firekitDoc('users/123');
|
|
51
66
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
67
|
+
// Reactive collection
|
|
68
|
+
const posts = firekitCollection('posts', [
|
|
69
|
+
where('published', '==', true),
|
|
70
|
+
orderBy('createdAt', 'desc'),
|
|
71
|
+
limit(10)
|
|
72
|
+
]);
|
|
73
|
+
</script>
|
|
59
74
|
|
|
60
|
-
|
|
75
|
+
{#if isAuthenticated}
|
|
76
|
+
<h1>Welcome, {user?.displayName}!</h1>
|
|
61
77
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
78
|
+
{#if userDoc.loading}
|
|
79
|
+
<p>Loading user data...</p>
|
|
80
|
+
{:else if userDoc.data}
|
|
81
|
+
<p>Email: {userDoc.data.email}</p>
|
|
82
|
+
{/if}
|
|
67
83
|
|
|
68
|
-
|
|
84
|
+
<h2>Recent Posts</h2>
|
|
85
|
+
{#each posts.data as post}
|
|
86
|
+
<article>
|
|
87
|
+
<h3>{post.title}</h3>
|
|
88
|
+
<p>{post.content}</p>
|
|
89
|
+
</article>
|
|
90
|
+
{/each}
|
|
91
|
+
{/if}
|
|
92
|
+
```
|
|
69
93
|
|
|
70
|
-
|
|
71
|
-
- Progress tracking and status updates
|
|
72
|
-
- Storage security rules helpers
|
|
73
|
-
- Image optimization utilities
|
|
94
|
+
## 📚 Core Services
|
|
74
95
|
|
|
75
|
-
###
|
|
96
|
+
### Authentication
|
|
76
97
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- Server-side data fetching
|
|
80
|
-
- SEO-friendly rendering
|
|
98
|
+
```typescript
|
|
99
|
+
import { firekitAuth, firekitUser } from 'svelte-firekit';
|
|
81
100
|
|
|
82
|
-
|
|
101
|
+
// Sign in methods
|
|
102
|
+
await firekitAuth.signInWithEmail('user@example.com', 'password');
|
|
103
|
+
await firekitAuth.signInWithGoogle();
|
|
104
|
+
await firekitAuth.signInWithFacebook();
|
|
105
|
+
await firekitAuth.signInWithApple();
|
|
83
106
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
- Intelligent autocomplete
|
|
87
|
-
- Runtime type checking
|
|
88
|
-
- Type-safe Firestore operations
|
|
107
|
+
// User registration
|
|
108
|
+
await firekitAuth.registerWithEmail('user@example.com', 'password', 'John Doe');
|
|
89
109
|
|
|
90
|
-
|
|
110
|
+
// Reactive user state
|
|
111
|
+
const user = $derived(firekitUser.user);
|
|
112
|
+
const isAuthenticated = $derived(firekitUser.isAuthenticated);
|
|
113
|
+
const isEmailVerified = $derived(firekitUser.isEmailVerified);
|
|
114
|
+
```
|
|
91
115
|
|
|
92
|
-
|
|
116
|
+
### Firestore Documents
|
|
93
117
|
|
|
94
|
-
|
|
118
|
+
```typescript
|
|
119
|
+
import { firekitDoc, firekitDocOnce } from 'svelte-firekit';
|
|
95
120
|
|
|
96
|
-
|
|
121
|
+
// Real-time document subscription
|
|
122
|
+
const userDoc = firekitDoc<User>('users/123', {
|
|
123
|
+
name: 'Loading...',
|
|
124
|
+
email: ''
|
|
125
|
+
});
|
|
97
126
|
|
|
98
|
-
|
|
127
|
+
// One-time document fetch
|
|
128
|
+
const userData = firekitDocOnce<User>('users/123');
|
|
99
129
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
130
|
+
// Access reactive state
|
|
131
|
+
const isLoading = $derived(userDoc.loading);
|
|
132
|
+
const userData = $derived(userDoc.data);
|
|
133
|
+
const userError = $derived(userDoc.error);
|
|
104
134
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
135
|
+
$effect(() => {
|
|
136
|
+
if (isLoading) console.log('Loading...');
|
|
137
|
+
if (userData) console.log('User:', userData);
|
|
138
|
+
if (userError) console.error('Error:', userError);
|
|
139
|
+
});
|
|
108
140
|
```
|
|
109
141
|
|
|
110
|
-
###
|
|
111
|
-
|
|
112
|
-
#### `AuthGuard`
|
|
142
|
+
### Firestore Collections
|
|
113
143
|
|
|
114
|
-
|
|
144
|
+
```typescript
|
|
145
|
+
import { firekitCollection, where, orderBy, limit } from 'svelte-firekit';
|
|
146
|
+
|
|
147
|
+
// Simple collection
|
|
148
|
+
const users = firekitCollection<User>('users');
|
|
149
|
+
|
|
150
|
+
// With query constraints
|
|
151
|
+
const activeUsers = firekitCollection<User>('users', [
|
|
152
|
+
where('active', '==', true),
|
|
153
|
+
orderBy('name'),
|
|
154
|
+
limit(10)
|
|
155
|
+
]);
|
|
156
|
+
|
|
157
|
+
// Advanced options
|
|
158
|
+
const paginatedUsers = firekitCollection<User>('users', {
|
|
159
|
+
pagination: { enabled: true, pageSize: 20 },
|
|
160
|
+
cache: { enabled: true, ttl: 300000 }
|
|
161
|
+
});
|
|
115
162
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
163
|
+
// Access reactive state
|
|
164
|
+
const usersData = $derived(users.data);
|
|
165
|
+
const usersLoading = $derived(users.loading);
|
|
166
|
+
const usersError = $derived(users.error);
|
|
120
167
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
168
|
+
$effect(() => {
|
|
169
|
+
console.log('Users:', usersData);
|
|
170
|
+
console.log('Loading:', usersLoading);
|
|
171
|
+
console.log('Error:', usersError);
|
|
172
|
+
});
|
|
125
173
|
```
|
|
126
174
|
|
|
127
|
-
|
|
175
|
+
### Document Mutations
|
|
128
176
|
|
|
129
|
-
|
|
177
|
+
```typescript
|
|
178
|
+
import { firekitDocMutations } from 'svelte-firekit';
|
|
179
|
+
|
|
180
|
+
// Create document
|
|
181
|
+
const result = await firekitDocMutations.add(
|
|
182
|
+
'users',
|
|
183
|
+
{
|
|
184
|
+
name: 'John Doe',
|
|
185
|
+
email: 'john@example.com'
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
timestamps: true,
|
|
189
|
+
validate: true
|
|
190
|
+
}
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
// Update document
|
|
194
|
+
await firekitDocMutations.update('users/123', {
|
|
195
|
+
name: 'Jane Doe'
|
|
196
|
+
});
|
|
130
197
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
import { SignedIn } from 'svelte-firekit';
|
|
134
|
-
</script>
|
|
198
|
+
// Delete document
|
|
199
|
+
await firekitDocMutations.delete('users/123');
|
|
135
200
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
201
|
+
// Batch operations
|
|
202
|
+
const batchResult = await firekitDocMutations.batch([
|
|
203
|
+
{ type: 'create', path: 'users', data: userData },
|
|
204
|
+
{ type: 'update', path: 'profiles/123', data: profileUpdate }
|
|
205
|
+
]);
|
|
139
206
|
```
|
|
140
207
|
|
|
141
|
-
|
|
208
|
+
### Storage Management
|
|
142
209
|
|
|
143
|
-
|
|
210
|
+
```typescript
|
|
211
|
+
import { firekitDownloadUrl, firekitUploadTask, firekitStorageList } from 'svelte-firekit';
|
|
212
|
+
|
|
213
|
+
// Download URL
|
|
214
|
+
const imageUrl = firekitDownloadUrl('images/photo.jpg');
|
|
215
|
+
const downloadUrl = $derived(imageUrl.url);
|
|
216
|
+
|
|
217
|
+
// File upload with progress
|
|
218
|
+
const upload = firekitUploadTask('uploads/file.pdf', file);
|
|
219
|
+
const uploadProgress = $derived(upload.progress);
|
|
220
|
+
const uploadCompleted = $derived(upload.completed);
|
|
221
|
+
const uploadDownloadUrl = $derived(upload.downloadURL);
|
|
222
|
+
|
|
223
|
+
$effect(() => {
|
|
224
|
+
if (downloadUrl) console.log('Image URL:', downloadUrl);
|
|
225
|
+
console.log('Upload progress:', uploadProgress);
|
|
226
|
+
if (uploadCompleted) console.log('Download URL:', uploadDownloadUrl);
|
|
227
|
+
});
|
|
144
228
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
229
|
+
// Storage listing
|
|
230
|
+
const files = firekitStorageList('uploads');
|
|
231
|
+
const fileItems = $derived(files.items);
|
|
232
|
+
const filePrefixes = $derived(files.prefixes);
|
|
149
233
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
234
|
+
$effect(() => {
|
|
235
|
+
console.log('Files:', fileItems);
|
|
236
|
+
console.log('Folders:', filePrefixes);
|
|
237
|
+
});
|
|
153
238
|
```
|
|
154
239
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
Advanced authentication guard with custom verification checks.
|
|
158
|
-
|
|
159
|
-
```svelte
|
|
160
|
-
<script>
|
|
161
|
-
import { CustomGuard } from 'svelte-firekit';
|
|
162
|
-
|
|
163
|
-
const emailVerificationCheck = (user) => user.emailVerified;
|
|
164
|
-
</script>
|
|
240
|
+
### Realtime Database
|
|
165
241
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
redirectTo="/verify-email"
|
|
169
|
-
let:children
|
|
170
|
-
let:user
|
|
171
|
-
let:auth
|
|
172
|
-
let:signOut
|
|
173
|
-
>
|
|
174
|
-
<p>Your email is verified!</p>
|
|
175
|
-
</CustomGuard>
|
|
176
|
-
```
|
|
242
|
+
```typescript
|
|
243
|
+
import { firekitRealtimeDB, firekitRealtimeList } from 'svelte-firekit';
|
|
177
244
|
|
|
178
|
-
|
|
245
|
+
// Single value
|
|
246
|
+
const userStatus = firekitRealtimeDB<{ online: boolean }>('users/123/status');
|
|
179
247
|
|
|
180
|
-
|
|
248
|
+
// List data
|
|
249
|
+
const messages = firekitRealtimeList<Message>('messages');
|
|
181
250
|
|
|
182
|
-
|
|
251
|
+
// Access data
|
|
252
|
+
const statusData = $derived(userStatus.data);
|
|
253
|
+
const messagesList = $derived(messages.list);
|
|
183
254
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
255
|
+
$effect(() => {
|
|
256
|
+
console.log('Status:', statusData);
|
|
257
|
+
console.log('Messages:', messagesList);
|
|
258
|
+
});
|
|
188
259
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
{/each}
|
|
193
|
-
<p>Total users: {count}</p>
|
|
194
|
-
</Collection>
|
|
260
|
+
// Update data
|
|
261
|
+
await userStatus.set({ online: true });
|
|
262
|
+
await messages.push({ text: 'Hello', userId: '123' });
|
|
195
263
|
```
|
|
196
264
|
|
|
197
|
-
|
|
265
|
+
### Presence System
|
|
198
266
|
|
|
199
|
-
|
|
267
|
+
```typescript
|
|
268
|
+
import { firekitPresence } from 'svelte-firekit';
|
|
269
|
+
|
|
270
|
+
// Initialize presence
|
|
271
|
+
await firekitPresence.initialize(user, {
|
|
272
|
+
geolocation: {
|
|
273
|
+
enabled: true,
|
|
274
|
+
type: 'browser',
|
|
275
|
+
requireConsent: true
|
|
276
|
+
}
|
|
277
|
+
});
|
|
200
278
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
import { Ddoc } from 'svelte-firekit';
|
|
204
|
-
</script>
|
|
279
|
+
// Set presence status
|
|
280
|
+
await firekitPresence.setPresence('online');
|
|
205
281
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
{/if}
|
|
211
|
-
</Ddoc>
|
|
282
|
+
// Access reactive state
|
|
283
|
+
const presenceStatus = $derived(firekitPresence.status);
|
|
284
|
+
const presenceLocation = $derived(firekitPresence.location);
|
|
285
|
+
const presenceSessions = $derived(firekitPresence.sessions);
|
|
212
286
|
```
|
|
213
287
|
|
|
214
|
-
###
|
|
288
|
+
### Analytics
|
|
215
289
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
Handles file uploads with progress tracking.
|
|
290
|
+
```typescript
|
|
291
|
+
import { firekitAnalytics } from 'svelte-firekit';
|
|
219
292
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
293
|
+
// Track custom events
|
|
294
|
+
firekitAnalytics.trackEvent('button_click', {
|
|
295
|
+
button_name: 'signup',
|
|
296
|
+
page_location: '/home'
|
|
297
|
+
});
|
|
223
298
|
|
|
224
|
-
|
|
225
|
-
|
|
299
|
+
// Track purchases
|
|
300
|
+
firekitAnalytics.trackPurchase({
|
|
301
|
+
transaction_id: 'T12345',
|
|
302
|
+
value: 29.99,
|
|
303
|
+
currency: 'USD',
|
|
304
|
+
items: [{ item_id: 'prod_123', item_name: 'Premium Plan' }]
|
|
305
|
+
});
|
|
226
306
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
let:children
|
|
233
|
-
let:snapshot
|
|
234
|
-
let:task
|
|
235
|
-
let:progress
|
|
236
|
-
let:storage
|
|
237
|
-
>
|
|
238
|
-
<div>Upload Progress: {progress}%</div>
|
|
239
|
-
{#if snapshot?.state === 'success'}
|
|
240
|
-
<p>Upload complete!</p>
|
|
241
|
-
{/if}
|
|
242
|
-
</UploadTask>
|
|
307
|
+
// Set user properties
|
|
308
|
+
firekitAnalytics.setUserProperties({
|
|
309
|
+
user_type: 'premium',
|
|
310
|
+
subscription_plan: 'pro'
|
|
311
|
+
});
|
|
243
312
|
```
|
|
244
313
|
|
|
245
|
-
|
|
314
|
+
## 🧩 Components
|
|
246
315
|
|
|
247
|
-
|
|
316
|
+
### Authentication Components
|
|
248
317
|
|
|
249
318
|
```svelte
|
|
250
319
|
<script>
|
|
251
|
-
import {
|
|
320
|
+
import { AuthGuard, SignedIn, SignedOut } from 'svelte-firekit';
|
|
252
321
|
</script>
|
|
253
322
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
</
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
#### `StorageList`
|
|
260
|
-
|
|
261
|
-
Lists files and folders in Firebase Storage.
|
|
323
|
+
<!-- Route protection -->
|
|
324
|
+
<AuthGuard requireAuth={true} redirectTo="/login">
|
|
325
|
+
<h1>Protected Content</h1>
|
|
326
|
+
</AuthGuard>
|
|
262
327
|
|
|
263
|
-
|
|
264
|
-
<
|
|
265
|
-
|
|
266
|
-
</
|
|
328
|
+
<!-- Conditional rendering -->
|
|
329
|
+
<SignedIn>
|
|
330
|
+
<h1>Welcome back!</h1>
|
|
331
|
+
</SignedIn>
|
|
267
332
|
|
|
268
|
-
<
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
{/each}
|
|
272
|
-
{#each list.prefixes as prefix}
|
|
273
|
-
<div>📁 {prefix.name}</div>
|
|
274
|
-
{/each}
|
|
275
|
-
</StorageList>
|
|
333
|
+
<SignedOut>
|
|
334
|
+
<h1>Please sign in</h1>
|
|
335
|
+
</SignedOut>
|
|
276
336
|
```
|
|
277
337
|
|
|
278
|
-
###
|
|
279
|
-
|
|
280
|
-
#### `Node`
|
|
281
|
-
|
|
282
|
-
Reactive component for Realtime Database nodes.
|
|
338
|
+
### Data Components
|
|
283
339
|
|
|
284
340
|
```svelte
|
|
285
341
|
<script>
|
|
286
|
-
import {
|
|
342
|
+
import { Doc, Collection } from 'svelte-firekit';
|
|
287
343
|
</script>
|
|
288
344
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
345
|
+
<!-- Document component -->
|
|
346
|
+
<Doc ref="users/123" let:data let:ref let:firestore>
|
|
347
|
+
<h1>{data.name}</h1>
|
|
348
|
+
<p>{data.email}</p>
|
|
349
|
+
</Doc>
|
|
350
|
+
|
|
351
|
+
<!-- Collection component -->
|
|
352
|
+
<Collection ref="posts" let:data let:ref let:firestore let:count>
|
|
353
|
+
<h1>Posts ({count})</h1>
|
|
354
|
+
{#each data as post}
|
|
355
|
+
<article>
|
|
356
|
+
<h2>{post.title}</h2>
|
|
357
|
+
<p>{post.content}</p>
|
|
358
|
+
</article>
|
|
359
|
+
{/each}
|
|
360
|
+
</Collection>
|
|
295
361
|
```
|
|
296
362
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
Reactive component for Realtime Database lists.
|
|
363
|
+
### Storage Components
|
|
300
364
|
|
|
301
365
|
```svelte
|
|
302
366
|
<script>
|
|
303
|
-
import {
|
|
367
|
+
import { StorageList, DownloadURL, UploadTask } from 'svelte-firekit';
|
|
304
368
|
</script>
|
|
305
369
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
370
|
+
<!-- Storage listing -->
|
|
371
|
+
<StorageList path="uploads" let:items let:prefixes>
|
|
372
|
+
<h2>Files</h2>
|
|
373
|
+
{#each items as item}
|
|
374
|
+
<p>{item.name}</p>
|
|
309
375
|
{/each}
|
|
310
|
-
</NodeList>
|
|
311
|
-
```
|
|
312
376
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
- **Best Practices**: Built following Firebase and SvelteKit best practices
|
|
319
|
-
- **Production Ready**: Battle-tested in production environments
|
|
320
|
-
- **Active Community**: Regular updates and active community support
|
|
321
|
-
- **Extensible**: Easy to customize and extend for your specific needs
|
|
322
|
-
|
|
323
|
-
## Next Steps
|
|
324
|
-
|
|
325
|
-
- Check out our [Getting Started](/getting-started) guide
|
|
326
|
-
- Explore the [API Reference](/api)
|
|
327
|
-
- View [Examples](/examples)
|
|
328
|
-
- Join our [Community](/community)
|
|
329
|
-
|
|
330
|
-
## Contributing
|
|
331
|
-
|
|
332
|
-
We welcome contributions! Please see our [Contributing Guide](/contributing) for more details.
|
|
333
|
-
|
|
334
|
-
## License
|
|
335
|
-
|
|
336
|
-
Svelte Firekit is released under the MIT License. See the [LICENSE](/license) file for more details.
|
|
377
|
+
<h2>Folders</h2>
|
|
378
|
+
{#each prefixes as prefix}
|
|
379
|
+
<p>{prefix.name}</p>
|
|
380
|
+
{/each}
|
|
381
|
+
</StorageList>
|
|
337
382
|
|
|
338
|
-
|
|
383
|
+
<!-- Download URL -->
|
|
384
|
+
<DownloadURL path="images/photo.jpg" let:url let:loading let:error>
|
|
385
|
+
{#if loading}
|
|
386
|
+
<p>Loading image...</p>
|
|
387
|
+
{:else if url}
|
|
388
|
+
<img src={url} alt="Photo" />
|
|
389
|
+
{:else if error}
|
|
390
|
+
<p>Error: {error.message}</p>
|
|
391
|
+
{/if}
|
|
392
|
+
</DownloadURL>
|
|
393
|
+
|
|
394
|
+
<!-- Upload with progress -->
|
|
395
|
+
<UploadTask path="uploads/file.pdf" file={selectedFile} let:progress let:completed let:error>
|
|
396
|
+
{#if !completed}
|
|
397
|
+
<div class="progress-bar">
|
|
398
|
+
<div class="progress" style="width: {progress}%"></div>
|
|
399
|
+
</div>
|
|
400
|
+
<p>{progress}% uploaded</p>
|
|
401
|
+
{:else}
|
|
402
|
+
<p>Upload complete!</p>
|
|
403
|
+
{/if}
|
|
404
|
+
</UploadTask>
|
|
405
|
+
```
|
|
339
406
|
|
|
340
|
-
|
|
407
|
+
## 🎯 Best Practices
|
|
341
408
|
|
|
342
|
-
|
|
409
|
+
### 1. Use Reactive State
|
|
343
410
|
|
|
344
411
|
```typescript
|
|
345
|
-
|
|
346
|
-
|
|
412
|
+
// ✅ Good - Reactive state
|
|
413
|
+
const user = $derived(firekitUser.user);
|
|
414
|
+
const isAuthenticated = $derived(firekitUser.isAuthenticated);
|
|
347
415
|
|
|
348
|
-
|
|
416
|
+
// ❌ Avoid - Direct service calls in templates
|
|
417
|
+
const user = firekitUser.getCurrentUser();
|
|
418
|
+
```
|
|
349
419
|
|
|
350
|
-
###
|
|
420
|
+
### 2. Handle Loading States
|
|
351
421
|
|
|
352
|
-
```
|
|
353
|
-
|
|
422
|
+
```svelte
|
|
423
|
+
{#if userDoc.loading}
|
|
424
|
+
<LoadingSpinner />
|
|
425
|
+
{:else if userDoc.error}
|
|
426
|
+
<ErrorMessage error={userDoc.error} />
|
|
427
|
+
{:else if userDoc.data}
|
|
428
|
+
<UserProfile user={userDoc.data} />
|
|
429
|
+
{/if}
|
|
354
430
|
```
|
|
355
431
|
|
|
356
|
-
###
|
|
432
|
+
### 3. Clean Up Subscriptions
|
|
357
433
|
|
|
358
434
|
```typescript
|
|
359
|
-
|
|
360
|
-
await firekitAuth.signInWithEmail(email, password);
|
|
435
|
+
import { onDestroy } from 'svelte';
|
|
361
436
|
|
|
362
|
-
|
|
363
|
-
await firekitAuth.registerWithEmail(email, password, displayName);
|
|
437
|
+
const userDoc = firekitDoc('users/123');
|
|
364
438
|
|
|
365
|
-
|
|
366
|
-
|
|
439
|
+
onDestroy(() => {
|
|
440
|
+
userDoc.dispose();
|
|
441
|
+
});
|
|
367
442
|
```
|
|
368
443
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
### Password Management
|
|
444
|
+
### 4. Use Type Safety
|
|
372
445
|
|
|
373
446
|
```typescript
|
|
374
|
-
|
|
375
|
-
|
|
447
|
+
interface User {
|
|
448
|
+
id: string;
|
|
449
|
+
name: string;
|
|
450
|
+
email: string;
|
|
451
|
+
active: boolean;
|
|
452
|
+
}
|
|
376
453
|
|
|
377
|
-
|
|
378
|
-
|
|
454
|
+
const userDoc = firekitDoc<User>('users/123');
|
|
455
|
+
const users = firekitCollection<User>('users');
|
|
379
456
|
```
|
|
380
457
|
|
|
381
|
-
###
|
|
458
|
+
### 5. Optimize Queries
|
|
382
459
|
|
|
383
460
|
```typescript
|
|
384
|
-
//
|
|
385
|
-
|
|
386
|
-
displayName: 'New Name',
|
|
387
|
-
photoURL: 'https://example.com/photo.jpg'
|
|
388
|
-
});
|
|
389
|
-
```
|
|
461
|
+
// ✅ Good - Specific queries
|
|
462
|
+
const activeUsers = firekitCollection('users', where('active', '==', true), limit(10));
|
|
390
463
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
```typescript
|
|
394
|
-
// Send verification email
|
|
395
|
-
await firekitAuth.sendEmailVerificationToUser();
|
|
464
|
+
// ❌ Avoid - Fetching all data
|
|
465
|
+
const allUsers = firekitCollection('users');
|
|
396
466
|
```
|
|
397
467
|
|
|
398
|
-
|
|
468
|
+
## 📚 Documentation
|
|
399
469
|
|
|
400
|
-
|
|
401
|
-
// Delete user account
|
|
402
|
-
await firekitAuth.deleteUserAccount();
|
|
403
|
-
```
|
|
470
|
+
For complete documentation, examples, and API reference, visit:
|
|
404
471
|
|
|
405
|
-
|
|
472
|
+
**[https://sveltefirekit.com](https://sveltefirekit.com)**
|
|
406
473
|
|
|
407
|
-
|
|
474
|
+
### Key Sections:
|
|
408
475
|
|
|
409
|
-
-
|
|
410
|
-
-
|
|
411
|
-
-
|
|
412
|
-
-
|
|
413
|
-
-
|
|
414
|
-
-
|
|
415
|
-
-
|
|
476
|
+
- [Installation Guide](https://sveltefirekit.com/installation) - Complete setup guide
|
|
477
|
+
- [Authentication](https://sveltefirekit.com/auth) - User authentication and management
|
|
478
|
+
- [Firestore Collections](https://sveltefirekit.com/collections) - Real-time data management
|
|
479
|
+
- [Document Operations](https://sveltefirekit.com/documents) - Individual document handling
|
|
480
|
+
- [File Storage](https://sveltefirekit.com/storage) - File upload and management
|
|
481
|
+
- [Realtime Database](https://sveltefirekit.com/realtime) - Real-time data synchronization
|
|
482
|
+
- [Analytics](https://sveltefirekit.com/analytics) - User and event tracking
|
|
483
|
+
- [Components](https://sveltefirekit.com/components) - Pre-built Svelte components
|
|
484
|
+
- [Presence System](https://sveltefirekit.com/presence) - User online/offline tracking
|
|
416
485
|
|
|
417
|
-
##
|
|
486
|
+
## 🤝 Contributing
|
|
418
487
|
|
|
419
|
-
|
|
488
|
+
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
420
489
|
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
message: string;
|
|
425
|
-
code?: string; // In case of errors
|
|
426
|
-
}
|
|
427
|
-
```
|
|
490
|
+
## 📄 License
|
|
491
|
+
|
|
492
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
428
493
|
|
|
429
|
-
##
|
|
494
|
+
## 🆘 Support
|
|
430
495
|
|
|
431
|
-
-
|
|
432
|
-
-
|
|
433
|
-
-
|
|
434
|
-
- ✉️ Email verification
|
|
435
|
-
- 🗑️ Account deletion
|
|
436
|
-
- 🔄 Reauthentication support
|
|
437
|
-
- 📚 Automatic Firestore user document management
|
|
438
|
-
- ⚡ Type-safe operations
|
|
496
|
+
- [Documentation](https://sveltefirekit.com)
|
|
497
|
+
- [GitHub Issues](https://github.com/code-gio/svelte-firekit/issues)
|
|
498
|
+
- [Discussions](https://github.com/code-gio/svelte-firekit/discussions)
|
|
439
499
|
|
|
440
|
-
|
|
500
|
+
---
|
|
441
501
|
|
|
442
|
-
|
|
443
|
-
2. Password updates require current password verification
|
|
444
|
-
3. Account deletion removes both authentication and Firestore data
|
|
445
|
-
4. All operations are fully typed for TypeScript support
|
|
502
|
+
**Built with ❤️ for the Svelte community**
|