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.
Files changed (169) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +163 -0
  3. package/dist/assets/favicon.svg +15 -0
  4. package/dist/components/elements/Avatar.svelte +106 -0
  5. package/dist/components/elements/Avatar.svelte.d.ts +40 -0
  6. package/dist/components/elements/AvatarGroup.svelte +18 -0
  7. package/dist/components/elements/AvatarGroup.svelte.d.ts +8 -0
  8. package/dist/components/elements/Badge.svelte +202 -0
  9. package/dist/components/elements/Badge.svelte.d.ts +75 -0
  10. package/dist/components/elements/Button.svelte +300 -0
  11. package/dist/components/elements/Button.svelte.d.ts +109 -0
  12. package/dist/components/elements/ButtonGroup.svelte +22 -0
  13. package/dist/components/elements/ButtonGroup.svelte.d.ts +9 -0
  14. package/dist/components/elements/Chip.svelte +117 -0
  15. package/dist/components/elements/Chip.svelte.d.ts +15 -0
  16. package/dist/components/elements/DataTable.svelte +222 -0
  17. package/dist/components/elements/DataTable.svelte.d.ts +43 -0
  18. package/dist/components/elements/Icon.svelte +87 -0
  19. package/dist/components/elements/Icon.svelte.d.ts +10 -0
  20. package/dist/components/elements/Kbd.svelte +37 -0
  21. package/dist/components/elements/Kbd.svelte.d.ts +32 -0
  22. package/dist/components/elements/Link.svelte +63 -0
  23. package/dist/components/elements/Link.svelte.d.ts +15 -0
  24. package/dist/components/elements/Logo.svelte +77 -0
  25. package/dist/components/elements/Logo.svelte.d.ts +9 -0
  26. package/dist/components/elements/Meter.svelte +87 -0
  27. package/dist/components/elements/Meter.svelte.d.ts +14 -0
  28. package/dist/components/elements/Progress.svelte +63 -0
  29. package/dist/components/elements/Progress.svelte.d.ts +49 -0
  30. package/dist/components/elements/Skeleton.svelte +12 -0
  31. package/dist/components/elements/Skeleton.svelte.d.ts +6 -0
  32. package/dist/components/elements/Spinner.svelte +39 -0
  33. package/dist/components/elements/Spinner.svelte.d.ts +7 -0
  34. package/dist/components/forms/Checkbox.svelte +77 -0
  35. package/dist/components/forms/Checkbox.svelte.d.ts +17 -0
  36. package/dist/components/forms/ColorPicker.svelte +142 -0
  37. package/dist/components/forms/ColorPicker.svelte.d.ts +10 -0
  38. package/dist/components/forms/Form.svelte +84 -0
  39. package/dist/components/forms/Form.svelte.d.ts +14 -0
  40. package/dist/components/forms/FormField.svelte +56 -0
  41. package/dist/components/forms/FormField.svelte.d.ts +14 -0
  42. package/dist/components/forms/Input.svelte +138 -0
  43. package/dist/components/forms/Input.svelte.d.ts +58 -0
  44. package/dist/components/forms/RadioGroup.svelte +74 -0
  45. package/dist/components/forms/RadioGroup.svelte.d.ts +17 -0
  46. package/dist/components/forms/Select.svelte +91 -0
  47. package/dist/components/forms/Select.svelte.d.ts +50 -0
  48. package/dist/components/forms/Slider.svelte +37 -0
  49. package/dist/components/forms/Slider.svelte.d.ts +12 -0
  50. package/dist/components/forms/Switch.svelte +81 -0
  51. package/dist/components/forms/Switch.svelte.d.ts +53 -0
  52. package/dist/components/forms/Textarea.svelte +73 -0
  53. package/dist/components/forms/Textarea.svelte.d.ts +64 -0
  54. package/dist/components/layout/Card.svelte +89 -0
  55. package/dist/components/layout/Card.svelte.d.ts +64 -0
  56. package/dist/components/layout/Container.svelte +36 -0
  57. package/dist/components/layout/Container.svelte.d.ts +37 -0
  58. package/dist/components/layout/Divider.svelte +45 -0
  59. package/dist/components/layout/Divider.svelte.d.ts +11 -0
  60. package/dist/components/layout/Footer.svelte +96 -0
  61. package/dist/components/layout/Footer.svelte.d.ts +10 -0
  62. package/dist/components/layout/Header.svelte +175 -0
  63. package/dist/components/layout/Header.svelte.d.ts +12 -0
  64. package/dist/components/layout/Section.svelte +62 -0
  65. package/dist/components/layout/Section.svelte.d.ts +14 -0
  66. package/dist/components/layout/YaxaApp.svelte +48 -0
  67. package/dist/components/layout/YaxaApp.svelte.d.ts +12 -0
  68. package/dist/components/navigation/Breadcrumb.svelte +58 -0
  69. package/dist/components/navigation/Breadcrumb.svelte.d.ts +13 -0
  70. package/dist/components/navigation/CommandPalette.svelte +201 -0
  71. package/dist/components/navigation/CommandPalette.svelte.d.ts +19 -0
  72. package/dist/components/navigation/DropdownMenu.svelte +75 -0
  73. package/dist/components/navigation/DropdownMenu.svelte.d.ts +20 -0
  74. package/dist/components/navigation/Pagination.svelte +106 -0
  75. package/dist/components/navigation/Pagination.svelte.d.ts +10 -0
  76. package/dist/components/navigation/Tabs.svelte +91 -0
  77. package/dist/components/navigation/Tabs.svelte.d.ts +18 -0
  78. package/dist/components/overlays/Accordion.svelte +54 -0
  79. package/dist/components/overlays/Accordion.svelte.d.ts +16 -0
  80. package/dist/components/overlays/Alert.svelte +110 -0
  81. package/dist/components/overlays/Alert.svelte.d.ts +37 -0
  82. package/dist/components/overlays/ContextMenu.svelte +67 -0
  83. package/dist/components/overlays/ContextMenu.svelte.d.ts +21 -0
  84. package/dist/components/overlays/Modal.svelte +99 -0
  85. package/dist/components/overlays/Modal.svelte.d.ts +40 -0
  86. package/dist/components/overlays/Popover.svelte +33 -0
  87. package/dist/components/overlays/Popover.svelte.d.ts +11 -0
  88. package/dist/components/overlays/Slideover.svelte +102 -0
  89. package/dist/components/overlays/Slideover.svelte.d.ts +37 -0
  90. package/dist/components/overlays/Tooltip.svelte +39 -0
  91. package/dist/components/overlays/Tooltip.svelte.d.ts +12 -0
  92. package/dist/components/saas/AuthCard.svelte +273 -0
  93. package/dist/components/saas/AuthCard.svelte.d.ts +16 -0
  94. package/dist/components/saas/PricingCard.svelte +166 -0
  95. package/dist/components/saas/PricingCard.svelte.d.ts +19 -0
  96. package/dist/components/saas/PricingTable.svelte +139 -0
  97. package/dist/components/saas/PricingTable.svelte.d.ts +11 -0
  98. package/dist/components/saas/SubscriptionCard.svelte +162 -0
  99. package/dist/components/saas/SubscriptionCard.svelte.d.ts +16 -0
  100. package/dist/components/saas/UserMenu.svelte +137 -0
  101. package/dist/components/saas/UserMenu.svelte.d.ts +19 -0
  102. package/dist/components/seo/Favicons.svelte +22 -0
  103. package/dist/components/seo/Favicons.svelte.d.ts +8 -0
  104. package/dist/components/seo/OgImage.svelte +61 -0
  105. package/dist/components/seo/OgImage.svelte.d.ts +12 -0
  106. package/dist/components/seo/Seo.svelte +170 -0
  107. package/dist/components/seo/Seo.svelte.d.ts +21 -0
  108. package/dist/composables/useAuth.svelte.d.ts +23 -0
  109. package/dist/composables/useAuth.svelte.js +157 -0
  110. package/dist/composables/useClipboard.svelte.d.ts +9 -0
  111. package/dist/composables/useClipboard.svelte.js +36 -0
  112. package/dist/composables/useColorMode.svelte.d.ts +8 -0
  113. package/dist/composables/useColorMode.svelte.js +20 -0
  114. package/dist/composables/useDebounce.svelte.d.ts +3 -0
  115. package/dist/composables/useDebounce.svelte.js +17 -0
  116. package/dist/composables/useMediaQuery.svelte.d.ts +3 -0
  117. package/dist/composables/useMediaQuery.svelte.js +17 -0
  118. package/dist/composables/useShortcuts.svelte.d.ts +10 -0
  119. package/dist/composables/useShortcuts.svelte.js +50 -0
  120. package/dist/composables/useToast.d.ts +19 -0
  121. package/dist/composables/useToast.js +34 -0
  122. package/dist/index.d.ts +101 -0
  123. package/dist/index.js +92 -0
  124. package/dist/server/auth/hook.d.ts +14 -0
  125. package/dist/server/auth/hook.js +36 -0
  126. package/dist/server/auth/index.d.ts +39 -0
  127. package/dist/server/auth/index.js +69 -0
  128. package/dist/server/db/index.d.ts +18 -0
  129. package/dist/server/db/index.js +43 -0
  130. package/dist/server/db/schema-pg.d.ts +977 -0
  131. package/dist/server/db/schema-pg.js +83 -0
  132. package/dist/server/db/schema-sqlite.d.ts +1045 -0
  133. package/dist/server/db/schema-sqlite.js +83 -0
  134. package/dist/server/db/types.d.ts +44 -0
  135. package/dist/server/db/types.js +1 -0
  136. package/dist/server/email/index.d.ts +27 -0
  137. package/dist/server/email/index.js +79 -0
  138. package/dist/server/polar/index.d.ts +29 -0
  139. package/dist/server/polar/index.js +49 -0
  140. package/dist/server/polar/webhook.d.ts +16 -0
  141. package/dist/server/polar/webhook.js +118 -0
  142. package/dist/site/config.d.ts +63 -0
  143. package/dist/site/config.js +48 -0
  144. package/dist/site/context.d.ts +11 -0
  145. package/dist/site/context.js +23 -0
  146. package/dist/site/hook.d.ts +15 -0
  147. package/dist/site/hook.js +38 -0
  148. package/dist/site/manifest.d.ts +6 -0
  149. package/dist/site/manifest.js +32 -0
  150. package/dist/site/og.d.ts +14 -0
  151. package/dist/site/og.js +116 -0
  152. package/dist/site/robots.d.ts +10 -0
  153. package/dist/site/robots.js +54 -0
  154. package/dist/site/schema.d.ts +67 -0
  155. package/dist/site/schema.js +67 -0
  156. package/dist/site/seo-helpers.d.ts +36 -0
  157. package/dist/site/seo-helpers.js +21 -0
  158. package/dist/site/sitemap-xsl.d.ts +6 -0
  159. package/dist/site/sitemap-xsl.js +164 -0
  160. package/dist/site/sitemap.d.ts +20 -0
  161. package/dist/site/sitemap.js +61 -0
  162. package/dist/styles/yaxa.css +84 -0
  163. package/dist/theme/theme.svelte.d.ts +74 -0
  164. package/dist/theme/theme.svelte.js +421 -0
  165. package/dist/utils/cn.d.ts +3 -0
  166. package/dist/utils/cn.js +3 -0
  167. package/dist/vite/index.d.ts +20 -0
  168. package/dist/vite/index.js +29 -0
  169. 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
+ }
@@ -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
+ }