yaxa-svelte 1.0.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/LICENSE +21 -0
- package/README.md +163 -0
- package/dist/assets/favicon.svg +15 -0
- package/dist/components/elements/Avatar.svelte +106 -0
- package/dist/components/elements/Avatar.svelte.d.ts +40 -0
- package/dist/components/elements/AvatarGroup.svelte +18 -0
- package/dist/components/elements/AvatarGroup.svelte.d.ts +8 -0
- package/dist/components/elements/Badge.svelte +202 -0
- package/dist/components/elements/Badge.svelte.d.ts +75 -0
- package/dist/components/elements/Button.svelte +300 -0
- package/dist/components/elements/Button.svelte.d.ts +109 -0
- package/dist/components/elements/ButtonGroup.svelte +22 -0
- package/dist/components/elements/ButtonGroup.svelte.d.ts +9 -0
- package/dist/components/elements/Chip.svelte +117 -0
- package/dist/components/elements/Chip.svelte.d.ts +15 -0
- package/dist/components/elements/DataTable.svelte +222 -0
- package/dist/components/elements/DataTable.svelte.d.ts +43 -0
- package/dist/components/elements/Icon.svelte +87 -0
- package/dist/components/elements/Icon.svelte.d.ts +10 -0
- package/dist/components/elements/Kbd.svelte +37 -0
- package/dist/components/elements/Kbd.svelte.d.ts +32 -0
- package/dist/components/elements/Link.svelte +63 -0
- package/dist/components/elements/Link.svelte.d.ts +15 -0
- package/dist/components/elements/Logo.svelte +77 -0
- package/dist/components/elements/Logo.svelte.d.ts +9 -0
- package/dist/components/elements/Meter.svelte +87 -0
- package/dist/components/elements/Meter.svelte.d.ts +14 -0
- package/dist/components/elements/Progress.svelte +63 -0
- package/dist/components/elements/Progress.svelte.d.ts +49 -0
- package/dist/components/elements/Skeleton.svelte +12 -0
- package/dist/components/elements/Skeleton.svelte.d.ts +6 -0
- package/dist/components/elements/Spinner.svelte +39 -0
- package/dist/components/elements/Spinner.svelte.d.ts +7 -0
- package/dist/components/forms/Checkbox.svelte +77 -0
- package/dist/components/forms/Checkbox.svelte.d.ts +17 -0
- package/dist/components/forms/ColorPicker.svelte +142 -0
- package/dist/components/forms/ColorPicker.svelte.d.ts +10 -0
- package/dist/components/forms/Form.svelte +84 -0
- package/dist/components/forms/Form.svelte.d.ts +14 -0
- package/dist/components/forms/FormField.svelte +56 -0
- package/dist/components/forms/FormField.svelte.d.ts +14 -0
- package/dist/components/forms/Input.svelte +138 -0
- package/dist/components/forms/Input.svelte.d.ts +58 -0
- package/dist/components/forms/RadioGroup.svelte +74 -0
- package/dist/components/forms/RadioGroup.svelte.d.ts +17 -0
- package/dist/components/forms/Select.svelte +91 -0
- package/dist/components/forms/Select.svelte.d.ts +50 -0
- package/dist/components/forms/Slider.svelte +37 -0
- package/dist/components/forms/Slider.svelte.d.ts +12 -0
- package/dist/components/forms/Switch.svelte +81 -0
- package/dist/components/forms/Switch.svelte.d.ts +53 -0
- package/dist/components/forms/Textarea.svelte +73 -0
- package/dist/components/forms/Textarea.svelte.d.ts +64 -0
- package/dist/components/layout/Card.svelte +89 -0
- package/dist/components/layout/Card.svelte.d.ts +64 -0
- package/dist/components/layout/Container.svelte +36 -0
- package/dist/components/layout/Container.svelte.d.ts +37 -0
- package/dist/components/layout/Divider.svelte +45 -0
- package/dist/components/layout/Divider.svelte.d.ts +11 -0
- package/dist/components/layout/Footer.svelte +96 -0
- package/dist/components/layout/Footer.svelte.d.ts +10 -0
- package/dist/components/layout/Header.svelte +175 -0
- package/dist/components/layout/Header.svelte.d.ts +12 -0
- package/dist/components/layout/Section.svelte +62 -0
- package/dist/components/layout/Section.svelte.d.ts +14 -0
- package/dist/components/layout/YaxaApp.svelte +48 -0
- package/dist/components/layout/YaxaApp.svelte.d.ts +12 -0
- package/dist/components/navigation/Breadcrumb.svelte +58 -0
- package/dist/components/navigation/Breadcrumb.svelte.d.ts +13 -0
- package/dist/components/navigation/CommandPalette.svelte +201 -0
- package/dist/components/navigation/CommandPalette.svelte.d.ts +19 -0
- package/dist/components/navigation/DropdownMenu.svelte +75 -0
- package/dist/components/navigation/DropdownMenu.svelte.d.ts +20 -0
- package/dist/components/navigation/Pagination.svelte +106 -0
- package/dist/components/navigation/Pagination.svelte.d.ts +10 -0
- package/dist/components/navigation/Tabs.svelte +91 -0
- package/dist/components/navigation/Tabs.svelte.d.ts +18 -0
- package/dist/components/overlays/Accordion.svelte +54 -0
- package/dist/components/overlays/Accordion.svelte.d.ts +16 -0
- package/dist/components/overlays/Alert.svelte +110 -0
- package/dist/components/overlays/Alert.svelte.d.ts +37 -0
- package/dist/components/overlays/ContextMenu.svelte +67 -0
- package/dist/components/overlays/ContextMenu.svelte.d.ts +21 -0
- package/dist/components/overlays/Modal.svelte +99 -0
- package/dist/components/overlays/Modal.svelte.d.ts +40 -0
- package/dist/components/overlays/Popover.svelte +33 -0
- package/dist/components/overlays/Popover.svelte.d.ts +11 -0
- package/dist/components/overlays/Slideover.svelte +102 -0
- package/dist/components/overlays/Slideover.svelte.d.ts +37 -0
- package/dist/components/overlays/Tooltip.svelte +39 -0
- package/dist/components/overlays/Tooltip.svelte.d.ts +12 -0
- package/dist/components/saas/AuthCard.svelte +273 -0
- package/dist/components/saas/AuthCard.svelte.d.ts +16 -0
- package/dist/components/saas/PricingCard.svelte +166 -0
- package/dist/components/saas/PricingCard.svelte.d.ts +19 -0
- package/dist/components/saas/PricingTable.svelte +139 -0
- package/dist/components/saas/PricingTable.svelte.d.ts +11 -0
- package/dist/components/saas/SubscriptionCard.svelte +162 -0
- package/dist/components/saas/SubscriptionCard.svelte.d.ts +16 -0
- package/dist/components/saas/UserMenu.svelte +137 -0
- package/dist/components/saas/UserMenu.svelte.d.ts +19 -0
- package/dist/components/seo/Favicons.svelte +22 -0
- package/dist/components/seo/Favicons.svelte.d.ts +8 -0
- package/dist/components/seo/OgImage.svelte +61 -0
- package/dist/components/seo/OgImage.svelte.d.ts +12 -0
- package/dist/components/seo/Seo.svelte +170 -0
- package/dist/components/seo/Seo.svelte.d.ts +21 -0
- package/dist/composables/useAuth.svelte.d.ts +23 -0
- package/dist/composables/useAuth.svelte.js +157 -0
- package/dist/composables/useClipboard.svelte.d.ts +9 -0
- package/dist/composables/useClipboard.svelte.js +36 -0
- package/dist/composables/useColorMode.svelte.d.ts +8 -0
- package/dist/composables/useColorMode.svelte.js +20 -0
- package/dist/composables/useDebounce.svelte.d.ts +3 -0
- package/dist/composables/useDebounce.svelte.js +17 -0
- package/dist/composables/useMediaQuery.svelte.d.ts +3 -0
- package/dist/composables/useMediaQuery.svelte.js +17 -0
- package/dist/composables/useShortcuts.svelte.d.ts +10 -0
- package/dist/composables/useShortcuts.svelte.js +50 -0
- package/dist/composables/useToast.d.ts +19 -0
- package/dist/composables/useToast.js +34 -0
- package/dist/index.d.ts +101 -0
- package/dist/index.js +92 -0
- package/dist/server/auth/hook.d.ts +14 -0
- package/dist/server/auth/hook.js +36 -0
- package/dist/server/auth/index.d.ts +39 -0
- package/dist/server/auth/index.js +69 -0
- package/dist/server/db/index.d.ts +18 -0
- package/dist/server/db/index.js +43 -0
- package/dist/server/db/schema-pg.d.ts +977 -0
- package/dist/server/db/schema-pg.js +83 -0
- package/dist/server/db/schema-sqlite.d.ts +1045 -0
- package/dist/server/db/schema-sqlite.js +83 -0
- package/dist/server/db/types.d.ts +44 -0
- package/dist/server/db/types.js +1 -0
- package/dist/server/email/index.d.ts +27 -0
- package/dist/server/email/index.js +79 -0
- package/dist/server/polar/index.d.ts +29 -0
- package/dist/server/polar/index.js +49 -0
- package/dist/server/polar/webhook.d.ts +16 -0
- package/dist/server/polar/webhook.js +118 -0
- package/dist/site/config.d.ts +63 -0
- package/dist/site/config.js +48 -0
- package/dist/site/context.d.ts +11 -0
- package/dist/site/context.js +23 -0
- package/dist/site/hook.d.ts +15 -0
- package/dist/site/hook.js +38 -0
- package/dist/site/manifest.d.ts +6 -0
- package/dist/site/manifest.js +32 -0
- package/dist/site/og.d.ts +14 -0
- package/dist/site/og.js +116 -0
- package/dist/site/robots.d.ts +10 -0
- package/dist/site/robots.js +54 -0
- package/dist/site/schema.d.ts +67 -0
- package/dist/site/schema.js +67 -0
- package/dist/site/seo-helpers.d.ts +36 -0
- package/dist/site/seo-helpers.js +21 -0
- package/dist/site/sitemap-xsl.d.ts +6 -0
- package/dist/site/sitemap-xsl.js +164 -0
- package/dist/site/sitemap.d.ts +20 -0
- package/dist/site/sitemap.js +61 -0
- package/dist/styles/yaxa.css +84 -0
- package/dist/theme/theme.svelte.d.ts +74 -0
- package/dist/theme/theme.svelte.js +421 -0
- package/dist/utils/cn.d.ts +3 -0
- package/dist/utils/cn.js +3 -0
- package/dist/vite/index.d.ts +20 -0
- package/dist/vite/index.js +29 -0
- package/package.json +108 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { toast } from 'svelte-sonner';
|
|
2
|
+
export function useToast() {
|
|
3
|
+
return {
|
|
4
|
+
add: (options) => {
|
|
5
|
+
if (typeof options === 'string') {
|
|
6
|
+
return toast(options);
|
|
7
|
+
}
|
|
8
|
+
const { title, description, color = 'neutral', duration = 4000, action } = options;
|
|
9
|
+
const actionObj = action
|
|
10
|
+
? {
|
|
11
|
+
label: action.label,
|
|
12
|
+
onClick: action.onClick
|
|
13
|
+
}
|
|
14
|
+
: undefined;
|
|
15
|
+
switch (color) {
|
|
16
|
+
case 'success':
|
|
17
|
+
return toast.success(title || '', { description, duration, action: actionObj });
|
|
18
|
+
case 'error':
|
|
19
|
+
return toast.error(title || '', { description, duration, action: actionObj });
|
|
20
|
+
case 'warning':
|
|
21
|
+
return toast.warning(title || '', { description, duration, action: actionObj });
|
|
22
|
+
case 'primary':
|
|
23
|
+
case 'neutral':
|
|
24
|
+
default:
|
|
25
|
+
return toast.info(title || '', { description, duration, action: actionObj });
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
success: (title, description) => toast.success(title, { description }),
|
|
29
|
+
error: (title, description) => toast.error(title, { description }),
|
|
30
|
+
warning: (title, description) => toast.warning(title, { description }),
|
|
31
|
+
info: (title, description) => toast.info(title, { description }),
|
|
32
|
+
dismiss: (id) => toast.dismiss(id)
|
|
33
|
+
};
|
|
34
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export { default as Button } from './components/elements/Button.svelte';
|
|
2
|
+
export { default as ButtonGroup } from './components/elements/ButtonGroup.svelte';
|
|
3
|
+
export { default as Badge } from './components/elements/Badge.svelte';
|
|
4
|
+
export { default as Avatar } from './components/elements/Avatar.svelte';
|
|
5
|
+
export { default as AvatarGroup } from './components/elements/AvatarGroup.svelte';
|
|
6
|
+
export { default as Kbd } from './components/elements/Kbd.svelte';
|
|
7
|
+
export { default as Icon } from './components/elements/Icon.svelte';
|
|
8
|
+
export { default as Spinner } from './components/elements/Spinner.svelte';
|
|
9
|
+
export { default as Progress } from './components/elements/Progress.svelte';
|
|
10
|
+
export { default as Skeleton } from './components/elements/Skeleton.svelte';
|
|
11
|
+
export { default as Link } from './components/elements/Link.svelte';
|
|
12
|
+
export { default as Logo } from './components/elements/Logo.svelte';
|
|
13
|
+
export { default as DataTable } from './components/elements/DataTable.svelte';
|
|
14
|
+
export type { Column } from './components/elements/DataTable.svelte';
|
|
15
|
+
export { default as Chip } from './components/elements/Chip.svelte';
|
|
16
|
+
export { default as Meter } from './components/elements/Meter.svelte';
|
|
17
|
+
export { default as Form } from './components/forms/Form.svelte';
|
|
18
|
+
export { default as FormField } from './components/forms/FormField.svelte';
|
|
19
|
+
export { default as Input } from './components/forms/Input.svelte';
|
|
20
|
+
export { default as Textarea } from './components/forms/Textarea.svelte';
|
|
21
|
+
export { default as Checkbox } from './components/forms/Checkbox.svelte';
|
|
22
|
+
export { default as Switch } from './components/forms/Switch.svelte';
|
|
23
|
+
export { default as Select } from './components/forms/Select.svelte';
|
|
24
|
+
export { default as RadioGroup } from './components/forms/RadioGroup.svelte';
|
|
25
|
+
export { default as Slider } from './components/forms/Slider.svelte';
|
|
26
|
+
export { default as ColorPicker } from './components/forms/ColorPicker.svelte';
|
|
27
|
+
export { default as Container } from './components/layout/Container.svelte';
|
|
28
|
+
export { default as Header } from './components/layout/Header.svelte';
|
|
29
|
+
export { default as Footer } from './components/layout/Footer.svelte';
|
|
30
|
+
export { default as Section } from './components/layout/Section.svelte';
|
|
31
|
+
export { default as Card } from './components/layout/Card.svelte';
|
|
32
|
+
export { default as Divider } from './components/layout/Divider.svelte';
|
|
33
|
+
export { default as YaxaApp } from './components/layout/YaxaApp.svelte';
|
|
34
|
+
export { default as Tabs } from './components/navigation/Tabs.svelte';
|
|
35
|
+
export { default as Breadcrumb } from './components/navigation/Breadcrumb.svelte';
|
|
36
|
+
export { default as Pagination } from './components/navigation/Pagination.svelte';
|
|
37
|
+
export { default as CommandPalette } from './components/navigation/CommandPalette.svelte';
|
|
38
|
+
export { default as DropdownMenu } from './components/navigation/DropdownMenu.svelte';
|
|
39
|
+
export { default as Modal } from './components/overlays/Modal.svelte';
|
|
40
|
+
export { default as Slideover } from './components/overlays/Slideover.svelte';
|
|
41
|
+
export { default as Popover } from './components/overlays/Popover.svelte';
|
|
42
|
+
export { default as Tooltip } from './components/overlays/Tooltip.svelte';
|
|
43
|
+
export { default as Alert } from './components/overlays/Alert.svelte';
|
|
44
|
+
export { default as Accordion } from './components/overlays/Accordion.svelte';
|
|
45
|
+
export { default as ContextMenu } from './components/overlays/ContextMenu.svelte';
|
|
46
|
+
export type { ContextMenuItem } from './components/overlays/ContextMenu.svelte';
|
|
47
|
+
export { useClipboard } from './composables/useClipboard.svelte';
|
|
48
|
+
export type { UseClipboardOptions } from './composables/useClipboard.svelte';
|
|
49
|
+
export { useShortcuts } from './composables/useShortcuts.svelte';
|
|
50
|
+
export type { ShortcutItem, ShortcutConfig } from './composables/useShortcuts.svelte';
|
|
51
|
+
export { useColorMode } from './composables/useColorMode.svelte';
|
|
52
|
+
export { useToast } from './composables/useToast';
|
|
53
|
+
export type { ToastOptions, ToastAction } from './composables/useToast';
|
|
54
|
+
export { useMediaQuery } from './composables/useMediaQuery.svelte';
|
|
55
|
+
export { useDebounce } from './composables/useDebounce.svelte';
|
|
56
|
+
export { toast } from 'svelte-sonner';
|
|
57
|
+
export { theme, themeInitScript, ACCENT_PALETTES, NEUTRAL_PALETTES, FONT_PRESETS, RADIUS_PRESETS, FONT_SIZE_PRESETS } from './theme/theme.svelte';
|
|
58
|
+
export type { ThemeMode, AccentName, NeutralName, FontFamily, RadiusPreset, BaseFontSize, AccentOption } from './theme/theme.svelte';
|
|
59
|
+
export { default as Seo } from './components/seo/Seo.svelte';
|
|
60
|
+
export { default as Favicons } from './components/seo/Favicons.svelte';
|
|
61
|
+
export { default as OgImage } from './components/seo/OgImage.svelte';
|
|
62
|
+
export { defineSiteConfig } from './site/config';
|
|
63
|
+
export type { SiteConfig, NavItem, AuthorConfig } from './site/config';
|
|
64
|
+
export { setSiteConfig, getSiteConfig } from './site/context';
|
|
65
|
+
export { createYaxaHook } from './site/hook';
|
|
66
|
+
export type { YaxaHookOptions } from './site/hook';
|
|
67
|
+
export { createRobotsHandler } from './site/robots';
|
|
68
|
+
export type { RobotsOptions } from './site/robots';
|
|
69
|
+
export { createSitemapHandler } from './site/sitemap';
|
|
70
|
+
export type { SitemapRoute, SitemapOptions } from './site/sitemap';
|
|
71
|
+
export { createSitemapXslHandler, generateSitemapXsl } from './site/sitemap-xsl';
|
|
72
|
+
export { createOgImageHandler, generateOgSvg } from './site/og';
|
|
73
|
+
export type { OgImageOptions } from './site/og';
|
|
74
|
+
export { createManifestHandler } from './site/manifest';
|
|
75
|
+
export { generateWebSiteSchema, generateOrganizationSchema, generateArticleSchema, generateBreadcrumbSchema } from './site/schema';
|
|
76
|
+
export type { SchemaType, BreadcrumbItem, ArticleSchemaData } from './site/schema';
|
|
77
|
+
export { definePageSeo } from './site/seo-helpers';
|
|
78
|
+
export type { PageSeoConfig } from './site/seo-helpers';
|
|
79
|
+
export { yaxa } from './vite/index';
|
|
80
|
+
export type { YaxaPluginOptions } from './vite/index';
|
|
81
|
+
export { default as AuthCard } from './components/saas/AuthCard.svelte';
|
|
82
|
+
export { default as UserMenu } from './components/saas/UserMenu.svelte';
|
|
83
|
+
export { default as PricingCard } from './components/saas/PricingCard.svelte';
|
|
84
|
+
export { default as PricingTable } from './components/saas/PricingTable.svelte';
|
|
85
|
+
export { default as SubscriptionCard } from './components/saas/SubscriptionCard.svelte';
|
|
86
|
+
export { useAuth } from './composables/useAuth.svelte';
|
|
87
|
+
export type { UseAuthOptions, SocialProvider } from './composables/useAuth.svelte';
|
|
88
|
+
export { getDb, schemaPg, schemaSqlite } from './server/db/index';
|
|
89
|
+
export type { DbConfig, DbDriver, SaasUser, SaasSubscription, SubscriptionStatus, PricingTier, PricingFeature } from './server/db/index';
|
|
90
|
+
export { createYaxaAuth } from './server/auth/index';
|
|
91
|
+
export type { YaxaAuthConfig, YaxaAuth } from './server/auth/index';
|
|
92
|
+
export { createYaxaAuthHook } from './server/auth/hook';
|
|
93
|
+
export type { YaxaAuthHookOptions } from './server/auth/hook';
|
|
94
|
+
export { getPolarClient, createPolarCheckout, createPolarCustomerPortalSession } from './server/polar/index';
|
|
95
|
+
export type { PolarConfig, CreateCheckoutOptions } from './server/polar/index';
|
|
96
|
+
export { createPolarWebhookHandler } from './server/polar/webhook';
|
|
97
|
+
export type { PolarWebhookOptions } from './server/polar/webhook';
|
|
98
|
+
export { getResendClient, sendMagicLinkEmail, sendWelcomeEmail } from './server/email/index';
|
|
99
|
+
export type { ResendEmailConfig, SendMagicLinkOptions, SendWelcomeEmailOptions } from './server/email/index';
|
|
100
|
+
export { cn, tv } from './utils/cn';
|
|
101
|
+
export type { VariantProps } from './utils/cn';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Yaxa - Nuxt UI v4 Equivalent for SvelteKit 2.7+ & Svelte 5
|
|
2
|
+
// Elements
|
|
3
|
+
export { default as Button } from './components/elements/Button.svelte';
|
|
4
|
+
export { default as ButtonGroup } from './components/elements/ButtonGroup.svelte';
|
|
5
|
+
export { default as Badge } from './components/elements/Badge.svelte';
|
|
6
|
+
export { default as Avatar } from './components/elements/Avatar.svelte';
|
|
7
|
+
export { default as AvatarGroup } from './components/elements/AvatarGroup.svelte';
|
|
8
|
+
export { default as Kbd } from './components/elements/Kbd.svelte';
|
|
9
|
+
export { default as Icon } from './components/elements/Icon.svelte';
|
|
10
|
+
export { default as Spinner } from './components/elements/Spinner.svelte';
|
|
11
|
+
export { default as Progress } from './components/elements/Progress.svelte';
|
|
12
|
+
export { default as Skeleton } from './components/elements/Skeleton.svelte';
|
|
13
|
+
export { default as Link } from './components/elements/Link.svelte';
|
|
14
|
+
export { default as Logo } from './components/elements/Logo.svelte';
|
|
15
|
+
export { default as DataTable } from './components/elements/DataTable.svelte';
|
|
16
|
+
export { default as Chip } from './components/elements/Chip.svelte';
|
|
17
|
+
export { default as Meter } from './components/elements/Meter.svelte';
|
|
18
|
+
// Form Controls
|
|
19
|
+
export { default as Form } from './components/forms/Form.svelte';
|
|
20
|
+
export { default as FormField } from './components/forms/FormField.svelte';
|
|
21
|
+
export { default as Input } from './components/forms/Input.svelte';
|
|
22
|
+
export { default as Textarea } from './components/forms/Textarea.svelte';
|
|
23
|
+
export { default as Checkbox } from './components/forms/Checkbox.svelte';
|
|
24
|
+
export { default as Switch } from './components/forms/Switch.svelte';
|
|
25
|
+
export { default as Select } from './components/forms/Select.svelte';
|
|
26
|
+
export { default as RadioGroup } from './components/forms/RadioGroup.svelte';
|
|
27
|
+
export { default as Slider } from './components/forms/Slider.svelte';
|
|
28
|
+
export { default as ColorPicker } from './components/forms/ColorPicker.svelte';
|
|
29
|
+
// Layout & Shell
|
|
30
|
+
export { default as Container } from './components/layout/Container.svelte';
|
|
31
|
+
export { default as Header } from './components/layout/Header.svelte';
|
|
32
|
+
export { default as Footer } from './components/layout/Footer.svelte';
|
|
33
|
+
export { default as Section } from './components/layout/Section.svelte';
|
|
34
|
+
export { default as Card } from './components/layout/Card.svelte';
|
|
35
|
+
export { default as Divider } from './components/layout/Divider.svelte';
|
|
36
|
+
export { default as YaxaApp } from './components/layout/YaxaApp.svelte';
|
|
37
|
+
// Navigation & Command
|
|
38
|
+
export { default as Tabs } from './components/navigation/Tabs.svelte';
|
|
39
|
+
export { default as Breadcrumb } from './components/navigation/Breadcrumb.svelte';
|
|
40
|
+
export { default as Pagination } from './components/navigation/Pagination.svelte';
|
|
41
|
+
export { default as CommandPalette } from './components/navigation/CommandPalette.svelte';
|
|
42
|
+
export { default as DropdownMenu } from './components/navigation/DropdownMenu.svelte';
|
|
43
|
+
// Overlays & Feedback
|
|
44
|
+
export { default as Modal } from './components/overlays/Modal.svelte';
|
|
45
|
+
export { default as Slideover } from './components/overlays/Slideover.svelte';
|
|
46
|
+
export { default as Popover } from './components/overlays/Popover.svelte';
|
|
47
|
+
export { default as Tooltip } from './components/overlays/Tooltip.svelte';
|
|
48
|
+
export { default as Alert } from './components/overlays/Alert.svelte';
|
|
49
|
+
export { default as Accordion } from './components/overlays/Accordion.svelte';
|
|
50
|
+
export { default as ContextMenu } from './components/overlays/ContextMenu.svelte';
|
|
51
|
+
// Composables & Runes (Nuxt UI v4 Composables Parity)
|
|
52
|
+
export { useClipboard } from './composables/useClipboard.svelte';
|
|
53
|
+
export { useShortcuts } from './composables/useShortcuts.svelte';
|
|
54
|
+
export { useColorMode } from './composables/useColorMode.svelte';
|
|
55
|
+
export { useToast } from './composables/useToast';
|
|
56
|
+
export { useMediaQuery } from './composables/useMediaQuery.svelte';
|
|
57
|
+
export { useDebounce } from './composables/useDebounce.svelte';
|
|
58
|
+
// Feedback & Toast notification helper
|
|
59
|
+
export { toast } from 'svelte-sonner';
|
|
60
|
+
// Theming
|
|
61
|
+
export { theme, themeInitScript, ACCENT_PALETTES, NEUTRAL_PALETTES, FONT_PRESETS, RADIUS_PRESETS, FONT_SIZE_PRESETS } from './theme/theme.svelte';
|
|
62
|
+
// Site Essentials & SEO Suite
|
|
63
|
+
export { default as Seo } from './components/seo/Seo.svelte';
|
|
64
|
+
export { default as Favicons } from './components/seo/Favicons.svelte';
|
|
65
|
+
export { default as OgImage } from './components/seo/OgImage.svelte';
|
|
66
|
+
export { defineSiteConfig } from './site/config';
|
|
67
|
+
export { setSiteConfig, getSiteConfig } from './site/context';
|
|
68
|
+
export { createYaxaHook } from './site/hook';
|
|
69
|
+
export { createRobotsHandler } from './site/robots';
|
|
70
|
+
export { createSitemapHandler } from './site/sitemap';
|
|
71
|
+
export { createSitemapXslHandler, generateSitemapXsl } from './site/sitemap-xsl';
|
|
72
|
+
export { createOgImageHandler, generateOgSvg } from './site/og';
|
|
73
|
+
export { createManifestHandler } from './site/manifest';
|
|
74
|
+
export { generateWebSiteSchema, generateOrganizationSchema, generateArticleSchema, generateBreadcrumbSchema } from './site/schema';
|
|
75
|
+
export { definePageSeo } from './site/seo-helpers';
|
|
76
|
+
export { yaxa } from './vite/index';
|
|
77
|
+
// SaaS Suite: Components, Composables & Integrations
|
|
78
|
+
export { default as AuthCard } from './components/saas/AuthCard.svelte';
|
|
79
|
+
export { default as UserMenu } from './components/saas/UserMenu.svelte';
|
|
80
|
+
export { default as PricingCard } from './components/saas/PricingCard.svelte';
|
|
81
|
+
export { default as PricingTable } from './components/saas/PricingTable.svelte';
|
|
82
|
+
export { default as SubscriptionCard } from './components/saas/SubscriptionCard.svelte';
|
|
83
|
+
export { useAuth } from './composables/useAuth.svelte';
|
|
84
|
+
// SaaS Server & DB Modules
|
|
85
|
+
export { getDb, schemaPg, schemaSqlite } from './server/db/index';
|
|
86
|
+
export { createYaxaAuth } from './server/auth/index';
|
|
87
|
+
export { createYaxaAuthHook } from './server/auth/hook';
|
|
88
|
+
export { getPolarClient, createPolarCheckout, createPolarCustomerPortalSession } from './server/polar/index';
|
|
89
|
+
export { createPolarWebhookHandler } from './server/polar/webhook';
|
|
90
|
+
export { getResendClient, sendMagicLinkEmail, sendWelcomeEmail } from './server/email/index';
|
|
91
|
+
// Utilities
|
|
92
|
+
export { cn, tv } from './utils/cn';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Handle } from '@sveltejs/kit';
|
|
2
|
+
import type { YaxaAuth } from './index';
|
|
3
|
+
export interface YaxaAuthHookOptions {
|
|
4
|
+
auth: YaxaAuth;
|
|
5
|
+
protectedPaths?: string[];
|
|
6
|
+
loginPath?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Creates an all-in-one SvelteKit Server Hook for Better-Auth.
|
|
10
|
+
* - Automatically routes /api/auth/* to Better-Auth
|
|
11
|
+
* - Parses and caches session on event.locals
|
|
12
|
+
* - Enforces path protection for dashboard/app routes
|
|
13
|
+
*/
|
|
14
|
+
export declare function createYaxaAuthHook(options: YaxaAuthHookOptions): Handle;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { redirect } from '@sveltejs/kit';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an all-in-one SvelteKit Server Hook for Better-Auth.
|
|
4
|
+
* - Automatically routes /api/auth/* to Better-Auth
|
|
5
|
+
* - Parses and caches session on event.locals
|
|
6
|
+
* - Enforces path protection for dashboard/app routes
|
|
7
|
+
*/
|
|
8
|
+
export function createYaxaAuthHook(options) {
|
|
9
|
+
const { auth, protectedPaths = ['/dashboard', '/app', '/settings'], loginPath = '/login' } = options;
|
|
10
|
+
return async ({ event, resolve }) => {
|
|
11
|
+
// 1. Intercept Better-Auth API routes (/api/auth/*)
|
|
12
|
+
if (event.url.pathname.startsWith('/api/auth')) {
|
|
13
|
+
return auth.handler(event.request);
|
|
14
|
+
}
|
|
15
|
+
// 2. Fetch session from cookies/headers
|
|
16
|
+
try {
|
|
17
|
+
const session = await auth.api.getSession({
|
|
18
|
+
headers: event.request.headers
|
|
19
|
+
});
|
|
20
|
+
// Attach to locals
|
|
21
|
+
event.locals.session = session?.session || null;
|
|
22
|
+
event.locals.user = session?.user || null;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
event.locals.session = null;
|
|
26
|
+
event.locals.user = null;
|
|
27
|
+
}
|
|
28
|
+
// 3. Check protected routes
|
|
29
|
+
const isProtected = protectedPaths.some((path) => event.url.pathname.startsWith(path));
|
|
30
|
+
if (isProtected && !event.locals.user) {
|
|
31
|
+
const returnTo = encodeURIComponent(event.url.pathname + event.url.search);
|
|
32
|
+
throw redirect(303, `${loginPath}?returnTo=${returnTo}`);
|
|
33
|
+
}
|
|
34
|
+
return resolve(event);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type BetterAuthOptions } from 'better-auth';
|
|
2
|
+
import { type AnyDb } from '../db';
|
|
3
|
+
export interface YaxaAuthConfig {
|
|
4
|
+
db?: AnyDb;
|
|
5
|
+
driver?: 'neon' | 'turso' | 'sqlite';
|
|
6
|
+
secret?: string;
|
|
7
|
+
baseURL?: string;
|
|
8
|
+
socialProviders?: {
|
|
9
|
+
github?: {
|
|
10
|
+
clientId: string;
|
|
11
|
+
clientSecret: string;
|
|
12
|
+
};
|
|
13
|
+
google?: {
|
|
14
|
+
clientId: string;
|
|
15
|
+
clientSecret: string;
|
|
16
|
+
};
|
|
17
|
+
discord?: {
|
|
18
|
+
clientId: string;
|
|
19
|
+
clientSecret: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
emailAndPassword?: {
|
|
23
|
+
enabled: boolean;
|
|
24
|
+
requireEmailVerification?: boolean;
|
|
25
|
+
};
|
|
26
|
+
magicLink?: {
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
sendMagicLink?: (data: {
|
|
29
|
+
email: string;
|
|
30
|
+
token: string;
|
|
31
|
+
url: string;
|
|
32
|
+
}) => Promise<void>;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Creates and initializes a Better-Auth instance pre-configured for Yaxa and Drizzle.
|
|
37
|
+
*/
|
|
38
|
+
export declare function createYaxaAuth(config?: YaxaAuthConfig): import("better-auth").Auth<BetterAuthOptions>;
|
|
39
|
+
export type YaxaAuth = ReturnType<typeof createYaxaAuth>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { betterAuth } from 'better-auth';
|
|
2
|
+
import { drizzleAdapter } from 'better-auth/adapters/drizzle';
|
|
3
|
+
import { schemaPg, schemaSqlite, getDb } from '../db';
|
|
4
|
+
/**
|
|
5
|
+
* Creates and initializes a Better-Auth instance pre-configured for Yaxa and Drizzle.
|
|
6
|
+
*/
|
|
7
|
+
export function createYaxaAuth(config = {}) {
|
|
8
|
+
const driver = config.driver ||
|
|
9
|
+
(typeof process !== 'undefined'
|
|
10
|
+
? process.env.DATABASE_DRIVER
|
|
11
|
+
: undefined) ||
|
|
12
|
+
'neon';
|
|
13
|
+
const database = config.db || getDb({ driver });
|
|
14
|
+
const authOptions = {
|
|
15
|
+
secret: config.secret ||
|
|
16
|
+
(typeof process !== 'undefined' ? process.env.BETTER_AUTH_SECRET : undefined) ||
|
|
17
|
+
'yaxa-default-super-secret-key-change-in-prod-123456789',
|
|
18
|
+
baseURL: config.baseURL ||
|
|
19
|
+
(typeof process !== 'undefined'
|
|
20
|
+
? process.env.PUBLIC_APP_URL || process.env.BETTER_AUTH_URL
|
|
21
|
+
: undefined) ||
|
|
22
|
+
'http://localhost:5173',
|
|
23
|
+
database: drizzleAdapter(database, {
|
|
24
|
+
provider: driver === 'neon' ? 'pg' : 'sqlite',
|
|
25
|
+
schema: driver === 'neon' ? schemaPg : schemaSqlite
|
|
26
|
+
}),
|
|
27
|
+
emailAndPassword: {
|
|
28
|
+
enabled: config.emailAndPassword?.enabled ?? true,
|
|
29
|
+
requireEmailVerification: config.emailAndPassword?.requireEmailVerification ?? false
|
|
30
|
+
},
|
|
31
|
+
socialProviders: {
|
|
32
|
+
...(config.socialProviders?.github
|
|
33
|
+
? {
|
|
34
|
+
github: {
|
|
35
|
+
clientId: config.socialProviders.github.clientId,
|
|
36
|
+
clientSecret: config.socialProviders.github.clientSecret
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
: typeof process !== 'undefined' &&
|
|
40
|
+
process.env.GITHUB_CLIENT_ID &&
|
|
41
|
+
process.env.GITHUB_CLIENT_SECRET
|
|
42
|
+
? {
|
|
43
|
+
github: {
|
|
44
|
+
clientId: process.env.GITHUB_CLIENT_ID,
|
|
45
|
+
clientSecret: process.env.GITHUB_CLIENT_SECRET
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
: {}),
|
|
49
|
+
...(config.socialProviders?.google
|
|
50
|
+
? {
|
|
51
|
+
google: {
|
|
52
|
+
clientId: config.socialProviders.google.clientId,
|
|
53
|
+
clientSecret: config.socialProviders.google.clientSecret
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
: typeof process !== 'undefined' &&
|
|
57
|
+
process.env.GOOGLE_CLIENT_ID &&
|
|
58
|
+
process.env.GOOGLE_CLIENT_SECRET
|
|
59
|
+
? {
|
|
60
|
+
google: {
|
|
61
|
+
clientId: process.env.GOOGLE_CLIENT_ID,
|
|
62
|
+
clientSecret: process.env.GOOGLE_CLIENT_SECRET
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
: {})
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
return betterAuth(authOptions);
|
|
69
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { drizzle as drizzleNeon } from 'drizzle-orm/neon-http';
|
|
2
|
+
import { drizzle as drizzleLibsql } from 'drizzle-orm/libsql';
|
|
3
|
+
import * as schemaPg from './schema-pg';
|
|
4
|
+
import * as schemaSqlite from './schema-sqlite';
|
|
5
|
+
import type { DbDriver } from './types';
|
|
6
|
+
export * from './types';
|
|
7
|
+
export { schemaPg, schemaSqlite };
|
|
8
|
+
export interface DbConfig {
|
|
9
|
+
driver?: DbDriver;
|
|
10
|
+
url?: string;
|
|
11
|
+
authToken?: string;
|
|
12
|
+
}
|
|
13
|
+
export type AnyDb = ReturnType<typeof drizzleNeon<typeof schemaPg>> | ReturnType<typeof drizzleLibsql<typeof schemaSqlite>>;
|
|
14
|
+
/**
|
|
15
|
+
* Creates or retrieves a Drizzle database client instance.
|
|
16
|
+
* Supports switching between Neon (PostgreSQL) and Turso (LibSQL/SQLite).
|
|
17
|
+
*/
|
|
18
|
+
export declare function getDb(config?: DbConfig): AnyDb;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { drizzle as drizzleNeon } from 'drizzle-orm/neon-http';
|
|
2
|
+
import { drizzle as drizzleLibsql } from 'drizzle-orm/libsql';
|
|
3
|
+
import { neon } from '@neondatabase/serverless';
|
|
4
|
+
import { createClient } from '@libsql/client';
|
|
5
|
+
import * as schemaPg from './schema-pg';
|
|
6
|
+
import * as schemaSqlite from './schema-sqlite';
|
|
7
|
+
export * from './types';
|
|
8
|
+
export { schemaPg, schemaSqlite };
|
|
9
|
+
let cachedDb = null;
|
|
10
|
+
/**
|
|
11
|
+
* Creates or retrieves a Drizzle database client instance.
|
|
12
|
+
* Supports switching between Neon (PostgreSQL) and Turso (LibSQL/SQLite).
|
|
13
|
+
*/
|
|
14
|
+
export function getDb(config) {
|
|
15
|
+
if (cachedDb && !config) {
|
|
16
|
+
return cachedDb;
|
|
17
|
+
}
|
|
18
|
+
const driver = config?.driver ||
|
|
19
|
+
(typeof process !== 'undefined' ? process.env.DATABASE_DRIVER : undefined) ||
|
|
20
|
+
'neon';
|
|
21
|
+
const url = config?.url ||
|
|
22
|
+
(typeof process !== 'undefined'
|
|
23
|
+
? process.env.DATABASE_URL || 'postgres://localhost:5432/yaxa_saas'
|
|
24
|
+
: 'postgres://localhost:5432/yaxa_saas');
|
|
25
|
+
const authToken = config?.authToken ||
|
|
26
|
+
(typeof process !== 'undefined' ? process.env.DATABASE_AUTH_TOKEN : undefined);
|
|
27
|
+
if (driver === 'turso' || driver === 'sqlite') {
|
|
28
|
+
const client = createClient({
|
|
29
|
+
url,
|
|
30
|
+
authToken
|
|
31
|
+
});
|
|
32
|
+
const db = drizzleLibsql(client, { schema: schemaSqlite });
|
|
33
|
+
if (!config)
|
|
34
|
+
cachedDb = db;
|
|
35
|
+
return db;
|
|
36
|
+
}
|
|
37
|
+
// Default to Neon Serverless Postgres
|
|
38
|
+
const sql = neon(url);
|
|
39
|
+
const db = drizzleNeon(sql, { schema: schemaPg });
|
|
40
|
+
if (!config)
|
|
41
|
+
cachedDb = db;
|
|
42
|
+
return db;
|
|
43
|
+
}
|